vcf vcf911 avi load-balancer nsx vpc lab

Avi Load Balancer: One Controller, NSX Cloud in VPC Mode

A run-through: deploy the Avi controller, register it with NSX and finish its cloud, so that a Supervisor activated afterwards gets Avi with nothing further to do.

VCF 9.1.1 lab rebuild. Part of the follow-along guide, published live as the build happens.

📘 Official documentation. This is a lab walkthrough, not a replacement for the vendor docs. For the authoritative, supported procedures, follow Broadcom’s VMware Cloud Foundation 9.1 documentation. Where this guide and the official docs differ, the official docs win.

What you end up with: an Avi controller registered with NSX, its cloud ready to place Service Engines, and a Supervisor activated afterwards getting Avi as its load balancer with nothing further to do.

Avi on a distributed transit gateway — the management VLAN 1001 holds the Avi controller at 10.128.1.90 with its node at .91, SDDC Manager, NSX Manager and vCenter. Below, across both clusters, Avi Service Engines take management addresses by DHCP from the Service Engine management network on VLAN 1603, and their data interfaces sit on each VPC's Services Subnet. The distributed transit gateway in every host answers the VIPs on external VLAN 4000, 10.150.0.0/22, where each Supervisor's API, DNS, image proxy and registry addresses live.

info
Do this before activating a SupervisorThe Supervisor's VPC activation wizard has no load balancer field. NSX decides, and it picks Avi only if Avi is already registered — otherwise the Supervisor gets the NSX load balancer instead. There is one load balancer per Supervisor, and it is chosen at activation.

It works on a distributed transit gateway with no Edge cluster. Service Engine management rides an NSX VLAN segment, Service Engine data sits on each VPC’s own Services Subnet, and the VIPs come out of the external IP block and are answered on the external VLAN by the hosts themselves.

What must already exist

NeededFrom
A distributed VLAN connection, the external IP block 10.150.0.0/22, the VNA cluster, and a default connectivity profile with Auto-SNATDistributed connectivity and the VNA cluster
Both clusters prepared for NSX, with the overlay transport zone on all eight hostsBring-up and attaching the second cluster
The Avi 32.1.3 bundle in the depot, downloaded in SDDC ManagerThe Installer

The values

SettingValueWhy
Version32.1.3 (build 9105)The version in the VCF 9.1.1 bill of materials
ControllersOne · SMALL (6 vCPU, 32 GB, 512 GB)A lab choice. A single controller supports SMALL only. Lab only
Cluster name and addressavi.pgvcf1.pgnet.io · 10.128.1.90The instance zone, on the VM management network, VLAN 1001
Node name and addressavi01.pgvcf1.pgnet.io · 10.128.1.91Static
Admin passwordGenerated into the secret store before deploymentThe controller is set from the store. Nothing in the repository or on a command line holds it
Service Engine managementVLAN 1603 · 10.134.3.0/24 · DHCP .50–.250 · NSX VLAN segment vcf-avi-se-mgmt-1603Its own network, routed to the controller. DHCP because Service Engines are created on demand
Service Engine dataNothing to chooseIn VPC mode NSX makes a Services Subnet in each VPC and addresses the Service Engine on it
Content librarypgvcf1-lib-avi-se · LOCAL · no security policy · on vcf-contentThe controller uploads its own Service Engine image here. The datastore must be one every host can reach
VIP addressesNothing to chooseIn VPC mode the controller asks NSX for each VIP out of the external IP block

1. The Service Engine management network

An NSX VLAN segment cannot reach a host that has only the overlay transport zone, which is what bring-up leaves behind.

  1. Create VLAN 1603 on the physical network with a gateway and a DHCP scope — here 10.134.3.1/24, handing out .50–.250 — trunked to every host uplink.
  2. Give every host the VLAN transport zone:
uv run scripts/nsx_vlan_tz.py            # shows the two cluster transport node profiles and what would change
uv run scripts/nsx_vlan_tz.py --apply    # adds nsx-vlan-transportzone; waits for all eight hosts
  1. In NSX, Networking › Segments › Add segment: name vcf-avi-se-mgmt-1603, transport zone nsx-vlan-transportzone, VLAN 1603, no gateway — the physical network routes it. It appears as a port group on both distributed switches.

What you should see: a VM or VMkernel interface on that port group, on any host in either cluster, takes a lease from 10.134.3.0/24 and can reach 10.128.1.90 and .91.

2. Names and the password

  • Create forward and reverse DNS for avi.pgvcf1.pgnet.io → 10.128.1.90 and avi01.pgvcf1.pgnet.io → 10.128.1.91. The deployment script refuses to run without both.
  • Generate the admin password into the secret store, under infrastructure/vcf/pgvcf1/avi.

3. Allow a single controller

warning
Lab only — unsupportedSDDC Manager deploys three controllers unless told otherwise. This step sets a feature flag to allow one. It is unsupported, and production is three controllers with anti-affinity. One consequence shows permanently: NSX reports the Avi cluster Degraded, because it measures one node against three.

On the SDDC Manager appliance, as root, after taking a VM snapshot:

cp -p /home/vcf/feature.properties /home/vcf/feature.properties.bak-$(date +%Y%m%d-%H%M%S)   # -p keeps owner and mode
echo 'feature.vcf.vgl-41078.alb.single.node.cluster=true' >> /home/vcf/feature.properties
echo y | /opt/vmware/vcf/operationsmanager/scripts/cli/sddcmanager_restart_services.sh        # it asks for confirmation

Restart only while no SDDC Manager task is running. The services take a few minutes to come back. Remove the snapshot once the controller is up.

🔗 Community — the feature flag is documented by William Lam. Community work for lab use, not Broadcom guidance, and not supported.

4. Deploy the controller

uv run scripts/avi_deploy.py            # checks DNS, the bundle and the password; runs SDDC Manager's own validation
uv run scripts/avi_deploy.py --apply    # POST /v1/alb-clusters; watches the task

SDDC Manager hands the work to NSX, which deploys the controller VM, sets its password, forms the one-node cluster, registers it, and creates an NSX cloud on it. About 25 minutes.

What you should see:

WhereState
SDDC Manager taskSuccessful, 23 of 23
https://avi.pgvcf1.pgnet.io/Answers
NSX › System › Appliances › Avi Load BalancerNode Connected and Leader, and the cluster Degraded — one node measured against three
Avi controllerCluster CLUSTER_UP_NO_HA; clouds Default-Cloud and Cloud-nsx, the NSX cloud, VPC mode on

5. The welcome wizard

Log in as admin with the password from the store.

Avi welcome wizard, System Settings — a masked passphrase and confirmation, DNS resolvers 10.200.1.240 and 10.200.10.75, DNS search domain pgvcf1.pgnet.io, and the Customer Experience Improvement Program and configuration warnings checkboxes ticked.

StepValue
System settingsA backup passphrase, stored as its own key in the secret store — a backup cannot be restored without it, and it does not follow a later password change. DNS is pre-filled; set the search domain to pgvcf1.pgnet.io
Email/SMTPNone, unless there is a relay
Multi-tenantShare IP route domain across tenants · Service Engines managed within the Provider · tenant Read access

Avi welcome wizard, Multi-Tenant — IP Route Domain set to Share IP route domain across tenants, Service Engines managed within the Provider and shared across tenants, and Tenant Access to Service Engine set to Read Access.

Leave Setup cloud after unticked, because the cloud already exists.

Those tenancy defaults suit VCF: isolation between organisations comes from NSX VPCs, and the controller keeps one VRF per VPC in its admin tenant. A single SMALL controller could not afford a Service Engine pair per tenant.

6. Finish the cloud

The cloud NSX creates is not finished. Three things are set on it afterwards, and the third is the one a Supervisor depends on.

uv run --group vsphere scripts/avi_cloud.py            # reports what is set and what is missing
uv run --group vsphere scripts/avi_cloud.py --apply    # sets it and waits for the cloud to be ready
ItemSet toWhat it is for
Content librarypgvcf1-lib-avi-se, created LOCAL with no security policy, on vcf-contentService Engines are cloned from the image the controller uploads here
Management networkVLAN · nsx-vlan-transportzone · segment vcf-avi-se-mgmt-1603A Service Engine’s first NIC. Without it the cloud reports Configured management transport zone '' of type ''
Data networkOVERLAY · overlay-tz-mgmt-nsxt — the zone the hosts and VPCs use. No tier-1, no segmentThe controller accepts the cloud without it, but a Supervisor’s Avi operator finds its cloud by matching on this transport zone. Set it now — see below

What you should see: CLOUD_STATE_PLACEMENT_READY within a minute or two, and soon after an item in the library — the controller’s own Service Engine image.

The data network is the one to get right before activating a Supervisor. With the cloud’s data_network_config unset, the Supervisor’s Avi operator logs:

Failed to derive cloud, err: cloud not found matching transport zone

The activation finishes once the zone is set. That dependency is not stated in the documentation; it is what this build observed.

7. Enable a VPC for Avi

A VPC is eligible for Avi only when it says so: in NSX, VPCs › the VPC › Advanced settings › Enable for Avi Load Balancer, which is load_balancer_vpc_endpoint.enabled in the API. It needs no Edge cluster. The controller then discovers the VPC and keeps a VRF for it.

A Supervisor turns this on for its own VPCs. For a VPC of your own:

uv run scripts/vpc_test.py --vpc pgnet-core --apply     # a VPC with the Avi endpoint on, a public and a private subnet

NSX Virtual Private Clouds — two VPCs, pgnet-core-vpc01 and pgvcf1-gateg-test, each showing Default Transit Gateway, Default Span, 3 subnets, status Success, and under Advanced Settings the connectivity profile default with Enable for Avi Load Balancer On.

Result

Measured 2026-09-20, after both Supervisors were activated against this controller.

  • Controller 32.1.3, cluster up, cloud Cloud-nsx placement-ready, and the library holding the Service Engine image.
  • Two Service Engines, created by the controller with the first virtual service, on pgvcf1-cl02, taking management addresses 10.134.3.93 and 10.134.3.228 by DHCP. They are shared: the second Supervisor’s services were placed on the same pair.
  • Eight virtual services up, four per Supervisor — API, DNS, image proxy and registry. Their VIPs, 10.150.0.6–.9 and .12–.15, were allocated by NSX from the external IP block and are reachable from outside the VPCs.
  • The Avi licence is leased on demand: two service cores in use, for the two one-vCPU Service Engines.

Lab-only conditions

WhatNote
One controller, by an unsupported feature flagProduction is three, with anti-affinity. NSX shows the cluster Degraded permanently as a result
Consumer hardware, vSAN encryption offThe hardware

References

📖 Reference — VMware Cloud Foundation 9.1 documentation, Design › Load Balancer Detailed Design › Avi Load Balancer Model, pp. 1911–1925. It states that this model needs no Edge cluster and that Service Engine management can use an NSX VLAN segment rather than an overlay segment. Requirements VCF-AVI-LB-REQD-CFG-01 to -04 are in Table 598, p. 1919: configure the NSX cloud, register Avi as an endpoint with NSX, one Avi to one NSX Manager, and “Avi Load Balancer must be integrated with NSX before Supervisor activation” — whose justification reads “If Avi Load Balancer integration is not detected, Supervisor defaults to utilizing NSX load balancer.” Recommendations VCF-AVI-LB-RCMD-CFG-04 (enable VPC mode in the NSX cloud account) and -05 (Service Engine DHCP addressing) are in Table 599, p. 1919, as is -01, which recommends three controllers.

How the load balancer is chosen: vSphere Supervisor Platform › Deploy a Supervisor with VPC Networking, p. 6861 — “If NSX does not detect the Avi Load Balancer, it uses the NSX Edge load balancer” — and p. 6853, “You can only use one load balancer”. The VNA cluster a Supervisor needs for north-south services and Auto-SNAT: VCF-WLDCON-DTGWVLAN-REQD-CFG-013 and -014, Table 575, p. 1844.

VMware Avi Load Balancer 32.1 documentation, Installation Guide › Integration with NSX Multi-Tenancy, pp. 898–927: VPC mode in the NSX cloud configuration (pp. 901–902), the per-VPC load_balancer_vpc_endpoint setting (p. 902), and a dedicated VRF for each NSX VPC (p. 904). Administration Guide › Create a Tenant, pp. 235–239, for the IP route domain and Service Engine context options.

About the references

Page numbers elsewhere in this guide are from the September 2026 build of the VMware Cloud Foundation 9.1 PDF.