반응형
Service
- 동적으로 변하는 파드들에 고정적으로 접근하기 위한 API
- 동일한 서비스를 제공하는 Pod 그룹의 단일 진입점을 제공
Service Type
- ClusterIP
- 가장 기본적인 서비스.(default)
- Pod그룹의 단일진입점을 생성함
- NodePort
- ClusterIP 가 생성된 후 모든 Worker Node 에 외부에서 접속 가능 한 포트가 예약
1. ClusterIP
- Pod그룹의 단일진입점을 생성함
- 클러스터 내부에서만 사용가능
- Service type 생략 시 default 로 설정됨
- 10.96.0.0/12 범위에서 할당됨
kubectl expose deployment <SERVICE_NAME> type=<SERVICE_TYPE> port=<PORT>
# 예
kubectl expose deployment webserver type=ClusterIP port=80
- yaml 예
apiVersion: v1
kind: Service
metadata:
name: clusterip-service
spec:
type: ClusterIP
clusterIP: 10.100.100.100
selector:
app: webui
ports:
- protocol: TCP
port: 80
targetPort: 80
예제1
dev라는 namespace에서 운영되고 있는 web-app라는 deployment의 Service를 생성하시오.
- Name: web-app-svc
- Type: ClusterIP
- Port: 80
풀이
1. namespace 생성
kubectl create namespace dev
2. deployment 생성
kubectl create deployment web-app -n dev --image=nginx --port=80 --replicas=2
3. Service 생성
kubectl expose deployment web-app --namespace dev --type=ClusterIP --port=80 --target-port=80 --name=web-app-svc
예제 2
위 예제에서 80/tcp를 expose하는 http라는 타켓포트를 추가하시오.
풀이
1. Deployment yaml 생성
kubectl create deployment web-app -n dev --image=nginx --port=80 --replicas=2 --dry-run=client -o yaml > exam2.yaml
2. yaml에 Service 추가 (document 참고)
spec:
replicas: 2
selector:
matchLabels:
app: web-app
template:
metadata:
creationTimestamp: null
labels:
app: web-app
spec:
containers:
- image: nginx
name: nginx
ports:
- containerPort: 80
name: http # 컨테이너에 port이름 지정
---
apiVersion: v1
kind: Service
metadata:
name: web-app-src
namespace: dev
spec:
selector:
run: web-app
ports:
- name: name-of-service-port
protocol: TCP
port: 80
targetPort: http # 이름으로 포워딩
3. 적용
kubectl apply -f exam2.yaml
반응형
2. NodePort
- 모든 노드를 대상으로 외부 접속 가능한 포트를 예약
- Default NodePort 범위 : 30000-32767 (Random)
- ClusterIP를 생성 후 NodePort를 예약
- ClusterIP 타입의 서비스에서 포트설정 기능이 추가된 것.
- yaml 예
apiVersion: v1
kind: Service
metadata:
name: nodeport-service
spec:
type: NodePort
clusterIP: 10.100.100.200
selector:
app: webui
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30200 # 포트지정
예제 3
위 예제2에서 label이 web-app으로 동작중인 파드가 30200로 접속되도록 NodePort로 서비스를 수정하시오.
풀이
spec:
replicas: 2
selector:
matchLabels:
app: web-app
template:
metadata:
creationTimestamp: null
labels:
app: web-app
spec:
containers:
- image: nginx
name: nginx
ports:
- containerPort: 80
name: http
---
apiVersion: v1
kind: Service
metadata:
name: web-app-src
spec:
selector:
run: web-app
ports:
- name: name-of-service-port
protocol: TCP
port: 80
targetPort: http
nodePort: 30200
selector:
app: web-app
type: NodePort
끝.
Thank you!
반응형
'Tools > Kubernetes' 카테고리의 다른 글
[CKA 도전 시리즈] 12. Ingress / Core DNS (0) | 2023.02.20 |
---|---|
[CKA 도전 시리즈] 11. Network Policy (0) | 2023.02.13 |
[CKA 도전 시리즈] 9. Configmap / Secret (0) | 2023.01.26 |
[CKA 도전 시리즈] 8. Node 관리 / Pod Scheduling (0) | 2023.01.22 |
[CKA 도전 시리즈] 7. Deployment (0) | 2023.01.19 |