Compare languages | Модуль cni-cilium: примеры

Egress Gateway

Egress Gateway

Функция доступна только в Enterprise Edition

Feature is only available in Enterprise Edition

Принцип работы

Operation principle

Для настройки egress-шлюза необходимо настроить два ресурса:

To configure an egress gateway, two CRs must be configured:

  • EgressGateway — описывает группу узлов, которые осуществляют функцию egress-шлюза в режиме горячего резерва:
  • Среди группы узлов, попадающих под spec.nodeSelector, будут выявлены пригодные к работе и один из них будет назначен активным. Признаки пригодного узла:
  • Узел в состоянии Ready.
  • Узел не находится в состоянии технического обслуживания (cordon).
  • cilium-agent на узле в состоянии Ready.
  • При использовании EgressGateway в режиме VirtualIP на активном узле запускается агент, который эмулирует “виртуальный” IP средствами протокола ARP. При определении пригодности узла также учитывается состояние пода данного агента.
  • Разные EgressGateway могут использовать для работы общие узлы, при этом активные узлы будут выбираться независимо, тем самым распределяя нагрузку между ними.
  • EgressGatewayPolicy — описывает политику перенаправления сетевых запросов от подов в кластере на определённый egress-шлюз, описанный с помощью EgressGateway.
  • EgressGateway — describes the group of nodes that perform the egress gateway function in hot-standby mode:
  • Among the group of nodes matching the spec.nodeSelector, the eligible nodes will be detected and one of them will be assigned as the active one. Signs of an eligible node:
  • The node is in Ready state.
  • The node is not cordoned.
  • The cilium-agent on the node is in the Ready state.
  • When using EgressGateway in VirtualIP mode, an agent is launched on the active node which emulates “virtual” IP by ARP protocol. The status of this agent’s Pod is also taken into account when determining the eligibility of a node.
  • Different EgressGateways can use common nodes for operation, and active nodes will be selected independently for each EgressGateway, thus distributing the load between them.
  • EgressGatewayPolicy — describes the policy for routing network requests from pods in the cluster to a specific egress gateway described by EgressGateway.

Сравнение с CiliumEgressGatewayPolicy

Comparison with CiliumEgressGatewayPolicy

CiliumEgressGatewayPolicy подразумевает настройку лишь одного узла в качестве egress-шлюза. При выходе его из строя не предусмотрено failover-механизмов и сетевая связь будет нарушена.

The CiliumEgressGatewayPolicy implies configuring only a single node as an egress gateway. If it fails, there are no failover mechanisms and the network connection will be broken.

Пример настройки

Examples

EgressGateway в режиме PrimaryIPFromEgressGatewayNodeInterface

EgressGateway in PrimaryIPFromEgressGatewayNodeInterface mode

yaml apiVersion: network.deckhouse.io/v1alpha1 kind: EgressGateway metadata: name: myegressgw spec: nodeSelector: node-role.deckhouse.io/egress: “” sourceIP: mode: PrimaryIPFromEgressGatewayNodeInterface primaryIPFromEgressGatewayNodeInterface: На всех узлах, попадающих под nodeSelector, “публичный” интерфейс должен иметь одинаковое имя. При выходе из строя активного узла, трафик будет перенаправлен через резервный и IP-адрес отправителя у сетевых пакетов поменяется. interfaceName: eth1

yaml apiVersion: network.deckhouse.io/v1alpha1 kind: EgressGateway metadata: name: my-egressgw spec: nodeSelector: node-role.deckhouse.io/egress: “” sourceIP: mode: PrimaryIPFromEgressGatewayNodeInterface primaryIPFromEgressGatewayNodeInterface: The “public” interface must have the same name on all nodes that matching the nodeSelector. If the active node fails, traffic will be redirected through the backup node and the source IP address of the network packets will change. interfaceName: eth1

EgressGateway в режиме VirtualIPAddress

EgressGateway in VirtualIPAddress mode

yaml apiVersion: network.deckhouse.io/v1alpha1 kind: EgressGateway metadata: name: myeg spec: nodeSelector: node-role.deckhouse.io/egress: “” sourceIP: mode: VirtualIPAddress virtualIPAddress: На каждом узле должны быть настроены все необходимые маршруты для доступа на все внешние публичные сервисы, “публичный” интерфейс должен быть подготовлен к автоматической настройке “виртуального” IP в качестве secondary IP-адреса. При выходе из строя активного узла, трафик будет перенаправлен через резервный и IP-адрес отправителя у сетевых пакетов не поменяется. ip: 172.18.18.242

yaml apiVersion: network.deckhouse.io/v1alpha1 kind: EgressGateway metadata: name: my-egressgw spec: nodeSelector: node-role.deckhouse.io/egress: “” sourceIP: mode: VirtualIPAddress virtualIPAddress: Each node must have all necessary routes configured for access to all external public services, the “public” interface must be ready to accept a “virtual” IP as a secondary IP address. In case of failure of the active node, traffic will be redirected through the backup node and the source IP address of the network packets will not change. ip: 172.18.18.242

EgressGatewayPolicy

EgressGatewayPolicy

yaml apiVersion: network.deckhouse.io/v1alpha1 kind: EgressGatewayPolicy metadata: name: my-egressgw-policy spec: destinationCIDRs:

  • 0.0.0.0/0 egressGatewayName: my-egressgw selectors:
  • podSelector: matchLabels: app: backend io.kubernetes.pod.namespace: my-ns

yaml apiVersion: network.deckhouse.io/v1alpha1 kind: EgressGatewayPolicy metadata: name: my-egressgw-policy spec: destinationCIDRs:

  • 0.0.0.0/0 egressGatewayName: my-egressgw selectors:
  • podSelector: matchLabels: app: backend io.kubernetes.pod.namespace: my-ns