서비스·네트워킹 (Services)¶
Pod 은 언제든 교체되므로 IP 가 고정되지 않습니다. 쿠버네티스의 Service 는 Pod 집합에 안정적인 접근 경로(단일 DNS/IP)를 제공하고 로드밸런싱합니다. 데이터스케쳐스 실무 관점에서 정리합니다.
Service 란¶
- Service 는 라벨 셀렉터로 Pod 집합을 묶고, 그 집합에 클러스터 내부 안정 주소
(
<svc>.<namespace>.svcDNS) 와 로드밸런싱을 제공합니다. - 각 엔드포인트로 트래픽을 분산시키므로, Pod 이 죽고 새로 떠도 클라이언트는 같은 주소로 접근하면 됩니다.
apiVersion: v1
kind: Service
metadata:
name: api
spec:
selector:
app: api
ports:
- port: 80
targetPort: 8080
type: ClusterIP
Service 타입 (type)¶
- ClusterIP (기본): 클러스터 내부 전용 IP. 내부 서비스·DB 등 외부 노출이 필요 없는 것에 사용. 인그레스(Ingress)를 통해 공개 가능.
- NodePort: 각 노드 IP 의 고정 포트로 외부에 노출. 개발/테스트용.
- LoadBalancer: 클라우드 로드밸런서를 프로비저닝해 외부 IP 제공.
-
ExternalName:
externalName필드로 외부 호스트명에 매핑. -
웹 트래픽은 보통 ClusterIP + Ingress(TLS 종료, 호스트 라우팅) 조합이 가장 비용 효율적입니다.
인그레스(Ingress)와의 관계¶
- Ingress 는 서비스 앞에서 HTTP 라우팅·TLS 를 처리합니다. 서비스 자체는 ClusterIP 로 두고, Ingress 가 요청을 서비스로 전달합니다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-ingress
spec:
rules:
- host: app.data-sketchers.dev
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: api
port:
number: 80
데이터스케쳐스 실무 관점¶
- 내부 API/DB: ClusterIP 로 두어 외부에서 직접 접근 못 하게 하고, 웹만 Ingress 로 공개합니다 (공격면 축소).
- 개발 웹훅/테스트: 외부에서 콜백이 필요한 경우만 NodePort 나 cloudflared 터널로 노출합니다.
확인 필요¶
- Service 의 DNS 동작·세션 어피니티·헤드리스 서비스 등 세부는 kube-proxy 모드와 버전에 따라 다르므로 공식 문서를 재확인하세요. (확인 필요)