Доступ к поду через kubedns без предоставления услуги

Я пытаюсь проверить связь между модулями без предоставления услуги. Я читал, что у модуля есть полное доменное имя в kubedns. документ по kubernetes

Его значение по умолчанию должно быть (A Record)
metadata_name.namespace.svc.cluster.local
или
hostname.subdomain.namespace.svc.cluster.local.

Но я пробовал и с curl, и с nslookup. Все не удалось. Сервис исправен, я смог его закрутить с IP-адресом pod (172.17.0.5)

curl: (6) не удалось разрешить host
nslookup: невозможно разрешить '(null)': имя не разрешено

Что мне не хватает?


person Maxi Wu    schedule 07.05.2019    source источник


Ответы (2)


Я предлагаю добавить для этого сервис с типом ClusterIP: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types

kind: Service
apiVersion: v1
metadata:
  name: my-service
spec:
  selector:
    app: MyApp
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  type: ClusterIP

Он не выставляет ваш модуль за пределы кластера. Обратите внимание, что это тип сервиса по умолчанию, и его можно не указывать.

Затем запросите службу, например:

curl http://my-service.namespace.svc.cluster.local

Этот подход лучше, чем использование pod DNS напрямую, по двум причинам:

  • вам не нужно знать точное имя модуля (например, name-id)

  • в этом случае вы можете запустить несколько модулей за службой, и она будет балансировать запросы. Или просто запустите один, и он сделает именно то, что вы хотите.

person Max Lobur    schedule 07.05.2019

Если существует безголовая служба в том же пространстве имен, что и модуль, и с тем же именем, что и у субдомена, сервер KubeDNS кластера также возвращает запись A для полного имени хоста модуля. Например, при наличии пода с именем хоста, установленным на «busybox-1», и субдоменом, установленным на «субдомен по умолчанию», и безголовой службы с именем «субдомен по умолчанию» в том же пространстве имен, модуль увидит свое собственное полное доменное имя как «busybox-1.default-subdomain.my-namespace.svc.cluster.local».

Итак, в вашем случае вам нужно определить поддомен для модуля и создать безголовый сервис с тем же именем, которое указывает на модули.

person Vasili Angapov    schedule 07.05.2019