Как установить имя хоста модуля kubernetes в IP-адрес?
Итак, у меня есть развертывание, которое создает N рабочих пакетов, и служба, которая внутренне уравновешивает трафик к ним. Я получаю доступ к услуге с виртуальной машины. Виртуальная машина делает запрос, и модуль отвечает своим именем хоста, чтобы виртуальная машина могла напрямую подключиться к нему (это используется для извлечения результатов из модуля, который фактически выполнил работу).
Проблема в том, что мой модуль возвращает имя хоста my-pod-5ff75ddd86-2xdjq, который виртуальная машина не может решить. Мне интересно, можно ли установить имя хоста модуля в его IP-адрес, так как это означает, что мне не нужно менять какой-либо код в моем модуле или инструмент, работающий на моей виртуальной машине.
2 ответа
В случае, если вы не хотите менять свой код, вам нужно выставить внутренний kube-dns
вашего кластера и сделать его DNS-сервером по умолчанию вашей виртуальной машины.
По этому другому вопросу есть информация
Как выставить сервис kube-dns для запросов вне кластера?
В документации по контроллеру nginx у вас есть хороший пример демонстрации 53 порта по UDP
https://kubernetes.github.io/ingress-nginx/user-guide/exposing-tcp-udp-services/
Имея запущенный и работающий nginx-контроллер, вы должны правильно создать вход для этого контроллера и просто добавить это configMap
:
apiVersion: v1
kind: ConfigMap
metadata:
name: udp-services
namespace: ingress-nginx
data:
53: "kube-system/kube-dns:53"
В зависимости от настроек вашего кластера, ваша виртуальная машина, вероятно, не сможет подключиться к модулю даже с его IP. По умолчанию IP-адреса модуля находятся в оверлейной сети, доступной только внутри кластера.
Если виртуальная машина находится в кластере, вы уверены, что правильно ссылаетесь на имя хоста pods против kube DNS? Вот документы по DNS для стручков.