メインコンテンツまでスキップ

BGP 付き Kubernetes API VIP

この例は、Kubernetes API endpoint を cluster 内に置かず、routerd の edge pair で bootstrap するための構成です。router は VRRP VIP を保持し、 k8s-api.cluster.example:6443 を 3 台の control-plane backend へ転送し、 HTTPS の /readyz を確認し、Kubernetes BGP speaker と peer して Service prefix を受け取ります。

出発点として、次の順で確認します。

routerd validate --config examples/kubernetes-api-vip.yaml
routerd plan --config examples/kubernetes-api-vip.yaml
routerd apply --config examples/kubernetes-api-vip.yaml --once --dry-run

構成:

routerd-01/02 VRRP VIP 192.168.70.10
|
+-- k8s-cp-01..03 :6443 HTTPS /readyz
|
+-- k8s-wk-01..04 BGP ASN 64513

重要な設定:

Resource設定
VirtualAddress/k8s-api-vipVRRP の preempt 設定、API health と BGP health の track。
IngressService/kubernetes-api/readyz の HTTPS health check、kubeadm bootstrap の self-signed 証明書向け tlsSkipVerify: true、failover selection、healthy backend 不在時の reject、VIP と選択済み control-plane backend が同じ LAN prefix または同じ private /24 上にある場合の同一 interface hairpin SNAT 自動生成。
BGPRouter/lanconvergenceProfile: fast、BGP timers 3s/9s/5s、既定で graceful restart disabled、Kubernetes Service prefix だけを受ける import allow-list。
DNSResolver/lan-resolverVIP の hostname field から k8s-api.cluster.example を自動で返し、control plane と worker の static record も提供。

DHCP pool は VIP、control-plane address、worker address、LoadBalancer / Service advertisement range と重ならないようにしてください。

運用時は routerctl show bgprouterctl show vrrprouterctl show ingress で、peer state、VIP role、backend health を raw status JSON ではなく表形式で確認できます。dataplane を確認する場合は routerctl show ingress --verbose を使うと、runtime forwarding sysctl、nftables DNAT/SNAT rule 数、API ingress に該当する conntrack flow 数を表示できます。