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

Рисунок 25 ‒ Добавление лейбла пода
- создать Egress Gateway, нажав на
Сохранить.
Теперь весь трафик из приложения с лейблом "podkey: podvalue" неймспейса namespacename будет направлен с узла с лейблом "node-role.kubernetes.io/workers" и IP-адресом 11.22.33.44.
Проверка внешнего трафика
Для проверки внешнего трафика необходимо выполнить следующие шаги:
- cоздать под в том же неймспейсе (namespacename), где запущен под с приложением, например, с именем "pod-without-label". Не следует присваивать ему лейбл "podkey: podvalue" (рисунок 26);

Рисунок 26 ‒ Под "pod-without-label"
- со страницы просмотра созданного пода открыть "Терминал" пода и проверить подключение к хосту с помощью команды
ping:
ping 2.2.2.2
где вместо 2.2.2.2 указать IP-адрес хоста;

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

Рисунок 28 ‒ Проверка подключения к хосту в терминале
- открыть интерфейс командной строки и выполнить подключение к кластеру. Узнать IP-адрес узла, который определен для внешнего трафика:
kubectl -n kube-system exec ds/cilium -- cilium-dbg bpf egress list
В ответе команды IP-адрес такого узла выводится в колонке "Gateway IP" (рисунок 29).

Рисунок 29 ‒ Ответ команды по IP-адресу
- Выполнить подключение по 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