워크로드 host_port 사용 필요성 점검

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

설명

host_port는 컨테이너 포트를 노드의 포트에 연결하는 설정입니다. 이를 생략하는 일반적인 파드 구성이 잘못된 것은 아니며, container_port 선언만으로 임의의 호스트 포트가 공개되는 것도 아닙니다. Service의 NodePort와는 다른 기능입니다.

노드 포트에 직접 바인딩할 필요가 있을 때만 사용하고 포트 충돌, 배치 제약과 실제 네트워크 노출을 검토하세요.

잠재적 영향

  • 필요하지 않은 host_port를 추가하면 노드의 서비스 노출과 포트 충돌 위험이 늘어날 수 있습니다.
  • 직접 노드 연결이 필요한 기능에서 설정이나 방화벽이 맞지 않으면 연결이 실패할 수 있습니다.

해결 방법

  • 일반 서비스는 host_port 없이 Service나 Ingress 등 필요한 공개 경로를 사용하세요. 직접 노드 포트 연결이 꼭 필요할 때만 해당 host_port와 프로토콜을 지정하세요.
  • 실제 애플리케이션의 수신 포트, 노드 네트워크·방화벽과 스케줄링 충돌을 확인하세요. 파드의 container_port 선언만으로 애플리케이션의 수신 포트가 변경되지는 않습니다.

예시

nginx가 실제로 8080에서 수신하도록 별도 구성한 예제입니다. 기본 이미지의 수신 포트가 선언만으로 8080이 되지는 않습니다. 변경 후는 필요한 경우의 노드 포트 연결 예시이며 일반적인 보안 개선을 의미하지 않습니다. 유지보수되는 이미지를 사용하세요.

변경 전

hcl
resource "kubernetes_pod" "example" {
  metadata {
    name = "app"
  }

  spec {
    container {
      name  = "web"
      image = "nginx:1.7.9"

      port {
        container_port = 8080
      }
    }
  }
}

변경 후

hcl
resource "kubernetes_pod" "example" {
  metadata {
    name = "app"
  }

  spec {
    container {
      name  = "web"
      image = "nginx:1.7.9"

      port {
        container_port = 8080
        host_port      = 8080
      }
    }
  }
}

설명:

  • 변경 전: 컨테이너 포트만 선언하고 host_port 연결은 요청하지 않습니다. 일반적인 구성일 수 있습니다.
  • 변경 후: 노드의 8080 포트를 컨테이너의 8080에 연결합니다. 직접 노드 접근이 필요할 때만 사용해야 합니다.

참조