Как получить доступ к службе, развернутой на одном модуле, через другой модуль в Kubernetes? - PullRequest
0 голосов
/ 21 ноября 2018

Может кто-нибудь сообщить мне, как мы можем получить доступ к службе, развернутой на одном модуле, через другой модуль в кластере kubernetes?

Пример:

Существует nginxсервис, который развернут на Node1 (с именем pod как nginx-12345) и другой сервис, который развернут на Node2 (с именем pod как service-23456).Теперь, если «сервис» хочет по какой-то причине связаться с «nginx», то как мы можем получить доступ к «nginx» в модуле «service-23456»?

Ответы [ 3 ]

0 голосов
/ 21 ноября 2018

Вы выставили свое развертывание как сервис?Если это так, просто обращайтесь к нему по его DNS-имени, например http://nginx -1234 - или, если оно находится в другом пространстве имен: http://nginx -1234.default.svc (изменить "default "в пространство имен, в котором находится служба) или http://nginx -1234.default.svc.cluster.local

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

Если по какой-то причине вы не хотите предоставлять сервис(не могу придумать ни одной причины), вы можете запросить у сервера API IP-адрес модуля.Вам необходимо будет предоставить токен для аутентификации, но он доступен внутри модуля:

получить токен:

TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)

вызвать сервер API:

curl https://kubernetes.default.svc/api/v1/namespaces/default/pods--silent \
     --header "Authorization: Bearer $TOKEN" --insecure

Вы можете уточнить свой запрос, добавив ?fieldSelector=spec.nodeName%3Dtargetnodename или аналогичный (просто используйте путь json).вывод можно проанализировать с помощью https://stedolan.github.io/jq/ или любой другой утилиты JSON.

0 голосов
/ 22 ноября 2018

На вопрос Симлара был дан ответ: Kubernetes - Как получить доступ к сервису с веб-сервера в модуле с помощью запроса на отдых

Просто замените «ProductWebApp» на «nginx» и «DashboardWebApp»."с" обслуживанием ".

0 голосов
/ 21 ноября 2018

Существуют различные способы доступа к сервису в kubernetes, вы можете предоставить свои сервисы через NodePort или LoadBalancer и получить доступ к нему вне кластера.

См. Официальную документацию о том, как получить доступ к услугам .

В официальном документе Kubernetes говорится, что:

Некоторые кластеры могут разрешать вамSSH к узлу в кластере.Оттуда вы можете получить доступ к службам кластера.Это нестандартный метод, и он будет работать на некоторых кластерах, но не на других.Браузеры и другие инструменты могут быть или не быть установлены.DNS кластера может не работать.

Таким образом, доступ к службе напрямую с другого узла зависит от типа используемого вами кластера Kubernetes.

РЕДАКТИРОВАТЬ:

Как только служба развернута в вашем кластере, вы сможете связаться со службой, используя ее имя, и Kube-DNS ответит с правильным ClusterIP, чтобы поговорить с вашими последними модулями.ClusterIP управляются правилами IPTables, созданными kube-proxy на Workers, которые преобразовывают NAT в ваш запрос к конечному IP-адресу контейнера.

Соглашение по именованию Kube-DNS - service.namespace.svc.cluster-domain.tld, а домен кластера по умолчанию - cluster.local.

Например, если вы хотите связаться со службой с именем mysql в пространстве имен db из любого пространства имен, вы можете просто поговорить с mysql.db.svc.cluster.local.

Если это не работает, томожет быть некоторая проблема с kube-dns в вашем кластере.Надеюсь это поможет.

EDIT2: в ubuntu существует известная проблема с разрешением dns. Официальный документ Kubernetes гласит, что

В некоторых дистрибутивах Linux (например, Ubuntu) по умолчанию используется локальный преобразователь DNS (systemd-resolved).Systemd-resolved перемещает и заменяет /etc/resolv.conf на заглушку, которая может привести к фатальному циклу пересылки при разрешении имен на вышестоящих серверах.Это можно исправить вручную с помощью флага kreslet --resolv-conf, указывающего на правильный resolv.conf (в случае systemd-resolved это /run/systemd/resolve/resolv.conf).kubeadm 1.11 автоматически обнаруживает системное разрешение и соответствующим образом корректирует флаги kubelet.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...