Service를 이용하여 Pod을 노출하고 클러스터 외부에서 접근할 수 있는 방법을 알아보자
Pod은 자체 IP를 가지고 다른 Pod과 통신할 수 있지만, 쉽게 사라지고 생성되는 특징 때문에 직접 통신하는 방법은 권장하지 않는다. 쿠버네티스는 Pod과 직접 통신하는 방법 대신, 별도의 고정된 IP를 가진 서비스를 만들고 그 서비스를 통해 Pod에 접근하는 방식을 사용한다.

ClusterIP는 클러스터 내부에 새로운 IP를 할당하고 여러 개으 Pod을 바라보는 로드밸런서 기능을 제공한다. 그리고 서비스 이름을 내부 도메인 서버에 등록하여 Pod 간에 서비스 이름으로 통신할 수 있다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis
spec:
selector:
matchLabels:
app: counter
tier: db
template:
metadata:
labels:
app: counter
tier: db
spec:
containers:
- name: redis
image: redis
ports:
- containerPort: 6379
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: redis
spec:
ports:
- port: 6379
protocol: TCP
selector:
app: counter
tier: db
| 정의 | 설명 |
|---|---|
spec.ports.port |
서비스가 생성할 Port |
spec.ports.targetPort |
서비스가 접근할 Pod의 Port (기본: port랑 동일) |
spec.selector |
서비스가 접근할 Pod의 label 조건 |
위에서 만든 redis Service 에 접근하는 app을 만들어보자
apiVersion: apps/v1
kind: Deployment
metadata:
name: counter
spec:
selector:
matchLabels:
app: counter
tier: app
template:
metadata:
labels:
app: counter
tier: app
spec:
containers:
- name: counter
image: ghcr.io/subicura/counter:latest
env:
- name: REDIS_HOST
value: "redis"
- name: REDIS_PORT
value: "6379"

kubectl get endpoints
kubectl get ep #줄여서
# redis Endpoint 확인
kubectl describe ep/redis