Сетевая архитектура CNI плагинов
Распределённая маршрутизация трафика
Как работает
Платформа использует Cilium в качестве CNI. Cilium реализует распределённую модель маршрутизации: агент cilium-agent запускается на каждом worker-узле как DaemonSet и самостоятельно обрабатывает весь трафик подов, размещённых на этом узле. Никаких выделенных нод-маршрутизаторов в схеме нет — каждый узел маршрутизирует трафик своих подов локально средствами eBPF.
Конфигурация Cilium
Параметр kube-proxy-replacement: true означает, что Cilium полностью заменяет kube-proxy и самостоятельно реализует всю логику Service на каждом узле через eBPF-программы, без обращения к центральному компоненту:
Межузловая связность обеспечивается через VXLAN-туннели между агентами:
Каждый cilium-agent знает о расположении подов на всех узлах кластера и самостоятельно инкапсулирует трафик в туннель до узла назначения. Трафик между подами на разных узлах идёт напрямую node-to-node, без транзита через третий узел:
Адресное пространство подов управляется через cluster-pool — каждому узлу выделяется собственный подсетевой префикс /24 из пула 172.20.0.0/16. Трафик между подами на одном узле маршрутизируется полностью локально и не покидает его сетевой стек:
Пример: трафик между подами на разных узлах
Допустим, Pod-A запущен на узле A (172.20.1.5), Pod-B — на узле B (172.20.2.7).
┌─────────────────────────┐ ┌─────────────────────────┐
│ Узел A │ │ Узел Б │
│ │ │ │
│ ┌─────────────────┐ │ │ ┌─────────────────┐ │
│ │ Pod-A │ │ │ │ Pod-B │ │
│ │ 172.20.1.5 │ │ │ │ 172.20.2.7 │ │
│ └────────┬────────┘ │ │ └────────▲────────┘ │
│ │ 1 │ │ 5 │ │
│ ┌────────▼────────┐ │ │ ┌────────┴────────┐ │
│ │ cilium-agent │ │ │ │ cilium-agent │ │
│ │eBPF · таб.маршр.│ │ │ │ eBPF · decap │ │
│ └────────┬────────┘ │ │ └────────▲────────┘ │
│ │ 2 │ │ 4 │ │
│ ┌────────▼────────┐ │ │ ┌────────┴────────┐ │
│ │ VXLAN encap │ │ 3 · node-to-node │ │ VXLAN decap │ │
│ │ → узел Б ├────┼────────────────────────┼────► доставка │ │
│ └─────────────────┘ │ (туннель) │ └─────────────────┘ │
└─────────────────────────┘ └─────────────────────────┘
- Pod-A отправляет пакет на адрес Pod-B (
172.20.2.7). Пакет попадает в сетевой стек узла A. - eBPF-программа
cilium-agentна узле A смотрит в локальную таблицу маршрутизации Cilium и определяет, что172.20.2.0/24принадлежит узлу Б. Адрес узла Б известен благодаряsynchronize-k8s-nodes: true. cilium-agentинкапсулирует пакет в VXLAN-туннель и отправляет его напрямую на узел Б (node-to-node, без транзита через третий узел).cilium-agentна узле Б принимает пакет и декапсулирует его.- Пакет доставляется Pod-B.
Обратный трафик от Pod-B к Pod-A проходит симметрично в обратном направлении.
Трафик в обратную сторону автоматически разрешается, так как информация об установленном соединении находится в таблице BPF Cilium.