Как назначить IP-адрес для внешнего трафика приложения

Чтобы назначить IP-адрес для внешнего трафика вашего приложения, в графическом интерфейсе Комплекса можно настроить Egress Gateway (CiliumEgressGatewayPolicy). Для этого нужно выполнить шаги инструкции из п. В графическом интерфейсе Комплекса.

После создания Egress Gateway можно проверить выполнение правил политики и убедиться в назначении IP-адрес для внешнего трафика приложения. Для этого требуется выполнить шаги инструкции из п. Проверка внешнего трафика.

В графическом интерфейсе Комплекса

Для назначения IP-адреса внешнего трафика в графическом интерфейсе Комплекса нужно выполнить следующие шаги:

  1. перейти в ваш кластер, в котором необходимо назначить IP-адрес для внешнего трафика приложения, открыть страницу "Egress Gateway" раздела "Сети" и нажать + Добавить Egress Gateway;
  2. на открывшейся странице настроить конфигурацию для Egress Gateway.

Пример:

  1. В поле "Имя Egress Gateway" указать "egressname".
  2. В поле "IP-адрес" задать IP-адрес исходящего трафика ‒ 11.22.33.44.
  3. Оставить без изменений "destinationCIDRs" ‒ 0.0.0.0/0. Задать CIDR, если необходимо, чтобы на узел был перенаправлен только трафик, отправляемый на указанный IP-адрес. Значение 0.0.0.0/0 определяет любой IP-адрес для внешнего трафика.
  4. В блоке "Селектор узлов" нажать + рядом с "Лейблы" и в открывшемся окне поля "Ключ" ввести лейбл узла, через который будет выходить трафик во внешнюю сеть ‒ node-role.kubernetes.io/workers. В этом случае передача трафика будет только через узел с ролью "workers". Можно указать лейбл операционной системы ‒ kubernetes.io/os:linux. В этом случае пакеты приложения с указанным IP-адресом исходящего трафика будут выходить через узлы с этим лейблом.
  5. В поле "Неймспейс" выбрать имя неймспейса, в котором развернуто приложение, например "namespacename".
  6. Добавить лейбл пода, в котором развернуто приложение ‒ "podkey: podvalue".

Важно ‒ Если приложение развернуто в нескольких экземплярах нескольких неймспейсов одного кластера, и необходимо назначить для них единый IP-адрес, нужно нажать + Добавить неймспейс, выбрать второй неймспейс и при необходимости добавить лейбл пода (рисунок 25).

Рисунок 25 ‒ Добавление лейбла пода

  1. создать Egress Gateway, нажав на Сохранить.

Теперь весь трафик из приложения с лейблом "podkey: podvalue" неймспейса namespacename будет направлен с узла с лейблом "node-role.kubernetes.io/workers" и IP-адресом 11.22.33.44.

Проверка внешнего трафика

Для проверки внешнего трафика необходимо выполнить следующие шаги:

  1. cоздать под в том же неймспейсе (namespacename), где запущен под с приложением, например, с именем "pod-without-label". Не следует присваивать ему лейбл "podkey: podvalue" (рисунок 26);

Рисунок 26 ‒ Под "pod-without-label"

  1. со страницы просмотра созданного пода открыть "Терминал" пода и проверить подключение к хосту с помощью команды ping:
ping 2.2.2.2

где вместо 2.2.2.2 указать IP-адрес хоста;

Рисунок 27 ‒ Проверка подключения к хосту в терминале

  1. перейти к поду, в котором развернуто выше приложение, и открыть "Терминал". Выполнить проверку подключения к хосту с IP-адресом, отличным от указанного на предыдущем шаге (рисунок 28):
ping 1.1.1.1

где вместо 1.1.1.1 указать IP-адрес хоста;

Рисунок 28 ‒ Проверка подключения к хосту в терминале

  1. открыть интерфейс командной строки и выполнить подключение к кластеру. Узнать IP-адрес узла, который определен для внешнего трафика:
kubectl -n kube-system exec ds/cilium -- cilium-dbg bpf egress list

В ответе команды IP-адрес такого узла выводится в колонке "Gateway IP" (рисунок 29).

Рисунок 29 ‒ Ответ команды по IP-адресу

  1. Выполнить подключение по SSH к узлу с IP-адресом, полученным на предыдущем шаге, и запустить утилиту для анализа и вывода входящего и исходящего сетевого трафика узла:
tcpdump -i eth0 -n -s0 icmp

В полученном ответе можно убедиться, что перенаправление пакетов приложения выполняется с IP-адреса Egress Gateway и только с пода, соответствующего правилу Egress Gateway. На рисунке 30 11.22.33.44 ‒ IP-адрес исходящего трафика, 10.10.10.10 ‒ IP-адрес узла.

Рисунок 30 ‒ Результат команды tcpdump