Calico 컴포넌트 보호를 위한 암호화와 인증 구성
이 문서는 Calico 컴포넌트 사이, 그리고 컴포넌트와 데이터스토어 사이 통신에 TLS 암호화와 상호 인증을 적용하는 방법을 다뤄요. etcd 접속, kube-apiserver 접속, Felix-Typha 접속별로 설정 방식이 달라요. Felix-Typha 구간에는 SPIFFE 식별자를 쓰는 방법을 권장해요.
출처: 문서
본문
Calico 컴포넌트에서 etcd로 가는 연결
Tab: Operator
오퍼레이터 기반 설치는 etcd와 통신할 필요가 없으므로 이 섹션은 해당되지 않아요.
Tab: Manifest
etcd 데이터스토어를 사용한다면 다음과 같이 연결에 상호 TLS 인증을 켜는 것을 권해요.
-
etcd를 구성해서 TLS로 통신을 암호화하고, 클라이언트에게 etcd 인증 기관이 서명한 인증서 제시를 요구하세요.
-
각 Calico 컴포넌트가 etcd 서버의 신원을 검증하고, etcd 인증 기관이 서명한 인증서를 etcd 서버에 제시하도록 구성하세요.
- calico/node
calicoctl- CNI 플러그인 (Kubernetes와 OpenShift만 해당)
- Kubernetes 컨트롤러 (Kubernetes와 OpenShift만 해당)
- Felix
- Typha (규모가 큰 Kubernetes 배포에서 자주 배포해요)
- Neutron 플러그인 (OpenStack만 해당)
- DHCP 에이전트 (OpenStack만 해당)
Calico 컴포넌트에서 kube-apiserver로 가는 연결 (Kubernetes와 OpenShift)
kube-apiserver에 TLS를 켜고, 클라이언트 인증서 모듈과 JSON 웹 토큰(JWT) 인증 모듈도 함께 사용하는 것을 권해요. 그러면 Calico 컴포넌트와의 모든 통신이 TLS 위에서 이뤄져요. Calico 컴포넌트는 X.509 인증서나 JWT를 kube-apiserver에 제시해서 kube-apiserver가 신원을 검증하게 해요.
Felix에서 Typha로 가는 연결 (Kubernetes)
Tab: Operator
오퍼레이터 기반 설치는 Felix에서 Typha로 가는 연결에 상호 TLS 인증을 자동으로 구성해요.
Tab: Manifest
Felix에서 Typha로 가는 연결에 상호 TLS 인증을 켜는 것을 권해요. 그러려면 Typha에는 서버 인증서를, Felix에는 클라이언트 인증서를 준비해야 해요. 각 서비스는 자신의 인증서에 대응하는 개인 키도 필요해요. 여기에 더해 다음 중 하나를 구성해야 해요.
-
SPIFFE 식별자 (권장): Felix용 SPIFFE 식별자를 생성하고, Typha의
ClientURISAN을 Felix의 SPIFFE ID로 설정하고, Felix 인증서의URI SAN필드에 Felix의 SPIFFE ID를 넣어요. 마찬가지로 Typha용 SPIFFE 식별자를 생성하고, Felix의TyphaURISAN을 Typha의 SPIFFE ID로 설정하고, Typha 인증서의URI SAN필드에 Typha의 SPIFFE ID를 넣어요. -
Common Name 식별자: Typha의
ClientCN을 Felix 인증서의Common Name값으로 구성해요. Felix의ClientCN을 Typha 인증서의Common Name값으로 구성해요.
SUCCESS: Common Name에서 SPIFFE 식별자로 마이그레이션하는 중이라면 두 값을 모두 설정할 수 있어요. 어느 한쪽이라도 일치하면 통신에 성공해요.
다음은 클러스터에서 Felix-Typha 통신을 보호하는 예시예요.
-
인증 기관을 고르거나 직접 준비하세요.
-
그 기관이 서명한 다음 리프(leaf) 인증서와 대응하는 키를 확보하거나 생성하세요.
-
Common Name이
typha-client이고 extended key usage가ClientAuth인, Felix마다 하나의 인증서. -
Common Name이
typha-server이고 extended key usage가ServerAuth인, Typha마다 하나의 인증서.
-
-
각 Typha에 다음을 구성하세요.
-
인증 기관 인증서를 가리키는
CAFile -
해당 Typha의 인증서를 가리키는
ServerCertFile -
해당 Typha의 키를 가리키는
ServerKeyFile -
typha-client로 설정한ClientCN -
설정하지 않은
ClientURISAN.
-
-
각 Felix에 다음을 구성하세요.
-
인증 기관(CA) 인증서를 가리키는
TyphaCAFile -
해당 Felix의 인증서를 가리키는
TyphaCertFile -
해당 Felix의 키를 가리키는
TyphaKeyFile -
typha-server로 설정한TyphaCN -
설정하지 않은
TyphaURISAN.
-
SPIFFE 호환 배포를 만들려면 위 절차를 그대로 따르되 다음만 다르게 하면 돼요.
-
Felix와 Typha를 나타낼 SPIFFE 신원을 정하세요.
-
Felix와 Typha의 리프 인증서를 생성할 때, 해당 SPIFFE 신원을 URI SAN으로 인증서에 넣으세요.
-
ClientCN과TyphaCN은 설정하지 않고 그대로 두세요. -
Typha의
ClientURISAN파라미터를, 각 Felix 인증서에 사용한 Felix용 SPIFFE 신원으로 설정하세요. -
Felix의
TyphaURISAN파라미터를 Typha용 SPIFFE 신원으로 설정하세요.
이 파라미터들의 상세 레퍼런스는 다음을 참고하세요.
-
Typha: Felix-Typha TLS 구성
-
Felix: Felix-Typha TLS 구성
더 알아보기 (Learn more)
핵심은 인증 기관(CA) 하나로 Felix와 Typha 인증서를 모두 발급하고, CN 또는 SPIFFE URI SAN으로 신원을 맺어 주는 거예요. Common Name에서 SPIFFE로 넘어갈 때는 두 식별자를 함께 설정해 두면 전환이 매끄러워요. 오퍼레이터 설치라면 etcd와 Felix-Typha 구간의 TLS가 자동으로 구성된다는 점도 기억하세요.