Networking Mesh

Настройка Kilo WireGuard mesh с Cilium для связности multi-location cluster.

Kilo создает WireGuard mesh между locations кластера. При работе с Cilium он использует IPIP encapsulation, маршрутизируемую через VxLAN overlay Cilium, чтобы traffic между locations работал даже тогда, когда cloud network блокирует raw IPIP packets (protocol 4).

Выберите networking variant cilium-kilo

Во время настройки platform выберите networking variant cilium-kilo. Он разворачивает Cilium и Kilo как интегрированный stack с нужной конфигурацией.

Как это работает

  1. Kilo работает в режиме --local=false и не управляет routes внутри location (это делает Cilium)
  2. Kilo создает WireGuard tunnel (kilo0) между location leaders
  3. Non-leader nodes в каждой location достигают remote locations через IPIP encapsulation до своего location leader, маршрутизируемую через VxLAN overlay Cilium
  4. Leader decapsulates IPIP и пересылает traffic через WireGuard tunnel
  5. Опция Cilium enable-ipip-termination создает интерфейс cilium_tunl (переименованный kernel tunl0), который Kilo использует для IPIP TX/RX; без него kernel обнаруживает TX recursion на tunnel device

Talos machine config для cloud nodes

Cloud worker nodes должны содержать Kilo annotations в Talos machine config:

machine:
  nodeAnnotations:
    kilo.squat.ai/location: <cloud-location-name>
    kilo.squat.ai/persistent-keepalive: "20"
  nodeLabels:
    topology.kubernetes.io/zone: <cloud-location-name>

Allowed location IPs

По умолчанию Kilo маршрутизирует через WireGuard mesh только pod CIDRs и individual node internal IPs. Если узлы в location используют private subnet, к которой должны обращаться другие locations (например, для kubelet communication или доступа к NodePort), добавьте annotation kilo.squat.ai/allowed-location-ips на узлы в этой location:

# На всех on-premise nodes (через label selector) - открыть on-premise subnet для cloud nodes
kubectl annotate nodes -l topology.kubernetes.io/zone=on-prem kilo.squat.ai/allowed-location-ips=192.168.100.0/24

Это сообщает Kilo, что указанные CIDRs нужно включить в WireGuard allowed IPs для этой location, делая эти subnets маршрутизируемыми через tunnel из всех других locations.

Устранение неполадок

WireGuard tunnel не установлен

  • Проверьте, что у узла есть annotation kilo.squat.ai/persistent-keepalive: "20"
  • Проверьте, что у узла есть annotation kilo.squat.ai/location, а не только label
  • Проверьте, что cloud firewall разрешает inbound UDP 51820
  • Посмотрите logs kilo: kubectl logs -n cozy-kilo <kilo-pod>
  • Повторяющиеся каждые 30 секунд сообщения “WireGuard configurations are different” указывают на отсутствие annotation persistent-keepalive

Non-leader nodes недоступны (timeout kubectl logs/exec)

  • Проверьте, что IP forwarding включен на cloud network interfaces (это нужно Kilo leader для forward traffic)
  • Проверьте logs kilo pod на ошибки cilium_tunl interface not found; это означает, что Cilium не запущен с enable-ipip-termination=true (variant cilium-kilo настраивает это автоматически)
Last modified 2026-06-29: translate 1.5 (73d3d03)