레거시 kube-apiserver 비보안 포트 설정 점검

레거시 kube-apiserver의 비보안 HTTP 포트를 닫고 보호된 API 접근 경로로 전환하세요.

설명

과거 kube-apiserver의 비보안 HTTP 포트는 TLS 암호화와 인증·인가 없이 API 요청을 처리했습니다. 이 포트가 열려 있고 클라이언트가 연결할 수 있다면 제어 평면에 대한 무단 접근 경로가 될 수 있습니다. 실제 접근 범위는 바인딩 주소와 네트워크 경로에도 달려 있습니다.

--insecure-port는 Kubernetes 1.20부터 효력이 없어졌고 1.24에서 제거되었습니다. 최신 버전에 이 플래그를 추가하지 말고, 남아 있는 레거시 환경의 실제 수신 포트와 업그레이드 계획을 확인하세요.

잠재적 영향

비보안 포트에 도달한 주체가 보호 없이 API를 사용하면 클러스터 데이터 조회나 워크로드 변경으로 이어질 수 있습니다. 평문 통신은 전송 내용의 기밀성과 무결성도 보호하지 못합니다.

해결 방법

  • 해당 옵션을 지원하는 레거시 환경에서는 --insecure-port=0으로 비보안 포트를 비활성화하세요.
  • 의존하는 클라이언트를 먼저 TLS와 적절한 인증·인가가 적용된 API 경로로 이전하세요.
  • 변경 후 비보안 포트가 닫혔는지, 정상 관리 작업은 성공하고 승인되지 않은 요청은 거부되는지 확인하고 지원되는 버전으로 업그레이드하세요.

예시

Kubernetes 1.6의 과거 실행 옵션을 비교하는 발췌입니다. 현재 배포에 이 이미지나 제거된 옵션을 사용하라는 권고가 아닙니다.

변경 전

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"
        - "--insecure-port=1143"

레거시 API 서버가 비보안 HTTP 포트 1143을 사용하도록 지정합니다. 바인딩 주소를 바꾸는 것만으로 이 포트를 비활성화할 수는 없습니다.

변경 후

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"
        - "--insecure-port=0"

지원하던 버전에서 비보안 포트를 끕니다. TLS 인증서와 정상 인증·인가, 클라이언트 연결은 별도로 준비해야 합니다.

참조