컨트롤 플레인 bind-address 접근 범위 점검

관리용 수신 주소를 필요한 접근 경로에 맞춰 제한하세요.

설명

kube-controller-manager와 kube-scheduler 같은 컨트롤 플레인 구성 요소는 관리용 인터페이스를 가집니다. --bind-address가 0.0.0.0이면 해당 네트워크 네임스페이스의 모든 IPv4 인터페이스에서 수신할 수 있습니다. 실제 외부 접근은 Pod·노드 네트워크와 방화벽, 인증·인가 설정에 달려 있습니다.

로컬 접근만 필요하다면 127.0.0.1로 제한하세요. 다른 위치의 상태 검사나 모니터링이 필요하다면 연결 요구를 확인한 뒤 수신 주소와 허용 네트워크를 정해야 합니다.

잠재적 영향

  • 필요하지 않은 네트워크에서 관리용 포트에 연결을 시도할 수 있습니다.
  • 연결 요구를 확인하지 않고 루프백으로 바꾸면 상태 검사나 모니터링이 중단될 수 있습니다.

해결 방법

  • 로컬 접근만 필요한 kube-controller-manager나 kube-scheduler에 --bind-address=127.0.0.1을 설정하세요. 컨테이너의 루프백이 어느 네트워크 네임스페이스에 속하는지 확인하세요.
  • 원격 모니터링 등이 필요하면 승인된 수신 주소와 방화벽을 구성하고 인증·인가를 유지하세요. 변경 후 상태 검사와 실제 접근 범위를 시험하세요.

예시

v1.30.0에서 수신 주소 인자만 비교하는 기존 발췌입니다. 실제 자격 증명과 나머지 실행 설정은 생략했습니다. hostNetwork를 사용하지 않는 이 Pod의 루프백은 Pod 네트워크 네임스페이스에 속합니다.

변경 전

yaml
apiVersion: v1
kind: Pod
metadata:
  name: kube-controller-manager
spec:
  containers:
    - name: kube-controller-manager
      image: registry.k8s.io/kube-controller-manager:v1.30.0
      command:
        - kube-controller-manager
        - --bind-address=0.0.0.0

모든 IPv4 인터페이스에서 관리용 요청을 수신할 수 있습니다. 이것만으로 인터넷 접근이나 익명 접근이 허용되는 것은 아닙니다.

변경 후

yaml
apiVersion: v1
kind: Pod
metadata:
  name: kube-controller-manager
spec:
  containers:
    - name: kube-controller-manager
      image: registry.k8s.io/kube-controller-manager:v1.30.0
      command:
        - kube-controller-manager
        - --bind-address=127.0.0.1

같은 네트워크 네임스페이스의 루프백에서만 수신합니다. 필요한 상태 검사와 모니터링이 계속 연결되는지 확인해야 합니다.

참조