Kubelet HTTPS 비활성화

API 서버와 kubelet 사이의 관리 통신을 HTTPS로 보호하세요.

설명

과거 kube-apiserver의 --kubelet-https=false 설정은 kubelet 연결에 HTTPS 대신 HTTP를 사용하게 합니다. 보호되지 않은 네트워크 경로에서는 요청과 응답이 노출되거나 변조될 수 있습니다.

HTTPS를 사용하는 것과 kubelet 서버 인증서를 검증하는 것은 별개입니다. 암호화와 서버 신원 확인 및 접근 제어를 함께 구성해야 합니다.

잠재적 영향

  • 로그나 노드 관리 통신이 네트워크 중간에서 노출될 수 있습니다.
  • 변조된 요청·응답으로 운영 작업의 무결성이 훼손될 수 있습니다.

해결 방법

  • 해당 인자를 지원하는 과거 구성에서는 --kubelet-https=false를 제거하고, 사용 버전이 지원하는 HTTPS 연결을 구성하세요.
  • kubelet CA 검증과 필요한 클라이언트 인증·인가를 설정하세요.
  • 정상 노드 관리 작업이 성공하고 인증서 검증 실패가 우회되지 않는지 확인하세요.

예시

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: ["--kubelet-https=false"]

kubelet HTTPS를 명시적으로 끕니다. HTTP 연결이 사용되면 해당 통신은 TLS로 보호되지 않습니다.

변경 후

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"]

HTTPS 비활성화 인자를 제거했습니다. 실제 연결의 HTTPS 사용과 서버 인증서 검증도 확인해야 합니다.

참조