1. 탬플릿 작성

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

  • headless.yaml

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

2. 서비스 생성

kubectl apply -f headless.yaml
kubectl get svc

NAME                   TYPE           CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
headless-service       ClusterIP      None         <none>        80/TCP    6s
kubernetes             ClusterIP      10.233.0.1   <none>        443/TCP   5h10m
  • 상세 정보를 확인해 보면 서비스 IP는 없지만 Endpoint(파드)에 대한 IP는 확인 가능
kubectl describe svc headless-service
Name:              headless-service
Namespace:         default
Labels:            <none>
Annotations:       kubectl.kubernetes.io/last-applied-configuration:
                     {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"headless-service","namespace":"default"},"spec":{"clusterIP":"Non...
Selector:          app=nginx-for-svc
Type:              ClusterIP
IP:                None
Port:              <unset>  80/TCP
TargetPort:        80/TCP
Endpoints:         10.233.117.26:80
Session Affinity:  None
Events:            <none>

3. 테스트

  • 새로운 파드에 접속(또는 생성) 하여 dig 명령어로 endpoint에 대한 CNAME 레코드 확인
kubectl exec -it testnet-5f694fd785-42krf /bin/bash
bash-5.0# dig headless-service.default.svc.cluster.local

...

;; ANSWER SECTION:
headless-service.default.svc.cluster.local. 5 IN A 10.233.117.26

...

4. 전체 프로세스

댓글남기기