Разрешение URL-адреса в качестве другого URL-адреса внутри стручка kubernetes
Мой модуль (pod1) может подключаться к другому модулю с помощью своего сервиса, как показано ниже:
pod2-service.namespace.svc.cluster.local
Тем не менее, я хочу pod1
подключиться к pod2
используя URL как abc.com
который не зарегистрирован в DNS. В основном, я хочу решить pod1 abc.com
как pod2-service.namespace.svc.cluster.local
,
Я смотрел на hostAliases
Вот:
Однако для этого нужен IP. Как я могу сделать это в Kubernetes?
3 ответа
Вы можете получить сервис IP и добавить в /etc/hosts
в pod1 до запуска кода вашего приложения.
echo "$(getent hosts pod2-service.namespace.svc.cluster.local | awk '{ print $1 }') abc.com" >> /etc/hosts
Notice: It is pretty hacky because you should guarantee service ip of pod2 is fixed. When service ip changed, pod1 will fail to reslove the host.
Я думаю, что вы можете использовать фиксированный ip в качестве служебного ip вашего pod2, а затем использовать этот ip в своем определении hostalias.
Есть пара вещей:
StatefulSets, где вы всегда будете знать имя модуля и сможете найти его по порядковому индексу.
Использование поля имени хоста Pod и спецификации поддоменов (работает только для автономных модулей, afaik)
Тем не менее, кажется, что pod to pod изначально не поддерживается Kubernetes в Deployments, поэтому я думаю, что обоснование здесь состоит в том, что pods может постоянно менять IP-адреса и имена. Вы можете использовать записи DNS по умолчанию для Pod, но опять же записи DNS будут различаться в зависимости от IP-адресов, назначенных для модулей.
Другое решение, которое я могу придумать для Deployments, состоит в том, чтобы использовать что-то вроде Consul с доменами-заглушками, тогда на каждом модуле вам нужно будет добавить колонтитул агента initContainer или консультанта, чтобы зарегистрировать свой IP в службе консула, каждый раз, когда модуль перезапускает его. нужно будет перезаписать регистрацию DNS в Консуле.
Если вы не хотите использовать домен-заглушку, есть также возможность использовать Pod DNS Configs.