[CKA] Kubernetes Service 네트워킹
Service의 가상 IP와 kube-proxy 전달 규칙이 안정적인 Pod 접근점을 만드는 원리를 정리합니다.
Pod IP는 Pod의 수명에 따라 바뀔 수 있습니다. Service는 셀렉터에 맞는 Pod 집합 앞에 안정적인 이름과 가상 IP를 제공해 호출자가 개별 Pod의 위치를 몰라도 되게 합니다.
Service 유형
ClusterIP: 클러스터 내부에서 접근하는 기본 유형NodePort: ClusterIP 기능에 더해 각 노드의 지정 포트로 외부 트래픽을 받음LoadBalancer: 지원하는 환경에서 외부 로드 밸런서를 통해 Service를 노출
apiVersion: v1
kind: Service
metadata:
name: web
spec:
selector:
app: web
ports:
- port: 80
targetPort: 8080
Service IP는 개별 Pod의 주소와 별개인 가상 IP입니다. 각 노드의 서비스 프록시 구현이 Service와 EndpointSlice 변화를 감시하고, Service IP와 포트로 들어온 트래픽을 준비된 백엔드 Pod로 전달합니다. 환경에 따라 iptables, IPVS 또는 네트워크 플러그인의 서비스 프록시 구현을 사용할 수 있습니다.
kubectl get svc
kubectl get endpointslices
kubectl logs -n kube-system <kube-proxy-pod>
Pod CIDR과 Service CIDR은 겹치지 않아야 합니다. Service CIDR은 API 서버 설정에서, Pod CIDR은 클러스터와 CNI 설정에서 확인합니다.