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