[CKA] Kubernetes TLS

Kubernetes TLS의 핵심 개념과 구성 방법, 실습 풀이를 정리합니다.

인증 방식

Kubernetes API 서버는 TLS 인증서로 서버의 신원을 증명합니다. 클라이언트 인증은 X.509 인증서뿐 아니라 bearer token, 인증 프록시 등 클러스터에 설정된 방식을 사용할 수 있으므로 모든 API 통신이 항상 mTLS라고 볼 수는 없습니다.

  1. API 서버 통신:
    • 클라이언트는 신뢰하는 CA로 API 서버 인증서를 검증합니다.
    • 클라이언트 인증서를 사용하는 경우 API 서버는 --client-ca-file에 지정한 CA로 그 인증서를 검증합니다.
  2. 파드 간 통신:
    • 기본적으로 파드 간 통신은 암호화되지 않습니다.
    • 하지만 Service Mesh 솔루션(예: Istio)을 사용하면 파드 간 mTLS를 구현할 수 있습니다.
  3. 인증서 관리:
    • 클러스터 구성 요소는 PKI(Public Key Infrastructure)를 기반으로 발급된 인증서를 사용합니다.
    • kubeadm은 기본 구성에서 필요한 인증서를 생성하며, 외부 CA를 사용하는 구성도 가능합니다.
  4. 인증서 갱신:
    • 갱신 방식은 인증서 종류와 클러스터 구성에 따라 다릅니다. kubelet 인증서 회전 설정과 kubeadm 인증서 관리 절차를 각각 확인해야 합니다.
  5. 외부 접근:
    • kubectl은 kubeconfig에 설정된 인증서나 토큰 등의 자격 증명으로 API 서버에 인증합니다.

클라이언트 인증서를 사용하는 경우

다음은 인증서 검증과 요청 처리의 개념적인 흐름입니다.

  1. 클라이언트가 API 서버에 TLS 연결을 시작한다.
  2. k8s-api-server는 자신의 Public 인증서를 건네준다.
  3. 클라이언트가 자신이 신뢰하는 CA를 통해 API 서버 인증서가 유효한지 확인한다.
  4. 확인이 끝나면, 사용자가 자신의 Public 인증서를 api-server에게 건네준다.
  5. API 서버는 --client-ca-file에 지정된 CA를 통해 클라이언트 인증서가 유효한지 확인한다.
  6. 인증 후에는 인가와 필요한 요청 검증을 통과해야 API 서버가 작업을 처리한다.

참고: Kubernetes 인증