본문으로 바로가기 본문 바로가기
WIKI 기술 지식 베이스

Kubernetes에서 etcd 분리하기

원문 보기 위키 갱신

Kubernetes에서 etcd 분리하기 (기본)

Kubernetes와 Calico가 하나의 etcd 데이터스토어를 공유할 때, 서로의 데이터를 침범하지 못하도록 etcd 사용자와 역할을 나누는 기본 가이드예요. 컴포넌트별 인증서 구성과 매니페스트 수정 포인트를 다뤄요. 오퍼레이터 설치에는 적용되지 않는다는 점을 먼저 확인하세요.

출처: 문서

본문

Tab: Operator

이 문서는 오퍼레이터 설치 방식의 Calico에는 적용되지 않아요.

Tab: Manifest

etcd를 RBAC과 함께 사용할 때는 etcd에 접근하는 모든 컴포넌트가 올바른 인증서로 설정되어야 해요. 이 문서는 Kubernetes와 Calico가 각자의 서브트리/프리픽스 안에서만 읽고 쓸 수 있도록 etcd를 분리하는 데 필요한 사용자와 역할을 설명해요. Calico 컴포넌트를 더 잘게 나눈 설정은 이 애드온 가이드를 참고하세요.

이 가이드는 여러분이 일반적인 인증서 생성 문서를 따르고 있고, 그 안내에 따라 인증서와 etcd 클러스터, 사용자, 역할을 설정한다고 가정해요.

이 가이드가 도움이 될 수 있는 경우

Kubernetes와 Calico가 하나의 etcd 데이터스토어를 공유하고 있고, Calico와 Kubernetes가 서로의 etcd 데이터에 접근하지 못하게 보장하고 싶을 때예요.

필요한 etcd 역할

다음 컴포넌트들은, 아래에 나열된 키 프리픽스나 경로에 접근을 허용하는 적절한 역할이 부여된 etcd 사용자와 이름(Common Name)이 일치하는 인증서가 필요해요.

  • kube-apiserver

    • /registry/에 대한 읽기·쓰기 접근.
    • etcd v3 API를 사용할 때 컴팩션(compaction)을 수행하려면 etcd 사용자에게 root 역할이 주어져야 해요 (이는 곧 Kubernetes가 v3 데이터에 대한 전체 읽기·쓰기 접근을 갖게 된다는 뜻이기도 해요).
  • Calico

    • /calico/에 대한 읽기·쓰기 접근.

아래에서 참조되는 모든 인증서/키 쌍은 위 정보대로 해당 컴포넌트를 위해 만들어졌다고 가정해요.

Kubernetes API 서버

kube-apiserver는 etcd에 직접 접근하는 유일한 Kubernetes 컴포넌트예요. etcd 클러스터 접근용 인증서를 kube-apiserver에 제공하는 데 필요한 플래그는 다음과 같아요:

  • --etcd-cafile=<CA certificate
  • --etcd-certfile=<certificate with etcd username as CN>
  • --etcd-keyfile=<key for the above certificate>

이 설정 방법은 Kubernetes 배포 방식에 따라 달라지므로, 플래그 설정에 도움이 필요하면 사용 중인 통합 도구의 문서를 참고하세요.

호스팅된 Calico 매니페스트 업데이트하기

CA와 Calico 전용 인증서/키 쌍으로 Calico를 배포하려면, 아래 설명된 수정을 가해 이 매니페스트 템플릿을 사용해요. 같은 정보는 다른 매니페스트에도 추가하거나 업데이트할 수 있지만, 링크된 매니페스트가 가장 직관적인 예시예요.

수정이 필요한 부분은 다음과 같아요:

  • etcd_ca, etcd_cert, etcd_key가 들어 있는 calico-config ConfigMap 줄을 다음과 같이 업데이트해요

    etcd_ca: '/calico-secrets/etcd-ca'
    etcd_cert: '/calico-secrets/etcd-cert'
    etcd_key: '/calico-secrets/etcd-key'
    
  • calico-etcd-secrets라는 이름의 Secret을 CA와 cert/key로 업데이트해야 해요. Secret의 data에 저장되는 정보는 base64로 인코딩되어야 해요. 각 파일에 cat <file> | base64 -w 0 같은 명령을 실행해서 base64 인코딩으로 변환한 다음, 그 출력을 적절한 필드에 넣으면 돼요.

    • etcd-key 필드에는 키 파일의 base64 인코딩된 내용이 필요해요.
    • etcd-cert 필드에는 인증서 파일의 base64 인코딩된 내용이 필요해요.
    • etcd-ca 필드에는 인증 기관(CA) 인증서의 base64 인코딩된 내용이 필요해요.
  • Kubernetes와 etcd 클러스터를 공유한다면, calico-kube-controllers 배포에서 COMPACTION_PERIOD 환경 변수를 0으로 설정해 etcd 컴팩션을 비활성화하세요.

위 업데이트를 마치면 매니페스트를 평소 방식대로 적용할 수 있어요.

더 알아보기 (Learn more)

핵심은 kube-apiserver에 /registry/, Calico에 /calico/ 프리픽스만 허용하는 역할 분리예요. etcd를 공유할 때는 Calico 쪽 컴팩션을 꺼야 한다는 점도 잊지 마세요. 더 잘게 나눈 구성이 필요하면 고급(kubernetes-advanced) 가이드를 이어서 보세요.