더북(TheBook)

Note ≡ 스테이트풀셋은 헤드리스(Headless) 서비스로 노출한다고 하던데요?


네, 일반적으로는 맞습니다. 헤드리스 서비스는 IP를 가지지 않는 서비스 타입으로 중요한 자원인 IP를 절약할 수 있을 뿐만 아니라, 스테이트풀셋과 같은 상태를 가지고 있는 오브젝트를 모두 노출하지 않고 상태 값을 외부에 알리고 싶은 것만 선택적으로 노출하게 할 수 있습니다. 따라서 일반적으로는 스테이트풀셋은 헤드리스 서비스로 노출하나, IT에는 정답이 없듯 고정된 이름을 사용하면서 외부에 모든 스테이트풀셋을 노출하고자 하는 경우에는 노드포트나 로드밸런서 서비스로 노출할 수 있습니다. 현재의 구성에서 헤드리스 서비스로 노출하고자 하는 경우에는 다음 코드를 사용해 노출할 수 있습니다.

sts-svc-domain.yaml

apiVersion: v1
kind: Service
metadata:
  name: sts-svc-domain
spec:
  selector:
    app: nfs-pvc-sts
  ports:
    - port: 80
  clusterIP: None

이를 실행하면 다음과 같이 IP가 할당되지 않는 형태로 노출된 것을 확인할 수 있습니다.

[root@m-k8s ~]# kubectl apply -f ~/_Book_k8sInfra/ch3/3.4.4/sts-svc-domain.yaml
service/sts-svc-domain created
[root@m-k8s ~]# kubectl get services
NAME              TYPE            CLUSTER-IP     EXTERNAL-IP    PORT(S)          AGE
kubernetes        ClusterIP       10.96.0.1      <none>         443/TCP          8d
nfs-pvc-sts-svc   LoadBalancer    0.100.83.174   192.168.1.21   80:32125/TCP     7m
sts-svc-domain    ClusterIP       None           <none>         80/TCP           7s

노출된 IP는 없지만 내부적으로 각 파드의 이름과 노출된 서비스 이름등을 조합한 도메인 이름으로 아래와 같이 쿠버네티스 클러스터 내에서 통신할 수 있는 상태가 됩니다. 이를 가능하게 해주는 CoreDNS는 6장 ‘쿠버네티스 내에서 도메인 이름을 제공하는 CoreDNS’를 참조하기 바랍니다. 할당된 도메인 이름과 IP가 확인되었다면, 다음 실습을 위해 헤드리스 서비스를 삭제해 줍니다.

[root@m-k8s ~]# kubectl run net --image=sysnet4admin/net-tools --restart=Never --rm -it -- nslookup nfs-pvc-sts-0.sts-svc-domain
Server:         10.96.0.10
Address:        10.96.0.10#53
 
Name:   nfs-pvc-sts-0.sts-svc-domain.default.svc.cluster.local
Address: 172.16.103.163
 
pod "net" deleted
[root@m-k8s ~]# kubectl delete services sts-svc-domain
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.