설명
--kubelet-certificate-authority는 kube-apiserver가 kubelet 서버 인증서를 검증할 때 사용할 CA 파일을 지정합니다. API 서버는 기본적으로 kubelet 서버 인증서를 검증하지 않으므로, 신뢰할 수 없는 네트워크에서는 중간자 공격에 노출될 수 있습니다.
잠재적 영향
- 서버를 사칭한 엔드포인트에 로그나 관리 요청이 전달될 수 있습니다.
- 잘못된 CA나 서버 이름을 사용하면 인증서 검증에 실패해 노드 관리 작업이 중단될 수 있습니다.
해결 방법
--kubelet-certificate-authority에 kubelet 서버 인증서를 발급한 신뢰할 CA 묶음을 지정하세요.- 접속 주소가 인증서의 DNS 이름 또는 IP 주소와 일치하고 파일이 API 서버에서 읽을 수 있는지 확인하세요.
- kubelet 인증·인가도 구성하고, 정상 연결은 성공하며 신뢰하지 않는 인증서는 거부되는지 시험하세요.
예시
Kubernetes 1.6.0의 과거 인자 예시입니다. 지원되는 배포 환경의 실제 CA 파일과 마운트 경로로 바꾸세요.
변경 전
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 서버 인증서를 검증할 CA가 지정되지 않았습니다. HTTPS 암호화만으로 서버의 신원이 검증되지는 않습니다.
변경 후
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"]
args: ["--kubelet-certificate-authority=/path/to/any/cert/file.pem"]
검증에 사용할 CA 파일을 지정했습니다. 파일 내용과 kubelet 서버 인증서가 실제로 대응해야 합니다.