Разрешение 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 Вот:

https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/.

Однако для этого нужен 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.

Есть пара вещей:

Тем не менее, кажется, что pod to pod изначально не поддерживается Kubernetes в Deployments, поэтому я думаю, что обоснование здесь состоит в том, что pods может постоянно менять IP-адреса и имена. Вы можете использовать записи DNS по умолчанию для Pod, но опять же записи DNS будут различаться в зависимости от IP-адресов, назначенных для модулей.

Другое решение, которое я могу придумать для Deployments, состоит в том, чтобы использовать что-то вроде Consul с доменами-заглушками, тогда на каждом модуле вам нужно будет добавить колонтитул агента initContainer или консультанта, чтобы зарегистрировать свой IP в службе консула, каждый раз, когда модуль перезапускает его. нужно будет перезаписать регистрацию DNS в Консуле.

Если вы не хотите использовать домен-заглушку, есть также возможность использовать Pod DNS Configs.

Другие вопросы по тегам