Почему имена стручков не зарегистрированы в DNS Kubernetes? - PullRequest
0 голосов
/ 18 марта 2020

Когда я создаю развертывание в Kubernetes (в частности, Amazon EKS), оно раскручивает N модулей:

worker-node-dddf68987-67fsq      192.168.149.142
worker-node-dddf68987-f77ks      192.168.155.15
worker-node-dddf68987-zndn4      192.168.232.226

И эти модули могут быть разрешены в DNS как (например) 192-168-232-226.my-namespace.pod.cluster.local.

Но они не разрешаются как (например) worker-node-dddf68987-zndn4.my-namespace.pod.cluster.local. Почему бы и нет?

В каждом ответе, который я видел, говорится что-то вроде "ну, на самом деле, вы действительно хотите посмотреть сервис ". Я не .

Моя мотивация такова: при соединении узлов Erlang в кластер имя узла должно совпадать с точно на обоих концах, и я бы предпочитаю, чтобы имя моего узла было worker-node@worker-node-dddf68987-zndn4, а не worker-node@192.168.232.226.

. Я могу установить имя узла «сервер», используя hostname -f, но если это имя не может быть обнаружено в DNS, «клиент» узел не может подключиться к нему.

Я знаю, что с помощью StatefulSet я могу навсегда связать имя с модулем. Это не то, что я хочу. Мои узлы не имеют никакого состояния. Я не возражаю, что имя меняется - я использую libcluster, который будет автоматически иметь дело с членством в кластере Erlang. Я просто хочу, чтобы имена были читабельными.


В сторону: поиск по пунктирному IP - это, по сути, взлом:

# ping 1-1-1-1.default.pod.cluster.local
PING 1-1-1-1.default.pod.cluster.local (1.1.1.1) 56(84) bytes of data.
64 bytes from one.one.one.one (1.1.1.1): icmp_seq=1 ttl=52 time=1.97 ms

1 Ответ

1 голос
/ 18 марта 2020

Потому что kubernetes service создает уровень абстракции перед модулями в развертываниях и работает для них как балансировщик нагрузки. Имена модулей изменчивы и будут меняться после повторного создания или изменения развертывания.

То, чего вы пытаетесь достичь, можно сделать, создав безголовую службу до , отключив балансировку нагрузки :

Если в том же пространстве имен, что и в модуле, существует служба без заголовка, имя которой совпадает с именем субдомена, DNS-сервер кластера также возвращает запись A или AAAA для модуля. квалифицированное имя хоста.

Или просто используйте StatefulSet , для которого требуется безголовая служба

Каждый Pod в StatefulSet получает свое имя хоста из имени StatefulSet и порядковый номер Pod.

...