1. Service가 필요한 이유?
(문제점)
- pod는 언제든 재시작되거나 다른 노드로 이동 가능
-> 이럴때마다 IP가 바뀜
-> 다른 pod나 외부 클라이언트가 해당 pod에 직접 접근이 어려워짐
(해결책)
- service를 사용
-> pod 집합에 대한 고정된 endpoint를 제공
-> service는 label.selector를 이용해 특정 Pod들을 자동으로 찾아 연결함

2. Service의 주요역할
1) 고정된 IP 제공: pod의 IP가 변해도 service의 고정된 IP로 접근가능
2) 로드밸런싱: 여러 pod에 트래픽 분산
3) 서비스 디스커버리(DNS): service-name.namespace.svc.cluster.local 형태로 다른 Pod에서 접근가능
4) 외부노출: 클러스터 밖에서도 접근할 수 있도록 구성 가능
4. Service의 종류 (type)
-> yaml 파일의 spec.type 부분에 들어감
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
type: NodePort
ports:
- targetPort: 80 // 지정안해주면, port와 동일하다고 봄
port: 80 // 필수
nodePort: 30008
1) ClusterIP : 클러스터 내부에서만 접근 가능
ex) 백엔드 pod간 통신
2) NodePort : 각 노드의 특정포트를 열어 외부에서 접근 가능
ex) 테스트용, 단순 서비스 노출등
3) LoadBalancer : 클라우드 로드밸런서를 통해 외부에 서비스 노출
ex) AWS, GCP, Azure 등
4) ExternalName : DNS 이름을 외부 도메인으로 매핑
ex) 외부서비스와의 통합
5. Service 예시
apiVersion: v1
kind: Service
metadata:
name: my-app
spec:
selector:
app: my-app
ports:
- port: 80 // 서비스 내부 포드
targetPort: 8080 // pod가 실제 듣는 포트
type: ClusterIP






6. service의 흐름
클라이언트 -> service -> pod1
-> pod2
-> pod3
- service는 트래픽을 받아서 연결된 여러 pod중 하나로 로드밸런싱을 해준다
- 우리는 targetPort가 어떤 pod와 연결되는지 아는법? -> labels와 selector를 통해 연결하고자 함


- service 각 type 별로 흐름

'Infra > Kubernetes' 카테고리의 다른 글
| [cka] Kubernetes - Service 명령어 모음 (0) | 2025.10.07 |
|---|---|
| [cka] Kubernetes - ClusterIP (service type 중) (0) | 2025.10.07 |
| [cka] Kubernetes - deployment (0) | 2025.10.05 |
| [cka] Kubernetes - Replicaset (0) | 2025.10.05 |
| [cka] Kubernetes - pod 명령어 정리 (0) | 2025.10.05 |