devops

토스, GitOps와 OPA로 실수 없이 안전하게 쿠버네티스 운영 본문

DevOps/Terraform

토스, GitOps와 OPA로 실수 없이 안전하게 쿠버네티스 운영

vata500 2022. 7. 3. 16:39
반응형

토스 DevOps Engineer, 김형록님의 개발자 컨퍼런스 내용을 정리해봤다.
안전하게, 편하게, 실수하지 않고 운영하기 위해서 GitOps와 OPA를 활용한다.

1. ArgoCD를 이용한 GitOps 패턴
2. Open Policy Agent(OPA)를 통한 안전 정책 적용

쿠버네티스의 컨테이너는 네트워크에 내에 높은 복잡도는 가시성을 떨어뜨려 휴먼에러나 보안 구멍을 발생하게 된다. 소통 과정 혹은 새로운 팀의 참여를 통해 발생할 수 있는 문제도 무시할 수 없다. 이런 문제들을 토스는 GitOps와 OPA로 해결했다.

토스는 크게 3가지 정도는 쿠버네티스 Cluster를 운영하고 있다.
1. Testbed : 아무 트래픽이 없는 클러스터
2. Dev : 개발/테스트 목적의 트래픽이 있는 클러스터
3. Live : 실제 사용되는 클러스터
만약 Istio 버전 업그레이드 작업이 있다면, Testbed 클러스터와 Dev 클러스터에서 테스트를 한다. 이중화 구조를 이용해 Live 환경에서 점진적으로 적용한다.

라이브 서비스에 멀티 데이터센터, 멀티 클러스터를 구축해서 active-active 이중화 구조를 적용하고 있다. 그래서 쿠버네티스 클러스터 상단 트래픽을 조절하여 사이드 이펙트를 제거할 수 있으며 인프라 변경사항을 부드럽게 적용할 수 있다.
그러나, 너무 쉽게 인프라 튜닝과 벤치마킹이 가능한 환경이라 양 클러스터의 형상이 달라지는 경우가 생긴다.
주요 인프라 리소스의 설정 사항이 동시에 서로 다른 경우가 생기는 것이다. 이를 피하기 위해서 반복적으로 확인하게 된다.

토스는 GitOps를 이용한 가시성 확보, 명확한 형상관리를 통해 사이드이펙트를 해결했다고 한다.

GitOps는 개념적으로는 Git을 어플리케이션의 Single Source of Truth로 여기는 것이며, 이는 시스템의 생성, 삭제, 수정 등 배포관점에서 모든 과정은 Git으로 적용한다.

GItOps 패턴 구현을 위해 ArgoCD라는 오픈소스를 활용한다. Git 상에 존재하는 Kubernete 배포 정보를 쿠버네티스 커스텀 리소스로 표현하고 실제 배포상태와 싱크하는 오퍼레이터 패턴의 오픈소스다.
주요 컴포넌트는 레포지토리 서버, 컨트롤러 서버가 있다.
ArgoCD를 통해 변경사항을 Git 템플릿에서 클러스터에서 더블 체크가 가능해졌다. (오토싱크는 사용하지 않음)

차트 단위가 아닌, 클러스터 단위의 배포상황을 체크하기 위해서 App-of-Apps를 활용한다. 특정 Git 레포안에 위와같은 헬름차트 형태로 존재한다. 그럼 App-of-Apps 차트안에는
GitOps 적용시 k8s 시크릿 관리에 보안 리스크가 있다. 이는 Vault를 활용하여 해결한다.차트에 필요한 쿠버네티스의 시크릿을 Vault 시크릿으로 교체하여 GitOps의 시크릿값을 노출하는 것을 막을 수 있다.
이 방식으로 운영 결과
1) App-of-apps 통합 차트를 활용해 인프라스트럭쳐의 가시성이 높아짐
2) 신규 클러스터 구성 속도가 줄어듦
3) 예상치 못한 구성차이 방지가 가능
4) 히스토리 추적이 가능(소통 비용 줄임)


OPA(Open Policy Agent)로 휴먼 에러 방지하기

OPA는 Rego라는 자체 언어로 특정 정책 설정, decision 메이킹을 한다.

간단히 설명하면 User가 쿠버네티스를 통해서 파드를 생성하는 'create'요청을 하면 OPA 컨트롤러가 API 서버로 넘겨서 상황에 따라서 요청을 수행하거나 반려하는 구조다.

아무튼 모든 명령에 대한 정책을 세워서 설정 상의 이슈를 막고, 개발자의 권한 제어를 통해서 휴먼에러를 어느정도 막을 수 있으며, 생산성에 피해를 끼치지 않는다.

반응형
Comments