[CKA] Kubernetes TLS
Kubernetes TLS의 핵심 개념과 구성 방법, 실습 풀이를 정리합니다.
인증 방식
Kubernetes API 서버는 TLS 인증서로 서버의 신원을 증명합니다. 클라이언트 인증은 X.509 인증서뿐 아니라 bearer token, 인증 프록시 등 클러스터에 설정된 방식을 사용할 수 있으므로 모든 API 통신이 항상 mTLS라고 볼 수는 없습니다.
- API 서버 통신:
- 클라이언트는 신뢰하는 CA로 API 서버 인증서를 검증합니다.
- 클라이언트 인증서를 사용하는 경우 API 서버는
--client-ca-file에 지정한 CA로 그 인증서를 검증합니다.
- 파드 간 통신:
- 기본적으로 파드 간 통신은 암호화되지 않습니다.
- 하지만 Service Mesh 솔루션(예: Istio)을 사용하면 파드 간 mTLS를 구현할 수 있습니다.
- 인증서 관리:
- 클러스터 구성 요소는 PKI(Public Key Infrastructure)를 기반으로 발급된 인증서를 사용합니다.
- kubeadm은 기본 구성에서 필요한 인증서를 생성하며, 외부 CA를 사용하는 구성도 가능합니다.
- 인증서 갱신:
- 갱신 방식은 인증서 종류와 클러스터 구성에 따라 다릅니다. kubelet 인증서 회전 설정과 kubeadm 인증서 관리 절차를 각각 확인해야 합니다.
- 외부 접근:
- kubectl은 kubeconfig에 설정된 인증서나 토큰 등의 자격 증명으로 API 서버에 인증합니다.
클라이언트 인증서를 사용하는 경우
다음은 인증서 검증과 요청 처리의 개념적인 흐름입니다.
- 클라이언트가 API 서버에 TLS 연결을 시작한다.
- k8s-api-server는 자신의 Public 인증서를 건네준다.
- 클라이언트가 자신이 신뢰하는 CA를 통해 API 서버 인증서가 유효한지 확인한다.
- 확인이 끝나면, 사용자가 자신의 Public 인증서를 api-server에게 건네준다.
- API 서버는
--client-ca-file에 지정된 CA를 통해 클라이언트 인증서가 유효한지 확인한다. - 인증 후에는 인가와 필요한 요청 검증을 통과해야 API 서버가 작업을 처리한다.
참고: Kubernetes 인증