Назад | Перейти на главную страницу

Разрешение службы Kubernetes через внутренний DNS-сервер - Bare Metal

У меня есть кластер Kubernetes с 4 узлами, мой главный главный узел плюс другие узлы. Я использовал кубеспрей, чтобы все заработало. Это в моей домашней сети, о чем я расскажу ниже. Я пытаюсь добиться, чтобы какое-то разрешение DNS работало, чтобы я мог перейти к настройке входящего трафика.

Моя настройка:

Я предполагаю, что мне нужно каким-то образом сообщить DNS-серверу, запущенному на моем главном сервере, что что-нибудь XXX.server.mydomain.com. По крайней мере, так, как я себе представляю, должно работать? Я не уверен, возможно, я неправильно это понимаю.

Дело в том, что даже если я попытаюсь выполнить nslookup вручную, это все равно не сработает. Я пробовал что-то вроде:

> nslookup nzbget.server.mydomain.com 10.233.0.3
Server:     10.233.0.3
Address:    10.233.0.3#53

** server can't find nzbget.server.mydomain.com: NXDOMAIN

так же как

> nslookup nzbget 10.233.0.3
Server:     10.233.0.3
Address:    10.233.0.3#53

** server can't find nzbget.mydomain.com: REFUSED

10.233.0.3 - это IP-адрес службы CoreDNS в кластере.

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

Вам необходимо настроить домен / поддомен с подстановочными знаками в bind9, если вы выполните поиск в Google по запросу «bind wildcard record», вы должны найти этот пост Подстановочный DNS с BIND

Я оставлю ответ @ DarkVex как правильный, поскольку он ответил на исходный вопрос, но хотел добавить некоторые детали своего окончательного решения для тех, кто может наткнуться здесь в будущем.

По сути, я пытался получить доступ к своим службам Kubernetes через упрощенные внутренние DNS-имена, такие как jenkins.mydomain.com. С одним только Docker я создавал виртуальные сетевые узлы на хосте Linux, затем сопоставлял IP / порт контейнеров Docker с этими IP / портами и затем указывал запись DNS A в Bind9 на этот IP. Я пытался сделать что-то подобное с помощью Kubernetes, но не знал, как это сделать.

Оказывается, это на самом деле проще, чем я думал. Первое, что мне нужно было сделать, это добавить маршрут в настройки моей сети, чтобы направить IP-подсеть, используемую в Kubernetes, на IP-адрес главного узла. Так, например, моя внутренняя сеть имеет 3 виртуальных LAN: 10.0.x.x, 10.1.x.x и 10.2.x.x, а мой Kubernetes выбрал 10.233.x.x. Если мой главный узел находится на 10.0.0.10, то я просто сказал своему маршрутизатору отправлять трафик 10.233.x.x на 10.0.0.10. Это открыло IP-адреса, чтобы я мог поразить их извне.

Затем нужно было создать службу в режиме LoadBalanced для развертываний в Kubernetes. Я мог бы также использовать Ingress-сервер, но я не видел необходимости, поскольку первый шаг позволяет мне получить доступ к Сервисам из любой точки моей внутренней сети. Служба располагается поверх всех развернутых модулей, предоставляя единый IP-адрес с балансировкой нагрузки для всех базовых модулей. Ключевым моментом здесь является то, что, хотя IP-адреса подов могут измениться в любой момент, IP-адрес службы остается статическим, пока вы его не удалите.

Последний шаг был таким же, как и раньше ... просто добавьте запись A в Bind9, указывающую на IP-адрес службы. Альт! Теперь я могу подключиться к сервису через упрощенное имя хоста. Обратной стороной является то, что для выполнения требуется несколько действий вручную. Было бы неплохо выяснить, как настроить DNS для проксирования всех запросов, возможно, использовать настройку Ingress, которая смотрит на запрошенное имя хоста для маршрутизации к нужным службам. Я мог бы сделать это в любом случае, но прямо сейчас это, по крайней мере, возвращает меня туда, где я был с Docker.