Kubernetes/Udemy - CKAD with Tests

Headless Service

비번변경 2021. 8. 31. 22:31

Headless Service

일반적인 쿠버네티스 서비스와 유사하지만 IP를 할당받지 않는다.

request를 로드밸런싱 하지 않으며, 포드 이름과 하위 도메인을 이용해 각 포드에 대한 DNS만 생성한다.

 

DNS 형식

  • POD_NAME.SVC_NAME.CLUSTER_DOMAIN_NAMESPACE
    예시 ) mysql-0.mysql-h.default.svc.cluster.local

 

생성 방법

yaml 형식의 정의 파일을 작성하여 create 명령으로 생성한다.

apiVersion: v1
kind : Service
metadata:
  name: mysql-h
spec:
  ports:
  - port: 3306
  selector:
    app: mysql
  clusterIP : None # 일반 서비스와 차별점

일반 서비스 생성할 때와 다르게 clusterIP 항목을 None으로 설정한다.

 

포드 DNS 생성 조건

  1. Hostname : 포드에 호스트네임이 설정되어야 한다.
  2. Subdomain : 서비스 이름과 같은 값으로 설정되어야 한다.

호스트네임이 지정되지 않으면 서비스가 포드 DNS를 생성하지 않는다.

 

Deployment 정의 파일에서 Templete 섹션 아래에 subdomain과 hostname을 설정할 수 있지만, 이 경우 모든 포드에 동일한 값이 할당되기 때문에 DNS 생성 시 오류가 발생한다. DNS는 유일해야 한다.

 

StatefulSet은 포드 이름을 기준으로 호스트네임을 자동으로 할당하고, 서비스 이름을 기준으로 하위 도메인을 자동으로 할당하기 때문에 하위도메인이나 호스트네임을 지정하지 않아도 괜찮다.

하지만 사용하려는 서비스는 지정해주어야 한다.

apiVersion: v1
kind : StatefulSet
metadata:
  name: mysql-deployment
  labels:
    app: mysql
spec:
  serviceName: mysql-h # 사용 서비스 지정
  replicas: 3
  matchLabels:
    app: mysql
  templete:
    metadata:
      name: myapp-pod
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql
        image: mysql