Невозможно пинговать другие поды по имени хоста на minikube

У меня есть statefulSet с двумя репликами. Имя этой службы без заголовка - "gov-svc". Это ->

  1. .metadata.name: sts
  2. .metadata.namespace: по умолчанию
  3. .spec.serviceName: gov-svc
  4. .spec.template.spec.subdomain: gov-svc
  5. .spec.replicas: 2

Перед запуском statefulSet

kubectl get pods --all-namespaces
NAMESPACE     NAME                                    READY   STATUS             RESTARTS   AGE
kube-system   coredns-99b9bb8bd-qdnsb                 1/1     Running            0          4h
kube-system   etcd-minikube                           1/1     Running            0          4h
kube-system   kube-addon-manager-minikube             1/1     Running            0          4h
kube-system   kube-apiserver-minikube                 1/1     Running            0          4h
kube-system   kube-controller-manager-minikube        1/1     Running            1          4h
kube-system   kube-proxy-b9np6                        1/1     Running            0          4h
kube-system   kube-scheduler-minikube                 1/1     Running            0          4h
kube-system   kubernetes-dashboard-7db4dc666b-bsk8k   1/1     Running            0          4h
kube-system   storage-provisioner

После запуска обоих модулей этого statefulSet из модуля sts-0, результат ping:

$ ping  sts-0.gov-svc.default.svc.cluster.local
PING sts-0.gov-svc.default.svc.cluster.local (172.17.0.11): 56 data bytes
64 bytes from 172.17.0.11: seq=0 ttl=64 time=0.051 ms
64 bytes from 172.17.0.11: seq=1 ttl=64 time=0.444 ms
^C
--- redis-cluster-exp-0-0.redis-cluster-exp.default.svc.cluster.local ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.051/0.247/0.444 ms

Но когда я пытаюсь ping sts-1 из sts-0, он говорит:

$ ping sts-1.gov-svc.default.svc.cluster.local
ping: bad address 'sts-1.gov-svc.default.svc.cluster.local'

Мне нужно успешно пропинговать другие поды по имени хоста. Как я могу это сделать?


person Shudipta Sharma    schedule 05.10.2018    source источник
comment
Какая у вас версия кубернетов   -  person Lev Kuznetsov    schedule 05.10.2018
comment
моя версия Kubernetes: 1.11.3   -  person Shudipta Sharma    schedule 06.10.2018
comment
@ShudiptaSharma Привет, я знаю, на этот вопрос прошел год, но сегодня я столкнулся с этой проблемой. Не могли бы вы сообщить мне, как вы это решили? Это действительно поможет. Мои модули с отслеживанием состояния не могут пинговать друг друга с помощью fqdn, но через IP-адрес происходит пинг. У меня также есть безголовый сервис, который работает.   -  person Nish    schedule 07.11.2019
comment
@Nish У вашего безголового сервиса есть селектор для выбора стручков? Или это просто сервис с .spec.clusterIP, установленным в "None", используемый как требование Statefulset?   -  person Shudipta Sharma    schedule 07.11.2019
comment
@ShudiptaSharma, Ниже мой случай. У меня есть три модуля с отслеживанием состояния для трех разных задач и три обычных службы для каждой из них. У этих сервисов есть селекторы для выбора соответствующих модулей. На вершине этих 3 сервисов есть один безголовый сервис, ссылку на который я дал под каждым из 3 стручков staefulset, используя атрибут serviceName. Еще одна вещь: я использовал один селектор, общий для всех модулей и безголового сервиса tier: backend   -  person Nish    schedule 07.11.2019


Ответы (1)


Вам необходимо создать headless service, чтобы иметь возможность отправлять эхо-запросы реплик друг на друга в пределах StatefulSet. Что-то вроде:

apiVersion: v1
kind: Service
metadata:
  name: gov-svc-headless
  labels:
    your_label: your_value
spec:
  selector:
    your_label: your_value
  ports:
  - port: your_port
    name: transport
    protocol: TCP
  clusterIP: None <---

Примечание:

С помощью селекторов. Для автономных служб, которые определяют селекторы, контроллер конечных точек создает записи конечных точек в API и изменяет конфигурацию DNS, чтобы возвращать записи (адреса), которые указывают непосредственно на модули, поддерживающие службу.

Примечание:

или автономные службы, которые не определяют селекторы, контроллер конечных точек не создает записи конечных точек. Однако система DNS ищет и настраивает либо:

Записи CNAME для служб типа ExternalName. Записи для любых конечных точек, которые имеют общее имя со службой, для всех других типов.

Дополнительная информация: https://kubernetes.io/docs/concepts/services-networking/service/#headless-services

person Konstantin Vustin    schedule 05.10.2018