Skip to content
Aa

Multi-cloud networking CE-HA demo

This deployment demonstrates active/active Customer Edge high availability in Azure, AWS, and On-Premise KVM using interface binding, registration, BGP/ECMP, TGW Connect, HA, upgrades, and lifecycle automation in a single Terraform plan:

  1. Rest of World (ROW): Serves mcn-ce-ha.f5-sales-demo.com via CEs in eastus with global public RE advertisement.
  2. AWS Customer Edge Extension: Serves aws.mcn-ce-ha.f5-sales-demo.com via 3 EC2 CEs (m5.2xlarge) in AWS VPC (10.150.0.0/16) in ap-northeast-1 with dual NICs and eBGP/ECMP active/active routing.
  3. On-Premise KVM Extension: One CE (onprem-ce-01, 10.100.0.11) peers with Terraform-owned FRR (10.100.0.2, ASN 65515) on the local libvirt network (10.100.0.0/24); the NAT gateway is 10.100.0.1 and the workload is 10.100.0.100. One BGP peer imports 198.51.100.0/24; this is not a KVM ECMP demonstration.

Azure US uses two FRR relays between the CEs and Route Server, plus Standard Internal Load Balancers with separate application and Site Console frontends. The AWS path uses Transit Gateway Connect with six GRE peers and twelve BGP sessions; an internal NLB fronts three routed site listeners. See the SMSv2 guide for the accepted AWS topology.

Evidence is platform- and date-scoped. AWS v8 acceptance verified one-CE failover and three serial upgrades. Azure observations through 2026-08-08 remain historical; final provider-v8 acceptance did not mutate or re-prove Azure end-to-end.

Observed 2026-08-05: example addresses and names below came from the earlier deployment; use current Terraform outputs for a live presentation. The intended three-platform hybrid architecture is:

Azure US: 3 CEs ── 2 FRRs ── Route Server ── BGP VIP
└──── internal ILB (.10 app, .11 console)
AWS: 3 CEs ── 6 Connect peers / 12 BGP sessions ── NLB
KVM LAN: 1 CE (NAT SLO + physical-LAN SLI) ── custom inside VIP
PieceWhat it is
F5 Distributed Cloud tenantvar.expected_xc_tenant — the only place the tenant is named
NamespacesCE sites in system; origin pool and load balancer in var.xc_app_namespace
Rest of World CEsvar.ce_count single-node Secure Mesh v2 sites in var.location (eastus)
AWS CEsThree independent, single-node SecureMesh v2 sites in var.aws_location (ap-northeast-1), each with MAC-bound SLO and SLI interfaces
AWS workloadAmazon Linux SSM client with no ingress rules in a dedicated TGW-attached VPC (10.151.0.0/16)
On-Premise KVM CEOne Customer Edge (onprem-ce-01) with NAT SLO and an SLI on the pre-existing physical LAN bridge
AWS Virtual Sitemcn-ce-ha-aws-vsite, selecting sites mcn-ce-ha-aws-ap-northeast-1-01 through 03
Route exchangeTwo FRR relays and a Route Server in each Azure region; AWS Transit Gateway Connect; the KVM FRR router on the NAT SLO network
PeeringseBGP peerings per CE, CE ASN var.ce_asn (64512)
Advertised VIPsSeparate regional BGP and inside ILB application VIPs; internal AWS NLB fronts three BGP-routed site listeners; KVM advertises its custom inside VIP on the physical LAN
Load balancersvar.lb_domain (f5-sales-demo.com) for ROW; var.aws_lb_domain (aws.mcn-ce-ha.f5-sales-demo.com) for AWS
Test clientsClient VMs in each regional VNet, AWS VPC, and local test environment for driving traffic at the VIPs

Nothing above is a literal you should copy. Every value is readable from the deployment, and each page reads it rather than naming it:

Terminal window
cd terraform
terraform output -raw resource_group_name
terraform output -json xc_site_names

The Canadian regional deployment is maintained independently in Canada Topology.