Egress Gateway
Функция доступна только в Enterprise Edition
Принцип работы
Для настройки egress-шлюза необходимо настроить два ресурса:
EgressGateway
— описывает группу узлов, которые осуществляют функцию egress-шлюза в режиме горячего резерва:- Среди группы узлов, попадающих под
spec.nodeSelector
, будут выявлены пригодные к работе и один из них будет назначен активным. Признаки пригодного узла:- Узел в состоянии Ready.
- Узел не находится в состоянии технического обслуживания (cordon).
- cilium-agent на узле в состоянии Ready.
- При использовании
EgressGateway
в режимеVirtualIP
на активном узле запускается агент, который эмулирует “виртуальный” IP средствами протокола ARP. При определении пригодности узла также учитывается состояние пода данного агента. - Разные EgressGateway могут использовать для работы общие узлы, при этом активные узлы будут выбираться независимо, тем самым распределяя нагрузку между ними.
- Среди группы узлов, попадающих под
EgressGatewayPolicy
— описывает политику перенаправления сетевых запросов от подов в кластере на определённый egress-шлюз, описанный с помощьюEgressGateway
.
Сравнение с CiliumEgressGatewayPolicy
CiliumEgressGatewayPolicy
подразумевает настройку лишь одного узла в качестве egress-шлюза. При выходе его из строя не предусмотрено failover-механизмов и сетевая связь будет нарушена.
Пример настройки
EgressGateway в режиме PrimaryIPFromEgressGatewayNodeInterface
1apiVersion: network.deckhouse.io/v1alpha1
2kind: EgressGateway
3metadata:
4 name: myegressgw
5spec:
6 nodeSelector:
7 node-role.deckhouse.io/egress: ""
8 sourceIP:
9 mode: PrimaryIPFromEgressGatewayNodeInterface
10 primaryIPFromEgressGatewayNodeInterface:
11 # На всех узлах, попадающих под nodeSelector, "публичный" интерфейс должен иметь одинаковое имя.
12 # При выходе из строя активного узла, трафик будет перенаправлен через резервный и
13 # IP-адрес отправителя у сетевых пакетов поменяется.
14 interfaceName: eth1
EgressGateway в режиме VirtualIPAddress
1apiVersion: network.deckhouse.io/v1alpha1
2kind: EgressGateway
3metadata:
4 name: myeg
5spec:
6 nodeSelector:
7 node-role.deckhouse.io/egress: ""
8 sourceIP:
9 mode: VirtualIPAddress
10 virtualIPAddress:
11 # На каждом узле должны быть настроены все необходимые маршруты для доступа на все внешние публичные сервисы,
12 # "публичный" интерфейс должен быть подготовлен к автоматической настройке "виртуального" IP в качестве secondary IP-адреса.
13 # При выходе из строя активного узла, трафик будет перенаправлен через резервный и
14 # IP-адрес отправителя у сетевых пакетов не поменяется.
15 ip: 172.18.18.242
EgressGatewayPolicy
1apiVersion: network.deckhouse.io/v1alpha1
2kind: EgressGatewayPolicy
3metadata:
4 name: my-egressgw-policy
5spec:
6 destinationCIDRs:
7 - 0.0.0.0/0
8 egressGatewayName: my-egressgw
9 selectors:
10 - podSelector:
11 matchLabels:
12 app: backend
13 io.kubernetes.pod.namespace: my-ns