클라우드/Kubernetes

Kubernetes 서비스 타입 완전 정리: ClusterIP, NodePort, LoadBalancer, ExternalName

Jinwookoh 2025. 5. 4. 19:49

 

Kubernetes에서 애플리케이션을 배포하면 Pod가 생성되지만, 이 Pod는 IP가 변동될 수 있어 직접 접근하기 어렵습니다. 이를 해결하기 위해 Kubernetes는 Service 리소스를 제공합니다. Service는 Pod의 집합에 접근하기 위한 안정적인 엔드포인트를 만들어 주며, 여러 타입이 존재합니다.

이 글에서는 Kubernetes의 4가지 주요 Service 타입인 ClusterIP, NodePort, LoadBalancer, ExternalName의 특징과 사용 예제를 자세히 설명합니다.


📌 1. ClusterIP – 기본값, 내부 전용 통신

✅ 정의

ClusterIP는 Kubernetes 서비스의 기본 타입으로, 클러스터 내부에서만 접근 가능한 IP를 제공합니다.

✅ 특징

  • 클러스터 내부에서만 접근 가능
  • 외부에서는 직접 접근 불가
  • 서비스 디스커버리와 내부 통신용

✅ 사용 예시

apiVersion: v1
kind: Service
metadata:
  name: internal-service
spec:
  selector:
    app: backend
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
  type: ClusterIP

이 서비스는 클러스터 내의 다른 Pod에서 http://internal-service로 접근할 수 있습니다.


🌐 2. NodePort – 외부 접근 가능, 간단한 노출

✅ 정의

NodePort는 클러스터 외부에서 접근할 수 있도록 각 노드의 IP에 포트를 개방합니다.

✅ 특징

  • 모든 노드의 IP + 포트로 접근 가능
  • 포트 범위: 기본적으로 30000–32767
  • kubectl port-forward 없이 외부 테스트 가능

✅ 사용 예시

apiVersion: v1
kind: Service
metadata:
  name: nodeport-service
spec:
  selector:
    app: frontend
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
      nodePort: 30080
  type: NodePort

접근 URL 예시: http://<Node-IP>:30080


☁️ 3. LoadBalancer – 퍼블릭 클라우드 환경에서 외부 로드밸런서 연동

✅ 정의

LoadBalancer는 **퍼블릭 클라우드(Kubernetes on AWS, GCP, Azure 등)**에서 외부 로드밸런서를 자동 생성합니다.

✅ 특징

  • 클라우드 환경에서만 사용 가능
  • 퍼블릭 IP 제공
  • NodePort + ClusterIP를 포함한 상위 개념

✅ 사용 예시

apiVersion: v1
kind: Service
metadata:
  name: public-service
spec:
  selector:
    app: web
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
  type: LoadBalancer

LoadBalancer가 퍼블릭 IP를 발급하면 http://<External-IP>로 접속할 수 있습니다.


🔗 4. ExternalName – 외부 도메인과의 연결

✅ 정의

ExternalName은 서비스 이름을 외부 DNS 이름으로 매핑하여 프록시 없이도 외부 리소스와 연결할 수 있게 합니다.

✅ 특징

  • DNS 레코드 기반 연결
  • 포트/프로토콜 설정 없음
  • 외부 API 서버 또는 DB에 연결 시 사용

✅ 사용 예시

apiVersion: v1
kind: Service
metadata:
  name: external-db
spec:
  type: ExternalName
  externalName: db.example.com

이제 external-db.default.svc.cluster.local 로 접근하면 자동으로 db.example.com으로 리다이렉션됩니다.


🔍 Kubernetes Service 타입 비교표

타입 외부 접근 주요 사용 목적 클라우드 필요 여부

ClusterIP 내부 서비스 통신
NodePort 외부에서 테스트 용도로 노출
LoadBalancer 퍼블릭 IP로 외부 사용자와 연결
ExternalName 외부 DNS와 연동 (DB, 외부 API 등)

🏁 마무리

Kubernetes에서 Service 타입을 적절하게 선택하는 것은 애플리케이션의 네트워크 설계와 보안, 성능에 큰 영향을 줍니다.

  • 내부 마이크로서비스 간 통신에는 ClusterIP
  • 간단한 외부 노출에는 NodePort
  • 클라우드 환경에서 안정적인 외부 접근에는 LoadBalancer
  • 외부 서비스 연결에는 ExternalName

상황에 맞는 Service 타입을 구성해보세요!