본문 바로가기
DevOps/Kubernetes

[Kubernetes] Kubernetes NodePort란?

by Yoon_estar 2025. 2. 28.
728x90

🚀 개요

쿠버네티스에서 애플리케이션을 외부에서 접근 가능하도록 만드는 방법 중 하나가 NodePort입니다. NodePort는 Kubernetes의 Service 타입 중 하나로, 클러스터 내부에서만 접근 가능한 ClusterIP와 달리, 외부에서도 특정 포트를 통해 애플리케이션에 접근할 수 있도록 해줍니다. 

 

1️⃣NodePort란?

NodePort는 쿠버네티스 클러스터 내부에서 실행 중인 Pod에 외부에서 접근할 수 있는 Service 타입입니다.

NodePort를 사용하면 클러스터 내 모든 노드의 특정 포트에서 서비스로의 트래픽을 수신할 수 있습니다. 이를 통해 클러스터 외부에서 http://IP:NodePort 형식으로 애플리케이션에 접근할 수 있습니다. 

 

💡 NodePort의 주요 특징

  • 모든 노드에서 접근 가능 : 클러스터 내 모든 노드의 해당 포트를 통해 서비스 접근 가능
  • 고정된 포트 범위(30000 ~ 32767) 범위 내에서 포트를 할당
  • 기본적으로 ClusterIP 포함 : 내부 네트워크에서도 접근 가능
  • 로드 밸런싱 기능 : 여러 Pod가 연결된 경우, 라운드 로빈 방식으로 트래픽을 분산

 

2️⃣NodePort 동작 방식

NodePort를 생성하면 다음과 같이 동작합니다.

  1. 사용자가 NodePort 타입의 Service를 생성하면, 쿠버네티스는 30000 ~ 32767 범위 내에서 포트를 할당합니다. 
  2. 클러스터의 모든 노드는 해당 포트에서 요청을 수신합니다. 
  3. 요청은 내부적으로 ClusterIP를 통해 해당 서비스에 연결된 Pod로 전달됩니다. 

 

3️⃣NodePort 설정 방법 (YAML 예제)

apiVersion: v1
kind: Service
metadata:
  name: my-nodeport-service
spec:
  type: NodePort
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80         # 내부 ClusterIP 서비스 포트
      targetPort: 80    # Pod의 컨테이너 포트
      nodePort: 30080   # 외부에서 접근할 수 있는 포트 (30000-32767 사이에서 지정 가능)

 

설명

  • type: NodePort → Service 타입을 NodePort로 지정
  • selector.app: my-appmy-app 레이블을 가진 Pod들과 연결
  • ports.port: 80 → Cluster 내부에서 접근하는 포트
  • ports.targetPort: 80 → Pod 내부 컨테이너에서 실행 중인 포트
  • ports.nodePort: 30080 → 클러스터 외부에서 접근할 수 있는 포트 (30000-32767 사이에서 설정 가능)

 

4️⃣NodePort를 이용한 애플리케이션 접근 방법

위에서 생성한 Service를 통해 애플리케이션에 접근하려면 아래와 같은 URL을 사용합니다.

여기서 노드 IP는 클러스터내의 어떤 노드의 IP라도 사용할 수 있습니다. 

http://<노드IP>:30080

 

노드 IP 확인하는 방법

# kubectl get nodes -o wide

 

5️⃣ NodePort의 장단점

✅ NodePort의 장점

  • 간단한 외부 접근 방법 : 로드 밸런서 없이도 외부에서 애플리케이션에 접근 가능
  • 내부 ClusterIP 포함 : 클러스터 내부에서도 동일한 Service를 통해 접근 가능
  • 모든 노드에서 서비스 가능 : 특정 노드가 다운되어도 다른 노드에서 서비스 제공 가능

 

❌ NodePort의 단점

  • 고정된 포트 범위(30000~32767) 제한
  • 보안 이슈 : 노드의 IP가 외부에 노출되므로, 보안 설정이 필요
  • 로드밸런싱 부족 : 클라우드 제공자의 LoadBalancer에 비해 부하 분산이 미흡할 수 있음

 

6️⃣ NodePort와 다른 Service 타입 비교

쿠버네티스에서는 NodePort 외에도 다양한 Service 타입이 존재합니다. 각 타입의 차이를 비교하면 다음과 같습니다.

Service 타입 설명 외부 접근 가능 여부
CluterIP 기본 타입, 클러스터 내부에서만 접근 가능 ❌(내부 전용)
NodePort 노드의 특정 포트를 통해 외부에서 접근 가능 (제한적)
LoadBalancer 클라우드 제공자의 로드밸런서를 통해 외부 접 근 가능 ✅(권장)
ExternalName DNS기반으로 외부 서비스로 라우팅 ✅(DNS 기반)