You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Three Kind clusters (dfw, iad, sjc) connected over an IPv6 SRv6 transit mesh. Each cluster
runs FRR as a node routing daemon (hostNetwork DaemonSet) to peer with the transit layer via
eBGP over numbered IPv6 links. galactic-router runs alongside FRR on the workers to distribute EVPN routes
over iBGP to the route reflector on iad-rr.
AS 65000 (dfw-underlay / FRR) ──eBGP── tr1 (AS 65100)
AS 65000 (iad-underlay / FRR) ──eBGP── tr3:eth5 (AS 65100)
AS 65000 (iad-rr-underlay / FRR) ──eBGP── tr3:eth4 (AS 65100)
AS 65000 (sjc-underlay / FRR) ──eBGP── tr2 (AS 65100)
AS 65000 (dfw-overlay / galactic-router) ──iBGP── iad-rr (AS 65000 RR)
AS 65000 (iad-overlay / galactic-router) ──iBGP── iad-rr (AS 65000 RR)
AS 65000 (sjc-overlay / galactic-router) ──iBGP── iad-rr (AS 65000 RR)
All clusters use a single AS (65000) for both the FRR underlay and the galactic-router overlay.
The transit mesh carries IPv6 unicast (SRv6 locator prefixes and loopbacks) via iBGP within AS 65100.
FRR PE nodes originate their SRv6 forwarding prefix (2001:db8:ffXX::/48) and SRv6 SID block (fc00:0:X::/48) toward the transit layer via eBGP over numbered IPv6 links.
allowas-in 1 is configured on all cluster FRR instances so each site accepts prefixes that carry AS 65000 in the path — necessary because the transit reflects routes from one AS 65000 site to another.
galactic-router instances on dfw/iad/sjc workers peer with iad-worker-rr over iBGP (AS 65000) for l2vpn-evpn routes. GoBGP runs with outbound-only mode (listenPort=-1); all BGP sessions are initiated outbound.
Destroy lab, delete built images, and remove lab artifacts
test
Run all verification checks
Verification
Transit underlay
# iBGP full mesh — expect all sessions Established
docker exec clab-gvpc-tr1 vtysh -c "show bgp ipv6 unicast summary"# Worker SRv6 prefixes should be present on all TR nodes
docker exec clab-gvpc-tr1 vtysh -c "show bgp ipv6 unicast 2001:db8:ff01::/48"
docker exec clab-gvpc-tr1 vtysh -c "show bgp ipv6 unicast 2001:db8:ff02::/48"
docker exec clab-gvpc-tr1 vtysh -c "show bgp ipv6 unicast 2001:db8:ff03::/48"
FRR DaemonSets (eBGP underlay)
# Check pods are running
docker exec dfw-control-plane kubectl get pods -n galactic-system
docker exec iad-control-plane kubectl get pods -n galactic-system
docker exec sjc-control-plane kubectl get pods -n galactic-system
# Run vtysh inside a pod
docker exec iad-control-plane kubectl exec -n galactic-system ds/iad-underlay \
-- vtysh -c "show bgp ipv6 unicast summary"
docker exec iad-control-plane kubectl exec -n galactic-system ds/iad-rr-underlay \
-- vtysh -c "show bgp ipv6 unicast summary"
galactic-router DaemonSets (EVPN overlay)
# Check pods are running
docker exec dfw-control-plane kubectl get pods -n galactic-system
docker exec iad-control-plane kubectl get pods -n galactic-system
docker exec sjc-control-plane kubectl get pods -n galactic-system
# Check EVPN routes via BGPRouter status
docker exec dfw-control-plane kubectl get bgprouters -A
docker exec iad-control-plane kubectl get bgprouters -A
docker exec sjc-control-plane kubectl get bgprouters -A
Notes
All three Kind clusters use disableDefaultCNI: true. Cilium is installed by the
kindest/node:galactic bootstrap script. cert-manager and Multus are only installed
on iad and sjc.
Worker–TR links use numbered IPv6 subnets (/64) with eBGP peering.
Cilium's iptables rules block BGP by default; the bootstrap script inserts
ip6tables -I INPUT rules for TCP/179 before Cilium starts on each worker.
iad-worker-rr peers with tr3 as AS 65000, the same AS used by all three clusters.