~90 min read · updated 2026-05-18

ACI Morpheus setup lab

Build an APIC workload policy model, then prove the same VLAN and EPG intent with HPE Morpheus VM Essentials and nested KVM.

This lab is the bridge between APIC policy modeling and a real virtualization workflow.

Cisco APIC gives you the ACI policy classroom: tenants, VRFs, bridge domains, EPGs, access policies, static path bindings, contracts, faults, and object relationships. HPE Morpheus VM Essentials gives you the VM lifecycle side: images, clusters, KVM hosts, OVS bridges, VLAN port groups, cloud-init, and workload reachability.

The important boundary is this:

APIC models the ACI policy.
HPE VME, KVM, and OVS carry the packets.

Do not expect APIC in this lab to enforce traffic. Use it to learn and document the ACI intent, then prove the matching network behavior in Morpheus and KVM.

The lab slug is:

aci-morpheus-setup-lab

Final topology

What we built

LayerFinal state
APIChttps://aci-sim.v7.comptech-lab.com/
ACI backend30.30.119.10
ACI tenantlab-morpheus
ACI VRFmorpheus-vrf
ACI app profilemorpheus-kvm-app
ACI access pathleaf 101, interface eth1/49
HPE VME managerhttps://hpe-vme.v7.comptech-lab.com/
Manager backend30.30.119.23
HPE groupHPE VME Greenfield
HPE cloudHPE VME Cloud
HPE clusterhpe-vme-hci-01
HVM hostshpe-vme-hvm-01, hpe-vme-hvm-02, hpe-vme-hvm-03
Management OVS bridgemgmt
Compute OVS bridgecmpt
Final test VMubuntu-vlan1191-web-06
Test VM IP10.119.91.15/24

Credentials, API tokens, APIC cookies, bearer tokens, passwords, and generated keys stay in the private secret store. Never paste them into the blog or into Git.

Network plan

Use two network classes.

HPE VME networkBridgePurpose
Management / network-11OVS mgmtManager access, dashboards, SSH, edge-published services
Compute / network-1OVS cmptBase workload bridge
Compute VLAN 1191-1199 / network-2 through network-10OVS cmpt port groupsSegmented lab workload zones

The management network uses the lab underlay:

30.30.0.0/16
gateway 30.30.0.1
reserved lab range 30.30.119.1-30.30.119.250

The compute VLANs carry the ACI vocabulary.

VLANACI EPGSuggested subnetRole
1191web10.119.91.0/24Web / DMZ workloads
1192app10.119.92.0/24Application tier
1193db10.119.93.0/24Database tier
1194shared-services10.119.94.0/24DNS, NTP, shared tools
1195security-tools10.119.95.0/24SIEM, scanners, sensors
1196targets10.119.96.0/24Vulnerable lab targets
1197attacker10.119.97.0/24Kali and offensive tooling
1198transit10.119.98.0/24Firewall or routing handoff
1199quarantine10.119.99.0/24Isolation and containment

Step 1: Start with the fabric boundary

Before building anything, write the boundary down.

In this lab:

  • APIC is the authoritative policy model.
  • Morpheus is the authoritative VM lifecycle manager.
  • OVS is the live switching layer for nested workloads.
  • HAProxy and PowerDNS publish dashboards.
  • APIC in this lab does not forward or enforce packets.

This keeps the learning clean. When you create an EPG named web in APIC, you also create a Morpheus network named Compute VLAN 1191 and test a VM on VLAN 1191.

Step 2: Confirm the lab endpoints

Confirm the two UI endpoints first.

APIC:          https://aci-sim.v7.comptech-lab.com/
HPE VME:       https://hpe-vme.v7.comptech-lab.com/

The backend addresses in this lab are:

APIC backend:    30.30.119.10
HPE VME manager: 30.30.119.23

At this point you are only proving that the dashboards are reachable through the shared edge. Do not expose every lab VM directly to the public side. Publish dashboards through HAProxy, and keep attacker/target paths inside compute VLANs.

Step 3: Bring up the APIC fabric model

In APIC, import or register the fabric nodes, then confirm the basic inventory.

Final fabric state for this lab:

NodeNameRoleState
101leaf1leafactive
102leaf2leafactive
103spine1spineactive

The access-policy examples in this guide use leaf 101, interface eth1/49.

Step 4: Build the ACI policy model

Create the tenant and VRF:

ObjectName
Tenantlab-morpheus
VRFmorpheus-vrf
App profilemorpheus-kvm-app

Create one bridge domain and EPG per workload VLAN.

EPGVLANBridge domainSubnet
web1191bd-vlan-1191-web10.119.91.1/24
app1192bd-vlan-1192-app10.119.92.1/24
db1193bd-vlan-1193-db10.119.93.1/24
shared-services1194bd-vlan-1194-shared-services10.119.94.1/24
security-tools1195bd-vlan-1195-security-tools10.119.95.1/24
targets1196bd-vlan-1196-targets10.119.96.1/24
attacker1197bd-vlan-1197-attacker10.119.97.1/24
transit1198bd-vlan-1198-transit10.119.98.1/24
quarantine1199bd-vlan-1199-quarantine10.119.99.1/24

The subnets are APIC policy-model subnets. They document what the real gateway plan should look like later.

Step 5: Build the ACI access-policy chain

The useful ACI lesson is the access-policy chain. Build it in this order:

  1. VLAN pool: morpheus-kvm-vlan-pool
  2. Static VLAN range: 1191-1199
  3. Physical domain: morpheus-kvm-phys
  4. AEP: morpheus-kvm-aep
  5. Access port policy group: morpheus-kvm-trunk-pg
  6. Leaf switch profile: morpheus-kvm-leaf101-swprof
  7. Leaf selector: morpheus-kvm-leaf101, node 101
  8. Leaf interface profile: morpheus-kvm-leaf101-ifprof
  9. Interface selector: morpheus-kvm-eth1-49, port eth1/49
  10. Static path bindings from each EPG to topology/pod-1/paths-101/pathep-[eth1/49]

The final state had all 9 EPGs statically bound to leaf 101, eth1/49, with zero tenant faults.

For learning, trace this chain in the APIC GUI:

leaf switch profile
  -> leaf interface profile
  -> interface selector
  -> policy group
  -> AEP
  -> physical domain
  -> VLAN pool
  -> static EPG path binding

That chain is one of the most important ACI mental models.

Step 6: Prepare Morpheus and the HVM cluster

In HPE VM Essentials, the lab uses:

ObjectValue
GroupHPE VME Greenfield
CloudHPE VME Cloud
Clusterhpe-vme-hci-01
HVM host 1hpe-vme-hvm-01, 30.30.119.20
HVM host 2hpe-vme-hvm-02, 30.30.119.21
HVM host 3hpe-vme-hvm-03, 30.30.119.22
Managerhpe-vme-manager, 30.30.119.23

The HVM hosts use three traffic classes:

Host NIC roleExample interfacePurpose
Managementens3 into OVS mgmtManager, host control, dashboard reachability
Computeens4 into OVS cmptWorkload VLANs
Storageens5HCI/storage traffic

The HPE VME network inventory should show:

Morpheus networkAPI nameBridgePurpose
Managementnetwork-11mgmtManagement NICs
Computenetwork-1cmptUntagged compute base
Compute VLAN 1191network-2cmptweb EPG
Compute VLAN 1192network-3cmptapp EPG
Compute VLAN 1193network-4cmptdb EPG
Compute VLAN 1194network-5cmptshared-services EPG
Compute VLAN 1195network-6cmptsecurity-tools EPG
Compute VLAN 1196network-7cmpttargets EPG
Compute VLAN 1197network-8cmptattacker EPG
Compute VLAN 1198network-9cmpttransit EPG
Compute VLAN 1199network-10cmptquarantine EPG

Step 7: Configure the first compute VLAN

For the completed smoke test, only VLAN 1191 needed live L3 reachability.

Set Morpheus network Compute VLAN 1191 like this:

CIDR:    10.119.91.0/24
Gateway: 10.119.91.254
DNS:     8.8.8.8
Bridge:  cmpt
VLAN:    1191

Then make the HVM host act as the lab gateway for this nested test VLAN:

hpe-vme-hvm-01:
  OVS bridge: cmpt
  OVS port:   v1191gw
  VLAN tag:   1191
  IP:         10.119.91.254/24
  NAT:        10.119.91.0/24 out mgmt

Add a manager route so Morpheus can reach the guest:

hpe-vme-manager:
  10.119.91.0/24 via 30.30.119.20

In this lab, those settings are persisted by systemd:

HostServicePurpose
hpe-vme-hvm-01security-lab-vlan1191-gateway.serviceRecreates v1191gw, forwarding, and NAT
hpe-vme-managersecurity-lab-vlan1191-route.serviceRecreates the manager route to VLAN 1191

For a production ACI design, do not use this host NAT pattern as the final answer. Put the gateway, firewall, or L3Out design in the real network architecture.

Step 8: Import a usable Linux image

CirrOS is useful for quick boot smoke tests, but it was not enough for this lab because it did not apply the intended Morpheus static IP and left Morpheus waiting for network finalization.

Use an Ubuntu cloud image for the actual Morpheus validation.

Final image:

FieldValue
ImageUbuntu 24.04 Noble cloud image
Morpheus virtual image ID206
Image typeQCOW2
Cloud-initenabled
SSH usernameubuntu

The lab also exposed a Morpheus image-cache UUID mismatch during local datastore clone operations. The workaround used during the lab was temporary and was removed after deployment. For real deployment, validate image import and clone behavior cleanly, or open a vendor case before relying on the platform.

Step 9: Provision the VLAN 1191 test VM

Create a small Ubuntu VM in Morpheus.

FieldValue
Instance nameubuntu-vlan1191-web-06
LayoutUbuntu 24.04 QCOW
Plankvm-vm-1024
Imagevirtual image ID 206
HVM hosthpe-vme-hvm-01
Datastorelocal datastore ID 1
NetworkCompute VLAN 1191 / network-2
Static IP10.119.91.15

When the VM boots, it should attach to:

libvirt network: Compute
port group:      Compute VLAN 1191
OVS bridge:      cmpt
VLAN tag:        1191

Step 10: Verify from Morpheus

The final Morpheus state:

CheckResult
Instance ID21
Server ID28
Instance statusrunning
Server statusprovisioned
Power stateon
Provision process49, complete
Post-provision process52, complete
Guest IP10.119.91.15

Morpheus still reported the guest agent as disconnected in this lab, but provisioning completed and the VM was reachable. That is good enough for this lab wrap-up; for production, guest agent installation should be fixed and monitored.

Step 11: Verify from the HVM host

On hpe-vme-hvm-01, verify that the VM is running:

sudo virsh list --all | grep ubuntu-vlan1191

Expected result:

ubuntu-vlan1191-web-06     running

Verify the NIC binding:

sudo virsh domiflist ubuntu-vlan1191-web-06
sudo virsh dumpxml ubuntu-vlan1191-web-06 | grep -A10 -B2 -E 'interface|vlan|source network|target dev'

Expected values:

source network='Compute'
portgroup='Compute VLAN 1191'
bridge='cmpt'
tag id='1191'
target dev='vnet6'

Verify OVS:

sudo ovs-vsctl list port vnet6 | grep -E 'name|tag|interfaces'
sudo ovs-vsctl list port v1191gw | grep -E 'name|tag|interfaces'

Both ports should show VLAN tag 1191.

Verify host reachability:

ping -c 3 10.119.91.15

Final lab result: 3/3 replies.

Step 12: Verify from the manager

On the manager VM, verify the route:

ip route show 10.119.91.0/24

Expected result:

10.119.91.0/24 via 30.30.119.20 dev eth0

Verify reachability:

ping -c 3 10.119.91.15
nc -vz -w 3 10.119.91.15 22

Final lab result:

ping: 3/3 replies
tcp/22: succeeded

Step 13: Preserve the working path

The lab is wrapped up only after the live path survives service restarts.

Confirm the HVM service:

sudo systemctl is-enabled security-lab-vlan1191-gateway.service
sudo systemctl is-active security-lab-vlan1191-gateway.service

Confirm the manager service:

systemctl is-enabled security-lab-vlan1191-route.service
systemctl is-active security-lab-vlan1191-route.service

Final result:

security-lab-vlan1191-gateway.service: enabled, active
security-lab-vlan1191-route.service: enabled, active

Both services were restarted after installation, and the VM ping and SSH-port checks still passed.

Troubleshooting notes

The lab taught a few practical lessons.

ProblemWhat happenedLesson
License and first-run setupCloud and cluster workflows were blocked until the manager had a valid license and setup stateFinish appliance setup before adding HVM cluster objects
HVM cluster terminologyThe host workflow is HVM cluster, not just adding a generic cloudUse the HVM cluster path in VME
CirrOS smoke testCirrOS booted and had outside access, but ignored the intended static IPUse Ubuntu cloud image for Morpheus finalization tests
Image clone mismatchMorpheus generated a missing source UUID path for qemu-imgTreat this as a lab workaround only; validate properly before production
APIC boundaryAPIC policy looked correct, but no real ACI dataplane existedAPIC is the policy classroom here; traffic forwarding happens in OVS/HPE or real ACI hardware
Host NATNAT made VLAN 1191 usable in the nested labReplace with real gateway/firewall/L3Out design for production

Production handoff checklist

Before turning this into a real deployment, close these gaps.

  • Replace host NAT with a real routing design.
  • Replace the lab-only single-replica Ceph behavior with a supported storage design.
  • Replace dummy fencing with real fencing.
  • Validate image import and clone behavior without local wrappers.
  • Validate guest agent installation and reporting.
  • Confirm physical trunks from HVM hosts to ACI leaves.
  • Confirm ACI access policy against the real leaf/interface paths.
  • Confirm the gateway location for each BD or subnet.
  • Confirm contracts between web, app, db, security-tools, attacker, and quarantine.
  • Test host reboot, manager reboot, VM restart, and VM redeploy.
  • Backup the manager, ACI config, HVM host config, and image library.

What this lab proves

At the end of this lab, you have proved:

  • APIC can hold a clean ACI-style policy model for a Morpheus/KVM lab.
  • The policy model has a real naming match in Morpheus networks.
  • HPE VME can deploy a VM onto an OVS-backed VLAN port group.
  • VLAN 1191 maps cleanly to EPG web.
  • ubuntu-vlan1191-web-06 is reachable at 10.119.91.15.
  • The live path is persistent through systemd services.
  • The gap between APIC policy and real dataplane behavior is understood.

That is the real lesson: use the same vocabulary across APIC, Morpheus, and KVM, but always know which system is modeling policy and which system is forwarding packets.