설명
API 서버가 인증서로 etcd에 자신을 인증하려면 --etcd-certfile과 --etcd-keyfile을 함께 설정해야 합니다. 하나만 지정하면 이 클라이언트 인증 구성이 불완전해 연결이 실패할 수 있습니다.
클라이언트 인증서와 키는 etcd 서버 인증서를 검증하는 CA 설정과 별개입니다. 파일 두 개를 지정하는 것만으로 상호 인증이 완성되지는 않습니다.
잠재적 영향
- etcd 연결 실패로 API 서버의 정상 동작에 문제가 생길 수 있습니다.
- 장애를 피하려고 인증이나 서버 검증을 우회하면 제어면 데이터의 보호 수준이 낮아질 수 있습니다.
해결 방법
--etcd-certfile과--etcd-keyfile에 서로 대응하는 유효한 인증서와 개인 키를 지정하세요.- HTTPS etcd 엔드포인트와
--etcd-cafile을 구성하고, etcd가 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"]
args: ["--etcd-keyfile=/path/to/key/file.key"]
개인 키만 지정했습니다. 인증서 기반 클라이언트 인증에 필요한 쌍이 완성되지 않습니다.
변경 후
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: ["--etcd-keyfile=/path/to/key/file.key", "--etcd-certfile=/path/to/cert/file.crt"]
클라이언트 인증서와 개인 키를 함께 지정했습니다. HTTPS 엔드포인트와 양쪽의 CA 신뢰 설정도 별도로 필요합니다.