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 - 클러스터 외부에서 직접 접근 가능
- 디버깅이나 테스트 환경에서 자주 사용됨
차이점
| 구분 | hostPort | NodePort |
|---|---|---|
| 설정 방식 | 컨테이너 포트를 노드 포트에 직접 매핑 | 클러스터 내 모든 노드에 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