IT/Kubernetes

[Kubernetes] Headless Service

물통꿀꿀이 2019. 6. 7. 18:47

그림 1. Service


일반적으로 Service는 Client에 의해 요청이 들어올 경우 Service가 관리하고 있는 여러 Pod들 중 임의로 하나를 선택해서 연결을 한다.

그런데 만일 Client가 Service가 제공하는 모든 Pod와 연결이 필요하다면 어떻게 해야 할 것인가?


어찌보면 당연하게도 모든 Pod의 주소를 알면된다.

이를 위해 k8s에서는 Client가 DNS lookup을 통해 Pod의 IP를 찾는 것을 허용한다.


그런데 매니페스트 파일을 구성할 때 속성에 따라 DNS lookup 에서 나오는 결과가 다르다.

spec:

  clusterIP: None 


위와 같이 Service의 ClusterIP를 None으로 설정하면 DNS는 Service의 ClusterIP 대신에 모든 Pod의 IP 목록을 반환해준다.


그림 2. DNS lookup


그림 2의 결과로 각 Pod의 IP 목록을 알 수 있다. (해당 결과를 얻기 위해서는 Pod에서 DNS lookup을 수행해야 한다.)

이를 바탕으로 Client는 Pod에 직접 접근 할 수 있다.