Egress Gateway
| Egress Gateway
|
Feature is only available in Enterprise Edition
| Функция доступна только в Enterprise Edition
|
Operation principle
| Принцип работы
|
To configure an egress gateway, two CRs must be configured:
| Для настройки egress-шлюза необходимо настроить два ресурса:
|
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 .
|
EgressGateway — описывает группу узлов, которые осуществляют функцию egress-шлюза в режиме горячего резерва:
- Среди группы узлов, попадающих под
spec.nodeSelector , будут выявлены пригодные к работе и один из них будет назначен активным. Признаки пригодного узла:
- Узел в состоянии Ready.
- Узел не находится в состоянии технического обслуживания (cordon).
- cilium-agent на узле в состоянии Ready.
- При использовании
EgressGateway в режиме VirtualIP на активном узле запускается агент, который эмулирует “виртуальный” IP средствами протокола ARP. При определении пригодности узла также учитывается состояние пода данного агента.
- Разные EgressGateway могут использовать для работы общие узлы, при этом активные узлы будут выбираться независимо, тем самым распределяя нагрузку между ними.
EgressGatewayPolicy — описывает политику перенаправления сетевых запросов от подов в кластере на определённый egress-шлюз, описанный с помощью EgressGateway .
|
Comparison with CiliumEgressGatewayPolicy
| Сравнение с CiliumEgressGatewayPolicy
|
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.
| CiliumEgressGatewayPolicy подразумевает настройку лишь одного узла в качестве egress-шлюза. При выходе его из строя не предусмотрено failover-механизмов и сетевая связь будет нарушена.
|
Examples
| Пример настройки
|
EgressGateway in PrimaryIPFromEgressGatewayNodeInterface mode
| EgressGateway в режиме PrimaryIPFromEgressGatewayNodeInterface
|
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
| 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
|
EgressGateway in VirtualIPAddress mode
| EgressGateway в режиме VirtualIPAddress
|
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
List of interfaces for Virtual IP
interfaces:
| 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
Список сетевых интерфейсов для виртуального IP.
interfaces:
|
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
|