Skip to content
Back to skills

Cisco Aci

ASecurity

Expert coverage of Cisco ACI across all versions: APIC, OpFlex, policy model (tenant/VRF/BD/EPG/contract), spine-leaf fabric, L3Out, service graphs, Multi-Site NDO, and fabric troubleshooting. Use for \"Cisco ACI\", \"APIC\", \"OpFlex\", \"EPG\", \"contract\", \"bridge domain\", \"L3Out\", \"service graph\", \"Nexus Dashboard Orchestrator\", \"ACI fabric\". Do NOT use for cross-vendor comparison, platform selection, or category-wide architecture -- use the `dc-fabric` skill.

  • 4 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 24, 2026
devopspythongonodeawsazureterraformdebugginggitapifrontend

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 4 files and shows the line behind each finding

Scanned September 24, 2026

npx -y skills add chrishuffman5/domain-expert --skill cisco-aci --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Cisco Aci?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Cisco Aci
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/chrishuffman5-cisco-aci/badge)](https://www.skillsdirectory.com/skills/chrishuffman5-cisco-aci)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: cisco-aci
description: "Expert coverage of Cisco ACI across all versions: APIC, OpFlex, policy model (tenant/VRF/BD/EPG/contract), spine-leaf fabric, L3Out, service graphs, Multi-Site NDO, and fabric troubleshooting. Use for \"Cisco ACI\", \"APIC\", \"OpFlex\", \"EPG\", \"contract\", \"bridge domain\", \"L3Out\", \"service graph\", \"Nexus Dashboard Orchestrator\", \"ACI fabric\". Do NOT use for cross-vendor comparison, platform selection, or category-wide architecture -- use the `dc-fabric` skill."
license: MIT
---

# Cisco ACI

This skill covers Cisco Application Centric Infrastructure (ACI) across all supported versions. Areas of expertise include:

- APIC cluster management and fabric discovery
- OpFlex declarative southbound protocol
- ACI policy model: tenants, VRFs, bridge domains, EPGs, contracts, filters, L3Outs
- Spine-leaf CLOS fabric on Nexus 9000 in ACI mode
- Service graphs for L4-L7 service insertion (firewall, load balancer)
- Multi-Pod and Multi-Site with Nexus Dashboard Orchestrator (NDO)
- Cloud ACI for AWS and Azure
- Micro-segmentation with uSeg EPGs
- Fabric troubleshooting: health scores, faults, ELAM, contract hit counts
- REST API, moquery, Cobra SDK, Terraform ACI provider, Ansible

When a question is version-specific, consult the matching `references/versions/` file. When the version is unknown, provide general guidance and note where behavior differs.

## How to Approach Tasks

1. **Classify** the request:
   - **Troubleshooting** -- Load `references/diagnostics.md` for fault analysis, ELAM, contract debugging
   - **Policy design** -- Apply EPG/contract model guidance below
   - **Architecture** -- Load `references/architecture.md` for APIC, fabric topology, OpFlex, policy model
   - **Multi-site** -- Apply NDO/Multi-Pod/Multi-Site guidance below
   - **Automation** -- Apply REST API, moquery, Cobra SDK, or Terraform guidance

2. **Identify version** -- Determine which APIC version. If unclear, ask. Version matters for feature availability (ESGs require 6.0+, Cloud ACI requires 5.0+).

3. **Load context** -- Read the relevant reference file for deep knowledge.

4. **Analyze** -- Apply ACI-specific reasoning, not generic networking advice. ACI's policy model is fundamentally different from traditional networking.

5. **Recommend** -- Provide actionable guidance with GUI paths, REST API calls, or moquery examples.

6. **Verify** -- Suggest validation steps (health scores, contract hit counts, endpoint learning checks).

## Core Architecture

### APIC Cluster

The APIC is the centralized management, policy, and automation engine:
- **Deployment**: Minimum 3 physical or virtual APICs (odd number for quorum)
- **Production**: 3 physical APICs in separate availability zones; up to 9 for scale
- **Not in data path**: APIC distributes policies via OpFlex; fabric switches enforce locally
- **Resilience**: If all APICs go offline, existing policies continue to be enforced by switches
- **Functions**: Policy repository, REST API, GUI/CLI, fabric discovery, health monitoring, firmware management

### OpFlex Protocol

Declarative southbound protocol between APIC and fabric nodes:
- JSON-RPC over TCP
- Intent-based: APIC declares desired state; nodes implement locally
- Decentralized enforcement: each node processes its policy copy independently
- Nodes pull policies and report state back to APIC
- Also used by ACI Virtual Edge and Virtual Pod

### Spine-Leaf Fabric

Two-tier CLOS topology on Nexus 9000 series in ACI mode:
- **Leaf switches**: Connect servers, storage, service appliances, external networks. Policy enforcement points.
- **Spine switches**: Backbone interconnect. Carry VXLAN-encapsulated traffic. Run IS-IS underlay. No endpoint connections.
- Every leaf connects to every spine; no direct leaf-to-leaf or spine-to-spine links
- Fabric discovery is automated: switches register to APIC on boot via LLDP/IS-IS

**Supported platforms:**
- Nexus 9300-FX/EX/GX leaf series (1/10/25/100 GbE access)
- Nexus 9500 modular spine series (100/400 GbE backbone)
- Nexus 9336C-FX2 (dual-role: leaf or spine in smaller fabrics)

### ACI Mode vs NX-OS Standalone

Nexus 9000 runs in one of two mutually exclusive modes:
- **ACI mode**: Managed by APIC. No direct CLI configuration. Read-only diagnostics only.
- **NX-OS standalone mode**: Traditional CLI-driven. Full NX-OS feature set.
- Cannot mix modes within a single fabric. Switching modes requires a full wipe.

## Policy Model

### Hierarchy

```
Tenant
  VRF (L3 routing domain)
    Bridge Domain (L2 forwarding domain)
      Subnet(s)
      EPG (Endpoint Group)
        Endpoints (physical, virtual, container)
  Application Profile
    EPG
  Contract
    Subject
      Filter (L3/L4 match)
  L3Out (External Routed Network)
    External EPG
```

### Tenants

Top-level administrative container providing namespace isolation:
- **common**: Shared objects accessible by all tenants (shared L3Outs, contracts)
- **infra**: Fabric infrastructure (access policies, VLAN pools, domains)
- **mgmt**: Management network (in-band and out-of-band)
- Custom tenants for application/business isolation

### VRFs

Layer-3 routing domain within a tenant:
- Isolated routing table per VRF
- Multiple VRFs per tenant supported
- Inter-VRF communication requires shared contracts or L3Out route leaking
- VRF policy enforcement: ingress (recommended) or egress

### Bridge Domains

Layer-2 forwarding domain replacing traditional VLANs:
- Subnets defined on the BD (not on interfaces)
- One BD belongs to exactly one VRF
- BD settings control: ARP flooding, unicast routing, unknown unicast handling, L2/L3 forwarding modes
- Multiple subnets per BD supported (secondary IPs)
- **Hardware proxy mode** (recommended): Unknown unicast sent to spine proxy, not flooded

### EPGs (Endpoint Groups)

Core policy construct -- logical grouping of endpoints sharing the same security and forwarding policies:
- Endpoints classified by: static port binding, VLAN, VMM integration (vCenter, SCVMM), or container CNI
- EPGs belong to an Application Profile within a Tenant
- **Communication between EPGs is denied by default** -- whitelisting via contracts is required
- An EPG can span multiple leaf switches and even multiple sites (via NDO)

### Contracts

Define permitted communication between EPGs:
- **Filter**: L3/L4 match criteria (protocol, source/destination port)
- **Subject**: Groups filters; specifies directionality and QoS
- **Contract**: Groups subjects; applied between provider EPG and consumer EPG
- **Provider**: EPG offering a service
- **Consumer**: EPG accessing the service
- **vzAny**: Apply a contract to all EPGs in a VRF (simplifies shared services)
- **Preferred Group**: EPGs in a preferred group communicate freely without contracts; only non-preferred EPGs require explicit contracts

### L3Outs

Connect ACI fabric to external Layer-3 networks:
- Logical interface + external routing protocol (OSPF, BGP, EIGRP, static)
- External EPG (ExtEPG) classifies external subnets for policy
- Contracts between fabric EPGs and ExtEPGs control external access
- VRF-Lite for multi-VRF external connectivity
- BGP multi-hop support (APIC 6.1+)

### Service Graphs

Insert L4-L7 service appliances (firewalls, load balancers) in the traffic path between EPGs:
- **Function nodes**: Go-Through (transparent) or Go-To (routed)
- **Device clusters**: Physical or virtual appliance pools (ASA, F5, Palo Alto)
- **Managed mode**: APIC configures the appliance via device package
- **Unmanaged mode**: Appliance configured independently; ACI handles stitching only
- **PBR (Policy-Based Redirect)**: Steers traffic to service appliances at the leaf level

## Multi-Site Architecture

### Multi-Pod

- Single APIC cluster across geographically separated pods
- Inter-Pod Network (IPN) runs OSPF + PIM/BGP
- Single administrative domain with consistent policy
- Use case: adjacent buildings or campus-scale DC

### Multi-Site (NDO)

- Separate APIC clusters per site; centrally orchestrated by Nexus Dashboard Orchestrator
- Inter-site VXLAN overlay using BGP EVPN on Inter-Site Network (ISN)
- Stretched schemas push EPGs, BDs, VRFs, and contracts to multiple sites
- Independent failure domains per site
- Supports ACI on-premises, Cloud ACI (AWS/Azure), and NDFC sites

### Cloud ACI

- **AWS**: Cloud APIC as EC2 instance; VPCs mapped to ACI tenants; security groups managed via policy
- **Azure**: Cloud APIC as VM; VNets mapped to ACI tenants; NSGs managed via policy
- Cisco Catalyst 8000V cloud router for inter-site IPsec connectivity
- NDO provides unified policy across on-prem + cloud

## Automation

### REST API

```
Base URL: https://<apic>/api/

# Login
POST /api/aaaLogin.json
Body: {"aaaUser":{"attributes":{"name":"admin","pwd":"password"}}}

# Query all tenants
GET /api/node/class/fvTenant.json

# Query specific tenant
GET /api/node/mo/uni/tn-Production.json?rsp-subtree=full

# Create an EPG
POST /api/node/mo/uni/tn-Production/ap-WebApp/epg-FrontEnd.json
Body: {"fvAEPg":{"attributes":{"name":"FrontEnd"}}}
```

### moquery (CLI Object Query)

```
moquery -c fvTenant                              # List all tenants
moquery -c fvAEPg                                # List all EPGs
moquery -c fvCEp -f 'fv.CEp.ip=="10.1.1.5"'     # Find endpoint by IP
moquery -c vzFilter                              # List all filters
moquery -c faultInst -f 'fault.Inst.severity=="critical"'  # Critical faults
```

### Cobra SDK (Python)

```python
from cobra.mit.access import MoDirectory
from cobra.mit.session import LoginSession
from cobra.model.fv import Tenant, Ctx, BD, Ap, AEPg

ls = LoginSession('https://apic', 'admin', 'password')
md = MoDirectory(ls)
md.login()

# Query
tenants = md.lookupByClass('fvTenant')
for t in tenants:
    print(t.name)
```

### Terraform

```hcl
provider "aci" {
  username = "admin"
  password = var.apic_password
  url      = "https://apic.example.com"
}

resource "aci_tenant" "prod" {
  name = "Production"
}

resource "aci_vrf" "main" {
  tenant_dn = aci_tenant.prod.id
  name      = "Main-VRF"
}
```

## Common Pitfalls

1. **Forgetting that inter-EPG traffic is denied by default** -- New ACI operators expect connectivity after creating EPGs. Contracts must be explicitly configured between provider and consumer EPGs. Use `vzAny` for shared services like DNS/NTP.

2. **BD flooding mode vs hardware proxy** -- Hardware proxy (recommended) reduces broadcast but requires proper endpoint learning. Flooding mode works like a traditional VLAN but wastes fabric bandwidth. Default is hardware proxy in recent versions.

3. **L3Out route leaking without contracts** -- Even with correct routing, traffic between external networks and fabric EPGs requires contracts on the External EPG. Missing contracts result in silent drops.

4. **Service graph PBR misconfigurations** -- PBR requires correct consumer/provider bridge domain configuration, health check policies for the service appliance, and proper IP addressing on the service device. The most common issue is a misconfigured health check that marks the service device as down.

5. **Multi-Site schema conflicts** -- When stretching objects via NDO, local APIC modifications to stretched objects can cause schema drift. Always make changes for stretched objects through NDO, not directly on APIC.

6. **Endpoint learning issues** -- Rogue endpoint detection can mark legitimate endpoints as rogue during VM migrations. Tune rogue EP parameters for environments with frequent vMotion.

7. **VLAN pool exhaustion** -- ACI allocates VLANs from pools configured in access policies. If the pool range is too small, EPG deployment fails silently. Monitor VLAN pool utilization.

## Version-Specific Guidance

| Version | Reference | What's version-specific |
|---|---|---|
| 6.1 | `references/versions/6.1.md` | Endpoint Security Groups (ESGs), enhanced inter-VRF shared services, BGP multi-hop L3Out, streaming telemetry |

## Reference Files

Load these when you need deep knowledge:

- `references/architecture.md` -- APIC internals, OpFlex, policy model details, fabric discovery, access policies, VMM integration. Read for "how does X work" questions.
- `references/diagnostics.md` -- Faults, health scores, ELAM, contract hit counts, endpoint reachability, Central CLI. Read when troubleshooting.

Files in this skill

  • SKILL.md12.1 KB
  • references/architecture.md7 KB
  • references/diagnostics.md8.3 KB
  • references/versions/6.1.md6.7 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…