Lab N4: VPC (Virtual Private Cloud) Construct in VCF 9.0
Objectives
- Understand the VPC construct as a multi-tenancy model in NSX 9.0 / VCF 9.0 (VPCs first appeared in the NSX 4.1.x line)
- Create Projects and VPCs with self-service subnets
- Configure VPC networking: DHCP, default gateway, NAT, and security policies
- Deploy workloads into a VPC and validate connectivity
- Compare VPC-based isolation with traditional T1/segment-based isolation
- Integrate VPC with VCF Automation for self-service catalog delivery
Prerequisites
VCF 9.0 with NSX Manager 4.2+, T0 gateway operational with external connectivity, VCF Automation (optional — for self-service catalog integration), role-based access configured for tenant persona
Prior labs: net-virt-01, net-virt-02
Required skills:
- NSX networking fundamentals (T0/T1/segments)
- Multi-tenancy concepts
- Cloud networking constructs (VPC, subnets, NAT)
Lab Environment
VCF 9.0 management domain with NSX Manager 4.2+, T0 gateway peered with physical network (from Lab net-virt-02). At least 2 ESXi hosts for workload placement. VCF Automation deployed (optional for step 10).
Tasks
Task 1 Build and Consume NSX VPCs for Tenant Isolation
Implement the VPC construct — NSX's cloud-native multi-tenancy model (NSX 9.0 in VCF 9.0) — which abstracts T1 gateways, segments, and DFW policies into a simplified cloud-like experience. VPCs enable tenant self-service for network and security without exposing the complexity of T0/T1/segment/DFW hierarchy. This is a major VCF 9.0 feature that bridges the gap between VMware's on-premises networking and public cloud networking models.
Configure IP address blocks for VPC allocation. NSX Manager → Networking → IP Address Management → IP Address Pools → Add IP Pool. Create: Name='vpc-ip-block', Type=IP Block, CIDR=172.16.0.0/16. This block is the supernet from which VPC subnets are allocated. Also create an external IP pool for SNAT/DNAT: Name='vpc-external-pool', Range=192.168.200.100-192.168.200.200 (on the T0 uplink subnet).
Create a Project. NSX Manager → Inventory → Projects → Add Project. Configure: Name='Project-TeamAlpha', Description='Development team Alpha — self-service networking'. Assign resources: T0 Gateway='T0-Lab' (from Lab net-virt-02), Edge Cluster='edge-cluster-01', IP Blocks='vpc-ip-block', External IP Pools='vpc-external-pool'. Assign users/roles: add a tenant admin user (e.g., 'tenant-alpha-admin') with 'Project Admin' role — this user can create VPCs within the project but cannot modify infrastructure-level objects.
Create a VPC (as infrastructure admin or project admin). Within the Project context (switch to Project-TeamAlpha in the UI header), navigate to VPCs → Add VPC. Configure: Name='vpc-dev-01', Connected T0=inherits from Project, Subnets → Add Subnet: Name='subnet-web' CIDR=172.16.1.0/24 (auto-allocated from IP block), Type=Public (externally routable via NAT); Add Subnet: Name='subnet-db' CIDR=172.16.2.0/24, Type=Private (internal only, no external access). Enable DHCP for both subnets.
Verify VPC backing objects. Switch back to the infrastructure admin view. Navigate to Networking → Tier-1 Gateways — a system-generated T1 appears with a name like 'proj-TeamAlpha-vpc-dev-01-t1'. This T1 is automatically created and linked to the T0 when the VPC is created. Navigate to Segments — system-generated segments for each subnet appear. These backing objects are managed by NSX and should NOT be modified directly — all changes go through the VPC abstraction.
Deploy workloads into VPC subnets. In vSphere Client, create or move VMs to VPC subnets: Edit VM → Network Adapter → select the segment backing 'subnet-web' (it appears with a VPC-prefixed name). The VM receives an IP via DHCP from the VPC's built-in DHCP service. Deploy: vm-web-vpc (on subnet-web, gets 172.16.1.x), vm-db-vpc (on subnet-db, gets 172.16.2.x). Verify: both VMs get IPs via DHCP and can ping each other (east-west within VPC is allowed by default).
Configure VPC NAT for external access. In the VPC context → NAT Rules → Add SNAT Rule: Source=subnet-web (172.16.1.0/24), Translated IP=<IP from external pool> (e.g., 192.168.200.101). This enables web-tier VMs to reach external networks. Add DNAT Rule: Destination=192.168.200.101:80, Translated IP=172.16.1.11:80 — this maps external inbound traffic to the web VM. Verify: from vm-web-vpc, curl an external website — traffic exits via SNAT through the T0.
Apply VPC-level security policies. In the VPC context → Security → Security Policies → Add Policy. Name='vpc-dev-01-security'. Add rules: (1) 'Web-Ingress': Source=Any, Dest=subnet-web, Service=HTTP(80)/HTTPS(443), Action=Allow; (2) 'Web-to-DB': Source=subnet-web, Dest=subnet-db, Service=MySQL(3306), Action=Allow; (3) 'Deny-Direct-DB': Source=Any (external), Dest=subnet-db, Service=Any, Action=Drop. These VPC-scoped rules are isolated from other VPCs and from infrastructure-level DFW policies. The tenant admin can manage them without infrastructure admin involvement.
Compare VPC security with traditional DFW. Key differences: (a) VPC policies are scoped to the VPC — they cannot affect VMs outside the VPC; (b) Infrastructure DFW policies (from Lab net-virt-03) take precedence over VPC policies — infrastructure admin maintains override capability; (c) VPC policies use simplified constructs (subnets as source/dest, not tags/groups) — easier for tenant admins but less granular. Verify: check NSX Manager → Security → DFW — VPC policies appear in a separate section from infrastructure policies.
Test tenant isolation between VPCs. Create a second VPC in the same Project: 'vpc-staging-01' with subnet 172.16.10.0/24. Deploy a VM (vm-staging) on this subnet. Attempt to ping from vm-staging (172.16.10.x) to vm-web-vpc (172.16.1.x) — this should FAIL. Each VPC has its own routing context (separate T1 gateway) — there is no implicit connectivity between VPCs. To enable inter-VPC communication, an explicit route or peering must be configured through the T0, similar to VPC peering in public clouds.
VCF Automation integration (optional). In VCF Automation (formerly vRealize Automation), create a Cloud Template that provisions a VPC: (a) Add a Cloud.NSX.VPC resource with desired subnets and security policies defined as infrastructure-as-code (YAML); (b) Publish to the service catalog; (c) Tenant user requests a VPC from the catalog — VCF Automation creates the VPC, subnets, NAT rules, and security policies automatically. This is the Day 0 self-service model: tenants get isolated network environments on demand without opening tickets to the network team.
Validation Gate
Check: VPC construct operational with tenant isolation, NAT, security, and self-service
Expected: Project created with IP blocks and T0 binding. VPC deployed with public and private subnets. DHCP providing IPs to VMs. SNAT/DNAT enabling external access for public subnet. VPC security policies enforced. Inter-VPC isolation confirmed. Optional: VCF Automation catalog delivering VPCs on demand.
Common Errors
Final Validation
NSX VPC construct operational with full tenant networking and security isolation
✓ Project configuration → Project created with T0, Edge cluster, and IP blocks assigned
✓ VPC with subnets → VPC deployed with public and private subnets, DHCP active
✓ VM connectivity → VMs in same VPC can communicate; VMs in different VPCs cannot
✓ NAT functionality → SNAT enables outbound access; DNAT maps inbound traffic to web VM
✓ VPC security policies → VPC-scoped rules enforce allow/deny per configuration
✓ Tenant isolation → Inter-VPC traffic blocked without explicit peering
Cleanup / Restore
• Delete VMs from VPC subnets
• Delete VPCs (removes backing T1 gateways and segments automatically)
• Delete Project (removes all VPCs within it)
• Release external IP pool allocations
• Delete IP address blocks if no longer needed
Design Reflection (VCDX)
The VPC construct is a signature VCF 9.0 feature that demonstrates VMware's pivot toward cloud-native operations. In a VCDX defense, VPCs are compelling for: (1) Multi-tenancy without exposing NSX complexity — tenants get AWS-like networking without learning T0/T1/segments; (2) Delegated security — VPC policies give tenants security autonomy while infrastructure admin retains override via DFW categories; (3) Self-service at scale — VCF Automation + VPCs enable Day 0 network provisioning in minutes, not days. Compare with traditional approach: each tenant request requires network admin to create T1, segments, DFW rules, NAT — VPCs automate all of this.
Requirements
- Self-service networking for 10+ application teams without infrastructure admin involvement
- Network and security isolation between tenants
- Cloud-like experience (subnets, NAT, security groups) for development teams familiar with public cloud
Constraints
- VPC construct requires NSX 4.2+ (VCF 9.0) — not available in earlier versions
- Each VPC consumes a T1 gateway and Edge resources — capacity planning required
- VPC IP blocks must be pre-provisioned by infrastructure admin — tenants cannot bring arbitrary IP ranges
Assumptions
- Tenant admins understand basic networking concepts (subnets, CIDR, NAT)
- Infrastructure admin pre-provisions sufficient IP blocks and Edge capacity for expected VPC count
- VCF Automation is deployed for full self-service experience (optional but recommended)
Risks
- IP block exhaustion prevents new VPC creation — implement monitoring and alerting on IP block utilization
- VPC sprawl (tenants creating many VPCs without cleanup) consumes Edge and control plane resources — implement VPC lifecycle policies
- Mixing VPC and traditional T1/segment approaches creates operational complexity — standardize on one model per environment
Self-Assessment Discussion Prompts
- How does the NSX VPC construct compare with AWS VPC in terms of capabilities and limitations?
- When would you choose traditional T1/segment isolation over VPC-based isolation?
- How do you handle inter-VPC communication for shared services (DNS, monitoring, backup)?
- What is the maximum number of VPCs and subnets supported per NSX Manager cluster in VCF 9.0?
Extensions
Create a VPC peering configuration to enable selective communication between two VPCs
Build a VCF Automation cloud template that provisions a complete 3-tier application with VPC, subnets, VMs, NAT, and security policies
Implement VPC quota management — limit the number of VPCs, subnets, and external IPs per Project
Configure VPC-level IPFIX flow export for tenant-specific traffic monitoring
⚠ Known Pitfalls (from Community KB)
References
- NSX 4.2 Administration Guide — VPC and Projects: techdocs.broadcom.com
- VCF 9.0 Multi-Tenancy Design Guide: techdocs.broadcom.com
- KB 93456 — NSX VPC Troubleshooting and Known Issues