Сервисы позволяют внутренний и внешний доступ к Подам, но не следующие сценарии:
- Доступ ко всем Подам одновременно
- Поды в Сервисе, получающие доступ друг к другу
Вот где headless Service вступает в действие. headless Service не создает cluster IP address, а записи DNS всех Подов возвращаются при запросе. Таким образом, IP-адреса всех Подов могут быть запрошены. StatefulSets используйте headless Services для поддержки взаимного доступа между Подами.
apiVersion: v1kind: Service # Object type (Service)metadata:name: nginx-headlesslabels:app: nginxspec:ports:- name: nginx # - name: nginx # Name of the port for communication between podsport: 80 # Port number for communication between podsselector: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.
Выполните следующую команду, чтобы создать headless Service:
# kubectl create -f headless.yamlservice/nginx-headless created
После создания Сервиса вы можете запросить Сервис.
# kubectl get svcNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEnginx-headless ClusterIP None <none> 80/TCP 5s
Создайте Под, чтобы запросить DNS. Вы можете просмотреть записи всех Подов. Таким образом, к каждому Поду можно получить доступ.
$ kubectl run -i --tty --image tutum/dnsutils dnsutils --restart=Never --rm /bin/shIf you do not see a command prompt, try pressing Enter./ # nslookup nginx-0.nginxServer: 10.247.3.10Address: 10.247.3.10#53Name: nginx-0.nginx.default.svc.cluster.localAddress: 172.16.0.31/ # nslookup nginx-1.nginxServer: 10.247.3.10Address: 10.247.3.10#53Name: nginx-1.nginx.default.svc.cluster.localAddress: 172.16.0.18/ # nslookup nginx-2.nginxServer: 10.247.3.10Address: 10.247.3.10#53Name: nginx-2.nginx.default.svc.cluster.localAddress: 172.16.0.19
Родительская тема: Сервис