DATA GROUND 로고DATA GROUND
Kubernetes

[Kubernetes] hostPort와 NodePort 서비스의 차이

S.H. Yoo
마지막 업데이트: 2024-04-10

Kubernetes에서 hostPort와 NodePort의 차이점을 접근 방식, 확장성, 포트 관리, 로드밸런싱 관점에서 비교하고 사용 시 주의사항을 정리합니다.

작성일: 2024-04-10작성자: S.H. Yoo마지막 업데이트: 2024-04-10

공통점

hostPort와 NodePort는 모두
노드의 IP 주소와 포트를 통해 외부에서 접근할 수 있다는 공통점이 있습니다.

  • 접근 방식: NodeIP:Port
  • 클러스터 외부에서 직접 접근 가능
  • 디버깅이나 테스트 환경에서 자주 사용됨

차이점

구분hostPortNodePort
설정 방식컨테이너 포트를 노드 포트에 직접 매핑클러스터 내 모든 노드에 NodePort를 할당하고 Pod로 트래픽 포워딩
확장성특정 Pod에 한정됨클러스터 전체에서 확장 가능
포트 충돌동일 노드에서 같은 포트 사용 시 충돌 발생NodePort 범위 내에서 자동 할당 (30000–32767)
로드밸런싱지원하지 않음기본 로드밸런싱 지원
운영 난이도높음상대적으로 낮음

운영 관점에서의 정리

  • hostPort

    • 특정 Pod에만 트래픽을 직접 연결해야 할 때 사용
    • 포트 충돌 위험이 있어 운영 환경에서는 권장되지 않음
    • 주로 디버깅, 테스트 목적에 적합
  • NodePort

    • 클러스터 전반에서 서비스 확장이 가능
    • 간단한 외부 노출 용도로 사용 가능
    • 다만 외부 포트가 랜덤 범위로 할당되어 관리가 불편할 수 있음

실무에서는
NodePort 대신 LoadBalancer 또는 Ingress 사용이 더 일반적입니다.


hostPort 예시

spec:
  containers:
  - name: example-container
    ports:
    - containerPort: 8080
      hostPort: 8081
  • 노드의 8081 포트를 컨테이너의 8080 포트로 직접 매핑
  • 동일 노드에 동일 포트 설정 시 충돌 발생

NodePort 예시

apiVersion: v1
kind: Service
metadata:
  name: example-service
spec:
  type: NodePort
  selector:
    app: example-app
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
    # nodePort는 지정하지 않으면 자동 할당 (30000–32767)
  • 모든 노드에 NodePort가 열림
  • 어느 노드로 접근하더라도 트래픽이 해당 Pod로 전달됨

마무리하며

정리하면 다음 기준으로 선택하면 됩니다.

  • 단일 노드 / 테스트 / 디버깅 → hostPort
  • 간단한 외부 노출 / 소규모 환경 → NodePort
  • 운영 환경 / 확장성 / 안정성 → LoadBalancer 또는 Ingress

hostPort와 NodePort의 차이를 명확히 이해하면
Kubernetes 서비스 설계가 훨씬 수월해집니다.

마지막 업데이트: 2024-04-10

당신이 관심있을 만한 글