728x90
headless service
헤드리스 서비스란?
Cluster IP가 없는 서비스
- 일반적으로 파드 그룹을 서비스의 엔드포인트에 등록하고, 로드밸런서를 사용함
- 그러나, 로드밸런싱이나 단일 서비스 IP가 필요 없는 경우도 있음
- 이 때, 사용하는 것이 headless service
- .spec.clusterIP: None
selector가 있는 경우
- 엔드포인트 컨트롤러는 API에서 엔드포인트 레코드를 생성하고,
- DNS 구성을 수정하여 서비스를 지원하는 파드를 직접 가르키는 A 레코드를 반환함
selector가 없는 경우
- 엔드포인트 컨트롤러는 엔드포인트 레코드를 생성하지 않음
- DNS 시스템은 ExternalName 타입의 서비스에서 사용할 CNAME 레코드가 생성됨
실습
Cluster IP가 없지만 엔드포인트에 등록된 파드의 정보와 A 레코드 확인
- 레플리카셋 생성 파일
$ cat myapp-rs-headless.yml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: myapp-rs-headless
spec:
replicas: 3
selector:
matchLabels:
app: myapp-rs-headless
template:
metadata:
labels:
app: myapp-rs-headless
spec:
containers:
- name: myapp
image: ghcr.io/c1t1d0s7/go-myweb:alpine
ports:
- containerPort: 8080
- 헤드리스 서비스 생성 파일
$ cat myapp-svc-headless.yml
apiVersion: v1
kind: Service
metadata:
name: myapp-svc-headless
spec:
clusterIP: None
ports:
- port: 80
targetPort: 8080
selector:
app: myapp-rs-headless
- 파드, 서비스 생성
$ kubectl create -f myapp-rs-headless.yml -f myapp-svc-headless.yml
replicaset.apps/myapp-rs-headless created
service/myapp-svc-headless created
실행 결과
- 생성된 파드, 엔드포인트, 서비스 정보 확인
- headless 서비스의 엔드포인트에 파드들의 IP가 등록되어 있음
- CLUSTER-IP는 None으로 IP가 지정되지 않음
$ kubectl get po,ep,svc -o wide
- DNS A 레코드 확인을 위해 파드 실행
$ kubectl run nettool -it --image=c1t1d0s7/network-multitool --rm=true bash
- nslookup
bash-5.0# nslookup myapp-svc-headless
Server: 169.254.25.10
Address: 169.254.25.10#53
Name: myapp-svc-headless.default.svc.cluster.local
Address: 10.233.101.103
Name: myapp-svc-headless.default.svc.cluster.local
Address: 10.233.76.148
Name: myapp-svc-headless.default.svc.cluster.local
Address: 10.233.103.76
- host
bash-5.0# host myapp-svc-headless
myapp-svc-headless.default.svc.cluster.local has address 10.233.101.103
myapp-svc-headless.default.svc.cluster.local has address 10.233.76.148
myapp-svc-headless.default.svc.cluster.local has address 10.233.103.76
- dig
- ANSWER SECTION 항목에서 A 레코드를 확인할 수 있음
bash-5.0# dig myapp-svc-headless.default.svc.cluster.local
~
;; ANSWER SECTION:
myapp-svc-headless.default.svc.cluster.local. 5 IN A 10.233.101.103
myapp-svc-headless.default.svc.cluster.local. 5 IN A 10.233.103.76
myapp-svc-headless.default.svc.cluster.local. 5 IN A 10.233.76.148
~
728x90
'쿠버네티스 교육 > 강의 내용 정리' 카테고리의 다른 글
220628_4_k8s_볼륨_hostPath (0) | 2022.06.28 |
---|---|
220628_3_k8s_볼륨_emptyDir (0) | 2022.06.28 |
220628_1_k8s_프로브-readinessProbe (0) | 2022.06.28 |
220627_3_k8s_연결 서비스_MetalLB (0) | 2022.06.27 |
220624_2_k8s_연결 서비스_NodePort (0) | 2022.06.25 |