[Kubernetes](Service)How to use Kubernetes Headless service

업데이트:

.spec.clusterIP: None 으로 설정하면 클러스터 IP가 없는 서비스를 만들 수 있다. 이런 서비스를 ‘headless’ 서비스라고 한다.

로드 밸런싱이 필요 없거나 단일 서비스 IP가 필요 없을 때 사용한다.

  • .spec.selector 를 설정하면 쿠버네티스 API로 확인할 수 있는 엔드포인트가 만들어진다.
    • selector가 없으면 Endpoints가 만들어지지 않는다.
  • 서비스와 연결된 파드를 직접 가리키는 DNS A 레코드도 만들어 진다.
  • 단, selector가 없더라도 DNS 시스템은 ExternalName 타입의 서비스에 사용할 CNAME레코드가 만들어진다.

Example - headless

apiVersion: v1
kind: Service
metadata:
  name: headless-service
spec:
  type: ClusterIP
  clusterIP: None
  selector:
    app: nginx-for-svc
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

.spec.clusterIP: None

서비스 확인

$ kubectl get svc
NAME                        TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                  AGE
headless-service            ClusterIP      None            <none>        80/TCP                   17s
  • CLUSTER-IP: None
  • EXTERNAL-IP:

Endpoints 항목 확인

$ kubectl describe svc headless-service
Name:              headless-service
Namespace:         kube-system
Labels:            <none>
Annotations:       <none>
Selector:          app=nginx-for-svc
Type:              ClusterIP
IP:                None
Port:              <unset>  80/TCP
TargetPort:        80/TCP
Endpoints:         10.233.118.224:80,10.233.125.121:80
Session Affinity:  None
Events:            <none>
  • Endpoints: 10.233.118.224:80,10.233.125.121:80

CLUSTER-IP는 None 이지만 , Endpoints 항목에는 .spec.selector 필드에서 선택한 조건에 맞는 파드들의 IP와 포트 정보를 확인 할 수 있다.

headless 서비스의 도메인

headless-service.default.svc.cluster.local


https://kubernetes.io/ko/docs/concepts/services-networking/service/#헤드리스-headless-서비스

댓글남기기