hostPort 직접 바인딩 사용 점검

hostPort가 필요한 경우에만 노드 포트 연결과 접근 범위를 구성하세요.

설명

컨테이너 포트를 hostPort로 노드 포트에 바인딩하면 Pod가 실행되는 노드의 포트를 직접 사용하게 됩니다. Service의 NodePort와는 다른 기능이며, 실제 접근 가능 범위는 노드 네트워크와 방화벽에 따라 달라집니다.

특별한 이유가 없다면 hostPort 대신 필요한 Service나 Ingress 경로를 사용하는 편이 관리에 유리합니다. 이들 리소스를 사용하더라도 인증과 네트워크 접근 제한은 별도로 구성해야 합니다.

잠재적 영향

  • 불필요한 노드 포트 연결로 의도하지 않은 접근 경로가 생길 수 있습니다.
  • 같은 노드에서 동일한 포트를 사용하려는 워크로드 간에 충돌과 스케줄링 제약이 생길 수 있습니다.

해결 방법

  • 직접 노드 포트 연결이 필요하지 않다면 hostPort를 제거하고 필요한 Service나 Ingress 경로를 구성하세요.
  • hostPort가 필요하다면 실제 수신 포트, 바인딩 주소와 프로토콜을 확인하고 노드 방화벽과 접근 범위를 제한하세요. 배치 시 포트 충돌도 확인하세요.

예시

기존 nginx 예시는 hostPort 사용 여부만 비교합니다. 별도 Service나 Ingress는 생략했으며 실제 환경에서는 필요한 연결 경로와 접근 통제를 준비해야 합니다.

변경 전

yaml
apiVersion: v1
kind: Pod
metadata:
  name: web
spec:
  containers:
    - name: nginx
      image: nginx:1.25
      ports:
        - containerPort: 80
          hostPort: 8080

컨테이너의 80번 포트를 노드의 8080번 포트에 연결합니다. 외부에서 실제 접근할 수 있는지는 네트워크 통제에 달려 있습니다.

변경 후

yaml
apiVersion: v1
kind: Pod
metadata:
  name: web
spec:
  containers:
    - name: nginx
      image: nginx:1.25
      ports:
        - containerPort: 80

hostPort 연결을 제거하고 컨테이너 포트만 선언합니다. 필요한 서비스 접근 경로는 별도로 구성해야 합니다.

참조