Отказоустойчивый Kubernetes на BGP
Серия о том, как с нуля собрать отказоустойчивый кластер Kubernetes, в котором и API-сервер, и сервисы типа LoadBalancer публикуются по BGP. Такой кластер работает у меня на виртуальных машинах Hyper-V, и на нём живёт, в том числе, этот блог.
Серия практическая: в каждой части — команды, конфигурация и то, на что я успел наступить. Порядок такой:
- схема кластера и план;
- подготовка узлов Ubuntu 24.04 — сеть, containerd, kubeadm, время;
- BGP на роутере с FRR — фильтры, ECMP и правило файрвола для разворота трафика;
- kube-vip в режиме BGP и первый мастер, затем остальные мастера;
- Calico с eBPF вместо
kube-proxyи рабочие узлы; - адреса сервисов
LoadBalancerиз Calico по BGP; - Traefik за BGP и почему важен
externalTrafficPolicy: Local; - проверка отказоустойчивости, шпаргалка по диагностике и разбор ошибок.
Схема и план
Первая статья серии о кластере Kubernetes, где адрес API-сервера (kube-vip) и адреса LoadBalancer (Calico) анонсируются по BGP: зачем, схема, адреса и AS.
Готовим узлы Ubuntu 24.04
Подготовка узлов Kubernetes на Ubuntu 24.04: статический адрес, swap, модули и sysctl, containerd, kubeadm, время, автообновления и nr_cpus для Hyper-V.
BGP на роутере (FRR)
BGP-маршрутизатор FRR на Linux для кластера Kubernetes: peer-group мастеров и воркеров, фильтры маршрутов, ECMP, таймеры и правило файрвола.
kube-vip в режиме BGP и первый мастер
VIP для API-сервера Kubernetes через kube-vip в режиме BGP: статический под, health-check, kubeadm init с controlPlaneEndpoint, второй и третий мастер.
Calico с eBPF и рабочие узлы
Calico через tigera-operator в режиме eBPF без kube-proxy: ConfigMap с адресом API, пул подов, рабочие узлы, проверка датаплейна и грабли оператора.
Адреса LoadBalancer из Calico по BGP
Адреса сервисов LoadBalancer из Calico по BGP: BGPConfiguration, BGPPeer только для воркеров, пул с allowedUses, аннотация loadBalancerIPs и тест.
Traefik за BGP и externalTrafficPolicy Local
Traefik за сервисом LoadBalancer с адресом из Calico по BGP: три реплики с anti-affinity, PodDisruptionBudget и почему нужен externalTrafficPolicy Local.
Проверка отказоустойчивости и разбор полётов
Какие отказы закрывает BGP-схема кластера Kubernetes и за сколько, как их проверить, шпаргалка диагностики BGP, правила обслуживания и грабли.