Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

스포크 제어 플레인

스포크 제어 플레인(Spoke Control Plane)은 Apollo가 스포크 환경의 상태를 보고받고 변경을 실행하는 데 필요한 구성 요소들의 집합입니다. 소프트웨어 관리, 인증 정보 중개와 상태 보고를 서로 다른 서비스가 담당합니다.

주요 구성 요소

서비스담당 기능
helm-chart-operatorhelm-chart 유형의 배포 개체를 설치하고 구성을 변경하며, 다른 스포크 제어 플레인 서비스도 관리
apollo-auth-broker에이전트를 대신하여 허브, 스포크와 아티팩트 레지스트리 사이의 인증 정보 중개
expected-state-k8sKubernetes 환경의 상태를 Apollo의 대상 모델로 변환하고 상태 및 점검 정보를 허브에 보고

helm-chart-operator

helm-chart-operator는 Apollo가 관리하는 Helm 차트의 설치와 구성 변경 같은 수명주기 작업을 수행하는 에이전트입니다. 또한 다른 스포크 제어 플레인 서비스들을 관리합니다.

이 서비스는 다른 스포크 제어 플레인 서비스에 의존하지 않으며, 스포크 환경에 가장 먼저 설치됩니다. 제어 플레인의 다른 서비스를 운영하려면 그 서비스를 배치하고 관리할 기반이 먼저 필요하기 때문입니다.

Pod의 레지스트리 주소와 이미지 인증 정보 변경

선택적으로 다음 기능을 활성화할 수 있습니다.

  • 컨테이너 이미지의 레지스트리 주소를 Apollo 아티팩트 레지스트리 미러를 사용하도록 변경합니다.
  • Kubernetes Pod 리소스에 이미지 가져오기용 비밀 정보를 주입합니다.

이 기능은 Helm hook Pod나 실행 중에 동적으로 생성하는 Pod처럼 일반적인 Helm 차트 관리 경로 밖의 Pod에도 관련됩니다.

구현은 Kubernetes의 변경 어드미션 웹훅을 사용합니다. 적용 범위는 다음 레이블이 붙은 네임스페이스에 배포되는 Pod입니다.

apollo.palantir.com/env-id: <배포 환경 ID>

이 네임스페이스는 Helm이나 Apollo가 관리할 수 있습니다. 레이블의 환경 ID에는 실제 Apollo 환경의 식별값을 사용합니다.

활성화 절차

먼저 Kubernetes API 서버가 웹훅 서비스에 접근할 수 있도록 필요한 네트워크 정책을 구성합니다. 사용하는 네트워크 구현에 따라 CiliumNetworkPolicy 같은 설정이 필요할 수 있습니다.

연결 정보값
Kubernetes 서비스 이름helm-chart-operator
Kubernetes 네임스페이스helm-chart-operator 제품이 설치된 네임스페이스
포트9111
프로토콜TCP
Pod 레이블 선택자rubix-app: helm-chart-operator

그다음 helm-chart-operator의 설정 재정의에 다음 값을 지정합니다.

enablePodRegistryReplacementMutatingWebhook: true

설정값만 바꾸고 API 서버에서 웹훅으로 가는 네트워크 경로를 열지 않으면 필요한 통신을 할 수 없습니다. 활성화 전에 실제 클러스터의 네트워크 정책과 서비스가 설치된 네임스페이스를 확인합니다.

특정 Pod 제외

이 기능을 활성화한 뒤 특정 Pod에 적용하지 않으려면 해당 Pod에 다음 레이블을 추가합니다.

apollo.palantir.com/skip-registry-mutation: ""

이 레이블은 해당 변경 웹훅의 처리에서 Pod를 제외합니다.

apollo-auth-broker

apollo-auth-broker는 Apollo 에이전트를 대신하여 인증 정보를 중개합니다. 관련 대상은 Apollo 허브, 스포크 환경과 아티팩트 레지스트리입니다.

에이전트가 계획을 받는 경로와 실제 산출물을 가져오는 경로에는 서로 다른 연결 및 인증 조건이 있을 수 있습니다. 인증 중개 기능은 이들 서비스 사이에서 에이전트가 필요한 인증을 수행하도록 지원합니다.

사용자가 허브 화면에 로그인할 수 있는지와 에이전트가 허브 및 레지스트리에 인증할 수 있는지는 별개의 문제입니다. 운영 문제를 조사할 때에는 실패한 연결과 그 연결에서 사용하는 인증 정보를 구분합니다.

expected-state-k8s

expected-state-k8s는 Kubernetes 환경의 현재 정보를 가져와 Apollo의 대상 모델로 변환하고 허브로 보냅니다. 예를 들어 어느 Pod 복제본이 얼마나 실행되어야 하는지에 관한 Kubernetes 정보를 전달합니다.

또한 관리되는 배포 개체들의 상태 정보를 수집하고 허브로 보내 상태를 보고합니다. 허브는 이 정보를 통해 환경의 상태를 표시하고 다른 운영 판단에 활용할 수 있습니다.

이 서비스는 환경 정보를 수집하고 변환하여 보고하는 구성 요소입니다. 어느 제품 릴리스를 적용할지 판단하고 변경 계획을 발행하는 오케스트레이션 엔진과 역할을 구분해야 합니다.