Как назначить 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-адрес, нужно нажать + Добавить неймспейс, выбрать второй неймспейс и при необходимости добавить лейбл пода (рисунок 19).

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

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

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

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

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

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

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

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

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

ping 2.2.2.2

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

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

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

ping 1.1.1.1

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

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

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

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

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

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

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