쿠버네티스 교육/강의 내용 정리

220628_2_k8s_headless 서비스

kimhope 2022. 6. 28. 15:19
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