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 타입을 구성해보세요!
'클라우드 > Kubernetes' 카테고리의 다른 글
Helm이란? (0) | 2025.05.05 |
---|---|
Kubernetes Service Domain 구조 완벽 가이드 (0) | 2025.05.05 |
CoreDNS란? 쿠버네티스 DNS의 핵심을 이해하자 (1) | 2025.05.05 |
Kubernetes 리소스 요청(requests)과 제한(limits)의 차이 완벽 정리 (0) | 2025.05.04 |
CNI란 무엇인가요? | Kubernetes 컨테이너 네트워크 인터페이스 완벽 정리 (1) | 2025.05.04 |