레거시 kube-apiserver 비보안 바인딩 설정 점검

레거시 API 서버의 비보안 HTTP 리스너를 비활성화하고 보호된 관리 경로로 이전하세요.

설명

과거 kube-apiserver의 비보안 HTTP 리스너는 TLS와 인증·인가 보호 없이 API 요청을 처리했습니다. --insecure-bind-address는 그 리스너의 주소를 정하며, 실제 노출은 비보안 포트 활성화 여부와 바인딩 주소에 달려 있습니다. 루프백 주소도 해당 로컬 경로에 접근할 수 있는 주체에게는 보안 경계가 아닙니다.

이 플래그는 Kubernetes 1.20부터 효력이 없어졌고 1.24에서 제거되었습니다. 지원되는 버전에서는 보호된 API 엔드포인트를 사용하세요.

잠재적 영향

  • 비보안 리스너에 도달한 주체가 권한 검사 없이 관리 API를 악용할 수 있습니다.
  • 오래된 HTTP 경로에 의존하면 보호된 연결로 이전하는 과정에서 클라이언트가 중단될 수 있습니다.

해결 방법

  • 먼저 TLS, 인증과 인가가 적용된 API 경로를 준비하고 기존 클라이언트를 전환하세요.
  • 비보안 리스너를 지원하는 과거 버전에서는 --insecure-port=0으로 비활성화하세요. 바인딩 주소 플래그를 지우는 것만으로 포트가 닫히지는 않습니다.
  • 지원되는 버전으로 이전하고 실제 수신 포트와 네트워크 접근을 확인해 비보안 경로가 남지 않았는지 검증하세요.

예시

Kubernetes 1.6의 과거 옵션 비교이며 현재 배포 권장 구성이 아닙니다. TLS 인증서와 나머지 제어 평면 설정은 별도로 필요합니다.

변경 전

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-bind-address=127.0.0.1"

활성화된 비보안 리스너를 127.0.0.1에 바인딩합니다. 이 주소 자체가 인터넷 공개를 뜻하지는 않지만 로컬 HTTP 접근에는 인증·인가 보호가 없습니다.

변경 후

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"

이 과거 버전의 비보안 포트를 명시적으로 비활성화합니다. 필요한 클라이언트가 보호된 API 경로로 연결되는지 확인하세요.

참조