
Service는 쿠버네티스의 핵심 네트워킹 추상화로, 변동적인 Pod들을 고정된 엔드포인트(DNS/IP)로 묶어주고, 트래픽을 분산시켜주는 역할을 합니다.
이를 통해 애플리케이션 간의 통신을 가능하게 하고, 외부 사용자와 애플리케이션을 연결할 수 있도록 돕습니다.
apiVersion: v1
kind: Pod
metadata:
name: backend-pod
labels:
app: backend
spec:
containers:
- name: backend
image: nginx:1.27-alpine
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: backend
spec:
type: ClusterIP
selector:
app: backend
ports:
- port: 80apiVersion: v1
kind: Pod
metadata:
name: frontend-pod
labels:
app: frontend
spec:
containers:
- name: frontend
image: nginx:1.27-alpine
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: frontend
spec:
type: NodePort
selector:
app: frontend
ports:
- port: 80 # nodePort는 자동으로 30000~32767 사이의 포트를 할당apiVersion: v1
kind: Pod
metadata:
name: web-pod
labels:
app: web
spec:
containers:
- name: web
image: nginx:1.27-alpine
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: web
spec:
type: LoadBalancer
selector:
app: web
ports:
- port: 80apiVersion: v1
kind: Service
metadata:
name: external-db
spec:
type: ExternalName
externalName: db.mycompany.comapp=frontend, app=backend) 해당 라벨을 서비스 정의에서 selector로 지정하여, 서비스가 자동으로 Pod를 엔드포인트로 묶습니다.http://backend-service:80와 같이 DNS 이름을 사용하여 접근할 수 있습니다.backend-service.default.svc.cluster.local와 같이 내부에서 쉽게 접근할 수 있습니다.example.com이 LoadBalancer로 노출되고, 이를 통해 외부에서 특정 서비스에 접근할 수 있도록 합니다.