secure-port가 0으로 설정된 kube-apiserver

kube-apiserver의 HTTPS 수신 포트와 실제 TLS·인증·인가 구성을 확인하세요.

설명

kube-apiserver의 --secure-port는 HTTPS API 수신 포트를 지정합니다. 과거 버전에서는 0으로 보안 수신 포트를 끌 수 있었지만, 현재 API 서버는 이 값으로 비활성화하는 것을 허용하지 않습니다.

보호된 API 경로를 사용할 수 없으면 정상 제어 평면 통신이 중단될 수 있습니다. 포트 번호만 지정한다고 적절한 인증서와 접근 권한이 자동으로 갖춰지는 것은 아닙니다.

잠재적 영향

API 서버가 시작하지 못하거나 HTTPS 경로를 사용할 수 없으면 클러스터 관리와 워크로드 운영에 장애가 생길 수 있습니다. 레거시 비보안 경로가 대신 남아 있다면 보호되지 않은 API 접근 위험도 있습니다.

해결 방법

  • 지원되는 Kubernetes 버전에서 --secure-port를 6443 등 환경에 맞는 유효한 포트로 구성하세요.
  • API 주소에 맞는 TLS 인증서, 클라이언트의 신뢰 설정과 적절한 인증·인가를 구성하고 불필요한 네트워크 접근을 제한하세요.
  • 포트 변경 전 클라이언트와 로드 밸런서 설정을 준비하고 정상 연결, 인증 실패와 미승인 작업 거부를 검증하세요.

예시

Kubernetes 1.6의 과거 실행 옵션 발췌입니다. 당시의 0 설정과 HTTPS 포트 지정을 비교하며, 현재 배포에 오래된 이미지를 사용하라는 권고는 아닙니다.

변경 전

yaml
apiVersion: v1
kind: Pod
metadata:
  name: api-server
spec:
  containers:
    - name: kube-apiserver
      image: gcr.io/google_containers/kube-apiserver-amd64:v1.6.0
      command:
        - "kube-apiserver"
      args:
        - "--secure-port=0"

해당 과거 버전에서는 HTTPS 수신 포트를 비활성화합니다. 최신 버전에서는 유효하지 않은 설정입니다.

변경 후

yaml
apiVersion: v1
kind: Pod
metadata:
  name: api-server
spec:
  containers:
    - name: kube-apiserver
      image: gcr.io/google_containers/kube-apiserver-amd64:v1.6.0
      command:
        - "kube-apiserver"
        - "--secure-port=6443"

HTTPS 포트 6443을 지정합니다. 인증서와 접근 제어, 실제 클라이언트 연결도 함께 확인해야 합니다.

참조