Serviços headless
Os tipos de Serviços anteriores permitem acesso de pod interno e externo, mas não os seguintes cenários:
- Acessar todos os pods ao mesmo tempo
- Pods em um Serviço acessar uns aos outros
É aqui que o Serviço headless entra em serviço. Um Serviço headless não cria um endereço IP de cluster, e os registros DNS de todos os pods são retornados durante a consulta. Desta forma, os endereços IP de todos os pods podem ser consultados. StatefulSets usam serviços sem cabeça para dar suporte ao acesso mútuo entre os pods.
apiVersion: v1 kind: Service # Object type (Service) metadata: name: nginx-headless labels: app: nginx spec: ports: - name: nginx # - name: nginx # Name of the port for communication between pods port: 80 # Port number for communication between pods selector: app: nginx # Select the pod whose label is app:nginx. clusterIP: None # Set this parameter to None, indicating that a headless Service is to be created.
Execute o seguinte comando para criar um Serviço headless:
# kubectl create -f headless.yaml service/nginx-headless created
Depois que o Serviço for criado, você poderá consultar o Serviço.
# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-headless ClusterIP None <none> 80/TCP 5s
Crie um pod para consultar o DNS. Você pode visualizar os registros de todos os pods. Desta forma, todos os pods podem ser acessados.
$ kubectl run -i --tty --image tutum/dnsutils dnsutils --restart=Never --rm /bin/sh If you do not see a command prompt, try pressing Enter. / # nslookup nginx-0.nginx Server: 10.247.3.10 Address: 10.247.3.10#53 Name: nginx-0.nginx.default.svc.cluster.local Address: 172.16.0.31 / # nslookup nginx-1.nginx Server: 10.247.3.10 Address: 10.247.3.10#53 Name: nginx-1.nginx.default.svc.cluster.local Address: 172.16.0.18 / # nslookup nginx-2.nginx Server: 10.247.3.10 Address: 10.247.3.10#53 Name: nginx-2.nginx.default.svc.cluster.local Address: 172.16.0.19