Kubelet Client Certificate 또는 Key 미설정

API 서버가 kubelet에 인증서로 인증할 때는 클라이언트 인증서와 개인 키가 함께 필요합니다.

설명

--kubelet-client-certificate와 --kubelet-client-key는 kube-apiserver가 kubelet에 자신을 인증할 때 사용하는 쌍입니다. 인증서 인증을 사용하는 환경에서 하나라도 빠지면 API 서버의 kubelet 접근이 실패할 수 있습니다.

이 클라이언트 인증과 kubelet 서버 인증서의 CA 검증은 별개의 설정입니다. 인증서 쌍만으로 상호 인증과 접근 제어가 모두 완성되지는 않습니다.

잠재적 영향

  • 로그 조회나 실행 중인 컨테이너 연결 등 kubelet을 이용하는 작업이 실패할 수 있습니다.
  • 연결 오류를 피하려고 익명 접근을 허용하면 노드 관리 기능이 불필요하게 노출될 수 있습니다.

해결 방법

  • 인증서 인증을 사용할 때 두 인자에 유효한 클라이언트 인증서와 대응하는 개인 키를 지정하세요.
  • 파일의 경로·마운트·권한·만료일과 kubelet의 클라이언트 CA 신뢰를 확인하세요.
  • 서버 인증서 검증과 kubelet 인가도 구성하고 API 서버의 정상 접근을 시험하세요.

예시

Kubernetes 1.6.0의 과거 인자 발췌입니다. 실제 배포 버전의 인증 방식과 파일 경로를 적용하세요.

변경 전

yaml
apiVersion: v1
kind: Pod
metadata:
  name: command-demo
spec:
  containers:
    - name: command-demo-container
      image: gcr.io/google_containers/kube-apiserver-amd64:v1.6.0
      command: ["kube-apiserver"]

클라이언트 인증서와 키가 지정되지 않았습니다. kubelet이 클라이언트 인증서를 요구한다면 이 구성으로 인증할 수 없습니다.

변경 후

yaml
apiVersion: v1
kind: Pod
metadata:
  name: command-demo
spec:
  containers:
    - name: command-demo-container
      image: gcr.io/google_containers/kube-apiserver-amd64:v1.6.0
      command:
        [
          "kube-apiserver",
          "--kubelet-client-certificate=/path/to/any/file.pem",
          "--kubelet-client-key=/path/to/any/file2.pem"
        ]

인증서와 키를 함께 지정했습니다. kubelet이 해당 인증서를 신뢰하고 필요한 작업을 허용하는지도 확인하세요.

참조