🌐 Kubernetes Service Type 변경 방법 & 확인 방법

2026. 2. 22. 08:49k8s

Kubernetes에서 Service는 여러 가지 타입을 가진다.

대표적인 Type:

  • ClusterIP (기본값)
  • NodePort
  • LoadBalancer
  • ExternalName

운영하다 보면 Service Type을 변경해야 하는 경우가 많다.


📌 1️⃣ 현재 Service Type 확인 방법

✅ 기본 조회

kubectl get svc -n test

출력 예:

NAME    TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)
nginx  ClusterIP   10.107.11.40   <none>        80/TCP

✅ 상세 확인

kubectl describe svc nginx -n test

✅ YAML로 확인

kubectl get svc nginx -n test -o yaml

YAML에서 확인할 위치:

spec:
  type: ClusterIP

📌 2️⃣ Service Type 변경 방법

Service는 대부분의 경우 type 변경이 가능하다.


✅ 방법 1 — kubectl edit (가장 간단)

kubectl edit svc nginx -n test

아래 부분 수정:

spec:
  type: NodePort

저장하면 즉시 반영됨.


✅ 방법 2 — kubectl patch

kubectl patch svc nginx -n test -p '{"spec":{"type":"NodePort"}}'

✅ 방법 3 — YAML 수정 후 apply

1️⃣ 현재 YAML 추출:

kubectl get svc nginx -n test -o yaml > svc.yaml

2️⃣ 수정:

spec:
  type: NodePort

3️⃣ 적용:

kubectl apply -f svc.yaml

📌 3️⃣ Type 변경 시 동작 차이

🔄 ClusterIP → NodePort

  • NodePort 자동 할당됨
  • 외부에서 <NodeIP>:NodePort 접속 가능

🔄 NodePort → ClusterIP

  • NodePort 제거
  • 내부 전용 서비스로 변경

🔄 NodePort → LoadBalancer

  • 클라우드 환경에서 외부 IP 자동 할당
  • 온프렘에서는 보통 Pending 상태 유지

📌 4️⃣ Type 변경 후 확인 방법

kubectl get svc nginx -n test -o wide

NodePort가 보이면 성공:

80:30465/TCP

📌 5️⃣ 주의할 점

⚠️ NodePort 번호 직접 지정 시 충돌 가능

nodePort: 30080
  • 범위: 30000–32767 (기본값)
  • 이미 사용 중이면 에러 발생

⚠️ ExternalName은 특수 케이스

spec:
  type: ExternalName
  externalName: example.com
  • DNS CNAME 역할
  • selector 없음
  • Endpoint 없음

📊 Service Type 비교

Type 외부 접근 용도
ClusterIP 내부 통신
NodePort 간단한 외부 노출
LoadBalancer 클라우드 외부 노출
ExternalName DNS 외부 서비스 연결

🏗️ 트래픽 흐름 예시 (NodePort)

Client
   ↓
NodeIP:NodePort
   ↓
Service
   ↓
Endpoint
   ↓
Pod

🎯 실무 팁

  • 온프렘 환경 → NodePort + Ingress 조합 추천
  • 클라우드 환경 → LoadBalancer 또는 Ingress
  • 테스트용 → NodePort 가장 간단