Lab: Enable vSphere Supervisor on VVF Cluster with HAProxy Load Balancer
Objectives
- Deploy and configure HAProxy load balancer for Supervisor API endpoint
- Enable vSphere Supervisor on a VVF cluster using vDS networking
- Create and configure a Supervisor namespace with resource quotas
- Authenticate to Supervisor via kubectl vsphere login
- Understand Supervisor architecture — 3 control plane VMs, namespaces, storage policies
Prerequisites
Holodeck pod with VVF management domain (vCenter + 3 ESXi + vSAN). Minimum 64GB total RAM across hosts (Supervisor control plane needs ~48GB).
Prior labs: vvf-admin-01, vvf-admin-07
Required skills:
- Kubernetes basics (kubectl, namespaces, YAML)
- vDS networking
- OVA deployment
- DNS management
Lab Environment
Holodeck VVF pod with vDS. HAProxy deployed as separate VM for K8s API load balancing. Supervisor creates 3 control plane VMs automatically.
IP Addressing
| Network | Purpose | VLAN |
|---|---|---|
192.168.10.0/24 | Management | 10 |
192.168.10.90 | HAProxy management IP | 10 |
192.168.20.0/24 | Workload network (Supervisor pods/VMs) | 20 |
192.168.20.128-192.168.20.191 | HAProxy virtual IP range (load balancer VIPs) | 20 |
Credentials
| System | Username | Password |
|---|---|---|
| vCenter | administrator@vsphere.local | Set during VCSA deployment |
| HAProxy | admin | Set during OVA deployment |
Tasks
Task 1 Deploy HAProxy Load Balancer
availabilityVVF uses vDS networking for Supervisor — no NSX means no built-in load balancer. HAProxy provides the L4 load balancing required for Kubernetes API endpoint and services.
Download HAProxy OVA for vSphere from the VMware GitHub repository (haproxy.ova). This is the VMware-maintained HAProxy appliance for Supervisor on vDS.
Deploy OVA: vCenter → Deploy OVF Template. Name='haproxy-01'. Select management cluster, vSAN datastore.
Network configuration:
- Management Network: Management port group (VLAN 10), IP=192.168.10.90
- Workload Network: Workload port group (VLAN 20)
- Load Balancer IP range: 192.168.20.128/26 (64 VIPs)
- HAProxy Data Plane API port: 5556
Set root password and Data Plane API credentials during OVA deployment wizard.
Power on HAProxy VM. Verify: SSH to 192.168.10.90, run 'systemctl status haproxy' — should show active.
Verify Data Plane API: curl -k https://192.168.10.90:5556/v2/info
Export HAProxy CA certificate — needed for Supervisor configuration:
cat /etc/haproxy/ca.crt
Copy the PEM-encoded certificate content.
Validation Gate
Check: curl -k https://192.168.10.90:5556/v2/info returns valid JSON
Expected: HAProxy Data Plane API responds with version info. haproxy service is active.
Common Errors
Task 2 Enable vSphere Supervisor
manageabilitySupervisor is the Kubernetes control plane in vSphere. Enabling it on a VVF cluster with vDS networking (not NSX) is a key differentiator from VCF. Exam objective 4.1.
Verify prerequisites: vCenter → Cluster → DRS must be 'Fully Automated'. HA must be enabled. vSAN datastore must be healthy (green).
vCenter → Menu → Workload Management → Enable Supervisor. Select cluster → Choose 'vSphere Distributed Switch' as network stack (NOT NSX).
Storage settings: Select vSAN storage policy for control plane VMs and persistent volumes.
Management network: Select management port group (VLAN 10). Enter 5 static IPs for Supervisor (3 control plane + 2 for rolling upgrades). Example: 192.168.10.91-192.168.10.95.
Workload network: Select workload port group (VLAN 20). Enter IP range for workload nodes: 192.168.20.10-192.168.20.50.
Load balancer configuration:
- Type: HAProxy
- Management IP: 192.168.10.90
- Data Plane API port: 5556
- Username/password: (set during HAProxy OVA deploy)
- Virtual IP range: 192.168.20.128/26
- CA certificate: (paste the PEM cert from Task 1, Step 7)
Review and Finish. Supervisor deployment takes 15-25 minutes. Monitor progress in Recent Tasks.
Verify: vCenter → Workload Management → Supervisors → Status should show 'Running'. Kubernetes API endpoint URL displayed.
Validation Gate
Check: vCenter → Workload Management → Supervisors
Expected: Supervisor status: Running (green). 3 control plane VMs visible in inventory. Kubernetes API endpoint displayed.
Common Errors
Task 3 Create Supervisor Namespace and Authenticate
securityNamespaces are the logical isolation boundary in Supervisor. Creating one and authenticating demonstrates the developer self-service model — critical for Obj 4.1 and 4.4.
vCenter → Workload Management → Namespaces → Create Namespace.
Name: 'dev-team', Network: Workload network (VLAN 20), Storage Policy: vSAN default.
Set resource quotas: CPU Limit=8000 MHz, Memory Limit=16384 MB, Storage Limit=100 GB.
Assign permissions: Add user (administrator@vsphere.local) with 'Edit' role to namespace.
Install kubectl vsphere plugin on jumpbox:
Download from https://<supervisor-api-ip> → 'Download CLI Tools' link.
Authenticate:
kubectl vsphere login --server=<supervisor-api-ip> --vsphere-username=administrator@vsphere.local --insecure-skip-tls-verify
Enter password when prompted.
Verify:
kubectl get namespaces
kubectl config use-context dev-team
kubectl get resourcequotas
Validation Gate
Check: kubectl get nodes --context=dev-team
Expected: Shows Supervisor control plane nodes in Ready state
Final Validation
HAProxy deployed, Supervisor enabled on VVF cluster with vDS networking, namespace created, kubectl authenticated.
✓ HAProxy Data Plane API responds on port 5556 → Valid JSON response
✓ Workload Management → Supervisors shows 'Running' (green) → 3 control plane VMs running
✓ kubectl vsphere login succeeds and namespace 'dev-team' accessible → kubectl get resourcequotas shows CPU/memory/storage limits
Cleanup / Restore
Snapshot: post-supervisor-enabled
• Take snapshot 'post-supervisor-enabled' for VM Service and VKS labs
Design Reflection (VCDX)
Panelist: Why choose vDS networking over NSX for Supervisor? What are the limitations? How does HAProxy compare to NSX ALB for load balancing? What's your namespace isolation strategy for multi-tenant environments?
Requirements
- Kubernetes control plane on VVF cluster
- Developer self-service via kubectl
- Network isolation between namespaces
- Persistent storage for stateful workloads
Constraints
- No NSX — limited to vDS L2 networking, no micro-segmentation
- HAProxy single point of failure unless HA pair configured
- Supervisor control plane consumes ~12 vCPU, 48GB RAM
- VVF licensing limits advanced Supervisor features
Assumptions
- Developers have kubectl experience
- DNS configured for Supervisor API endpoint
- Sufficient cluster resources after Supervisor overhead
Risks
- HAProxy failure = Kubernetes API unavailable
- Namespace resource quotas not enforced if not set
- vDS networking limits network policies to basic VLAN isolation
- Control plane VM sprawl if multiple Supervisors enabled
Self-Assessment Discussion Prompts
- What's the HA story for Supervisor control plane? What happens if one of the 3 VMs fails?
- How would you migrate from vDS-based Supervisor to NSX-based when upgrading VVF to VCF?
- What namespace resource quota strategy prevents one team from starving others?
References
- vSphere with Tanzu Configuration Guide (vDS Networking)Tier 1 — Official
- HAProxy for vSphere with TanzuTier 2 — VMware Press
- Supervisor Namespace ConfigurationTier 1 — Official