สำหรับผู้ดูแลระบบเครือข่ายที่คุ้นเคยกับ Switch แบบเดิม การเพิ่ม VLAN เป็นงานง่าย สร้าง VLAN แล้วกำหนดให้ Port เป็น Access หรือ Trunk ก็ใช้งานได้ทันที แต่เมื่อย้ายมาใช้ Cisco ACI (Application Centric Infrastructure) หลายคนพบว่าการเพิ่ม VLAN เพียงหนึ่ง VLAN ต้องสร้าง Object หลายชิ้นต่อกันเป็นลำดับ และถ้าผูกผิดหรือขาดไปเพียงจุดเดียว VLAN จะไม่ถูก Deploy ลง Port โดยไม่มีข้อความแจ้งให้เห็นชัด ๆ นอกจาก Fault ใน APIC
สาเหตุคือ ACI ไม่ได้มอง VLAN แบบเดียวกับ Switch ทั่วไป ACI แยกการตั้งค่าฝั่ง Physical (Port ไหนใช้ VLAN ช่วงไหนได้) ออกจากฝั่ง Logical (VLAN นั้นเป็นของเครือข่ายหรือกลุ่มอุปกรณ์ใด) ถ้าเข้าใจแนวคิดนี้ก่อน ขั้นตอนที่ดูเยอะจะเป็นเหตุเป็นผลและแก้ปัญหาได้ตรงจุด
บทความนี้สรุปจากประสบการณ์ติดตั้งจริง เริ่มจากการอธิบายว่า ACI มอง VLAN อย่างไรและ EPG คืออะไร จากนั้นไล่ขั้นตอนตั้งแต่การสร้าง VLAN Pool จนถึงการ Deploy EPG ลง Port พร้อมวิธีตรวจสอบและปัญหาที่พบบ่อย
1. ACI มอง VLAN ต่างจาก Switch ปกติอย่างไร
บน Switch แบบเดิม VLAN คือตัวกำหนดทุกอย่าง ทั้ง Broadcast Domain, Subnet และขอบเขตการสื่อสาร อุปกรณ์ที่อยู่ VLAN เดียวกันสื่อสารกันได้ทันที ส่วนการสื่อสารข้าม VLAN ต้องผ่าน Router หรือ Layer 3 Switch และควบคุมด้วย ACL
บน Cisco ACI หน้าที่เหล่านี้ถูกแยกออกเป็น Object แต่ละตัว
- VLAN เป็นแค่ Encapsulation บนสาย ใช้บอกว่า Traffic ที่เข้ามาที่ Port นั้นเป็นของกลุ่มใด เรียกว่า Encap VLAN (เช่น vlan-100)
- ภายใน Fabric ไม่ได้ใช้ VLAN ในการส่งข้อมูล Traffic ระหว่าง Leaf และ Spine ถูกห่อด้วย VXLAN ดังนั้น VLAN ID มีความหมายเฉพาะที่ขอบของ Fabric (Leaf กับอุปกรณ์ปลายทาง) เท่านั้น
- Leaf แปลง Encap VLAN เป็น VLAN ภายในของตัวเอง เช่น Encap VLAN 100 อาจถูกใช้เป็น VLAN 23 ภายใน Leaf ตรวจสอบได้ด้วยคำสั่ง
show vlan encap-id 100บน Leaf - Broadcast Domain และ Subnet อยู่ที่ Bridge Domain (BD) ไม่ได้อยู่ที่ VLAN
- การอนุญาตให้สื่อสารกันอยู่ที่ Contract ไม่ใช่ ACL บน Interface
ตัวอย่างผลจากคำสั่งบน Leaf :
LEAF101# show vlan encap-id 100
VLAN Name Status Ports
---- ----------------------------------- --------- -------------------
23 Tenant-A:AP-Server:EPG_VLAN100 active Eth1/10, Eth1/11
ผลนี้แสดงว่า Encap VLAN 100 ที่เข้ามาทาง Port Eth1/10 และ Eth1/11 ถูกจัดเป็น EPG ชื่อ EPG_VLAN100 ภายใต้ Tenant-A และใช้ VLAN 23 เป็น VLAN ภายใน Leaf
2. EPG คืออะไร
EPG (Endpoint Group) คือกลุ่มของ Endpoint (Server, VM, Storage หรืออุปกรณ์ใด ๆ) ที่ใช้ Policy เดียวกัน เป็นหัวใจของ ACI เพราะ Policy ทุกอย่าง เช่น การอนุญาตให้สื่อสาร ถูกกำหนดระหว่าง EPG ไม่ใช่ระหว่าง IP หรือ VLAN
ความสัมพันธ์ระหว่าง Object หลักเป็นดังนี้
- EPG อยู่ภายใต้ Application Profile และต้องผูกกับ Bridge Domain 1 ตัวเสมอ
- Bridge Domain ทำหน้าที่เป็น Layer 2 Domain และเก็บ Subnet / Gateway และต้องผูกกับ VRF 1 ตัว
- VRF คือ Routing Table ของ Tenant
- Endpoint ใน EPG เดียวกัน สื่อสารกันได้โดยไม่ต้องใช้ Contract (ค่า Default)
- Endpoint ต่าง EPG กัน สื่อสารกันได้ก็ต่อเมื่อมี Contract อนุญาต แม้จะอยู่ใน Bridge Domain และ Subnet เดียวกัน ถ้า VRF ตั้งค่า Policy Control Enforcement เป็น Enforced ซึ่งเป็นค่า Default
การ Deploy VLAN บน ACI จึงหมายถึงการบอก Leaf ว่า “Traffic ที่เข้ามาทาง Port นี้ด้วย VLAN นี้ ให้จัดเป็นสมาชิกของ EPG นี้” ซึ่งก็คือการทำ Static Port
ในการย้ายระบบจากเครือข่ายเดิมมาที่ ACI นิยมใช้แนวทาง Network-Centric คือ 1 VLAN : 1 EPG : 1 BD เพื่อให้โครงสร้างเทียบกับเครือข่ายเดิมได้ตรงตัวและดูแลง่าย แม้ BD 1 ตัวจะรองรับหลาย EPG ได้ก็ตาม
3. ภาพรวมขั้นตอน
การ Deploy VLAN แบ่งเป็น 2 ส่วนตามแนวคิดข้างต้น
ส่วนที่ 1 Fabric Access Policies (ฝั่ง Physical) กำหนดว่า Port ใดใช้ VLAN ช่วงใดได้
VLAN Pool → Physical Domain → AAEP → Interface Policy Group → Leaf Interface Profile → Leaf Switch Profile
ส่วนที่ 2 Tenant (ฝั่ง Logical) กำหนดว่า VLAN นั้นเป็นของ EPG ใด และ Deploy ลง Port ใด
Bridge Domain → Application Profile / EPG → ผูก Domain กับ EPG → Static Port → Contract
การแยก 2 ส่วนนี้ทำให้ผู้ดูแล Fabric เตรียม Port และช่วง VLAN ไว้ครั้งเดียว แล้วผู้ดูแลแต่ละ Tenant นำไปใช้ได้ภายในขอบเขตที่ได้รับอนุญาต และนำ Policy เดิมกลับมาใช้ซ้ำได้
ตัวอย่างในบทความนี้เพิ่ม VLAN 100 บน Port eth1/1 ของ Leaf Node 201 โดยใช้ชื่อ Object สมมติดังนี้
| Object | ชื่อตัวอย่าง |
|---|---|
| VLAN Pool | VLAN_POOL_SERVER (VLAN 100) |
| Physical Domain | PHY_DOM_SERVER |
| AAEP | AAEP_SERVER |
| Interface Policy Group | IPG_ACCESS_10G |
| Leaf Interface Profile | LIP_201 |
| Leaf Switch Profile | LEAF201 |
| Tenant / VRF | Tenant-A / VRF-A |
| Application Profile | AP-Server |
| Bridge Domain / EPG | BD_VLAN100 / EPG_VLAN100 |
4. ตั้งค่า Fabric Access Policies

4.1 สร้าง VLAN Pool
ไปที่ Fabric → Access Policies → Pools → VLAN แล้ว Create VLAN Pool

- เลือก Allocation Mode เป็น Static Allocation เพราะเราจะกำหนด VLAN ให้ Port เองผ่าน Static Port
- เพิ่ม Encap Block เป็น VLAN 100
- ถ้ามี VLAN Pool เดิมอยู่แล้ว เพิ่ม VLAN ใหม่ใน Encap Blocks ของ Pool เดิมได้เลย



4.2 สร้าง Physical Domain
ไปที่ Fabric → Access Policies → Physical and External Domains → Physical Domains สร้าง Domain แล้วเลือก VLAN Pool จากข้อ 4.1
- Physical Domain ใช้กับอุปกรณ์ที่ต่อเข้า Leaf โดยตรง เช่น Server แบบ Bare-metal, Storage หรือ Switch ภายนอก
- 1 Domain ผูกกับ VLAN Pool ได้เพียง 1 Pool
- Domain เป็นตัวกำหนดขอบเขตว่า EPG ใดใช้ VLAN ช่วงใดได้



4.3 สร้าง AAEP (Attachable Access Entity Profile)
ไปที่ Fabric → Access Policies → Policies → Global → Attachable Access Entity Profiles สร้าง AAEP แล้วเพิ่ม Physical Domain จากข้อ 4.2
AAEP เป็นตัวเชื่อมระหว่าง Port กับ Domain ทำให้ Port รู้ว่าใช้ VLAN ช่วงใดได้





4.4 สร้าง Interface Policy Group
ไปที่ Fabric → Access Policies → Interfaces → Leaf Interfaces → Policy Groups ซึ่งมี 3 แบบ
- Leaf Access Port: สำหรับ Port เดี่ยว ใช้ Policy Group เดียวกันกับหลาย Port ได้
- PC Interface: สำหรับ Port-Channel ต้องสร้าง 1 ชุดต่อ 1 Port-Channel
- vPC Interface: สำหรับ vPC ต้องสร้าง 1 ชุดต่อ 1 vPC

กำหนด Attached Entity Profile เป็น AAEP จากข้อ 4.3 และเลือก Link Level, CDP, LLDP (และ Port Channel Policy สำหรับ PC / vPC) ให้ตรงกับอุปกรณ์ปลายทาง

4.5 สร้าง Leaf Interface Profile
ไปที่ Fabric → Access Policies → Interfaces → Leaf Interfaces → Profiles สร้าง Profile (แนะนำให้แยก 1 Profile ต่อ 1 Leaf เช่น LIP_201) แล้วเพิ่ม Interface Selector ระบุ Port 1/10 และเลือก Interface Policy Group จากข้อ 4.4




4.6 สร้าง Leaf Switch Profile
ไปที่ Fabric → Access Policies → Switches → Leaf Switches → Profiles สร้าง Profile เลือก Node 201 ใน Leaf Selector แล้วผูกกับ Leaf Interface Profile จากข้อ 4.5
ถ้ามี Leaf Profile ของ Leaf นั้นอยู่แล้ว ให้ผูก Interface Profile เข้ากับ Profile เดิมแทน




เมื่อจบส่วนนี้ Port 1/1 ของ Leaf 201 พร้อมรับ VLAN 100 แล้ว แต่ยังไม่มี Traffic ใดใช้งานได้ จนกว่าจะกำหนดฝั่ง Tenant
5. Deploy VLAN ผ่าน Tenant
5.1 สร้าง Bridge Domain
ไปที่ Tenants → Tenant-A → Networking → Bridge Domains สร้าง BD แล้วเลือก VRF-A ค่าที่ตั้งขึ้นกับตำแหน่งของ Gateway


- Gateway อยู่ที่ ACI: เพิ่ม Subnet เป็น Gateway IP เช่น 192.168.100.1/24
- Gateway อยู่ที่อุปกรณ์ภายนอก (ACI ทำงานแบบ Layer 2): ไม่ต้องใส่ Subnet ปิด Unicast Routing ตั้ง L2 Unknown Unicast เป็น Flood และเปิด ARP Flooding เพื่อให้ ACI ทำงานเหมือน Layer 2 Switch ทั่วไป



5.2 สร้าง Application Profile และ EPG
ไปที่ Application Profiles สร้าง Application Profile (หรือใช้ของเดิม) แล้วสร้าง EPG_VLAN100 และผูกกับ BD_VLAN100




5.3 ผูก Physical Domain กับ EPG
ที่ EPG → Domains (VMs and Bare-Metals) คลิกขวาเลือก Add Physical Domain Association แล้วเลือก PHY_DOM_SERVER
ขั้นตอนนี้ลืมบ่อยที่สุด ถ้าไม่ผูก EPG จะใช้ VLAN จาก Pool ไม่ได้ และจะเกิด Fault เมื่อ Deploy Static Port


5.4 Deploy EPG ลง Port (Static Port)
คลิกขวาที่ EPG แล้วเลือก Deploy Static EPG on PC, VPC, or Interface จากนั้นกำหนดค่าดังนี้

| ช่อง | ค่าที่ต้องกำหนด |
|---|---|
| Path Type | Port, Direct Port Channel หรือ Virtual Port Channel |
| Path | Port ที่ต้องการ เช่น Node 101 / eth1/10 |
| Port Encap | vlan-100 (ต้องอยู่ใน VLAN Pool ของ Domain ที่ผูกกับ EPG) |
| Deployment Immediacy | Immediate หรือ On Demand |
| Mode | Trunk, Access (802.1P) หรือ Access (Untagged) |
ความหมายของ Mode
- Trunk: Traffic ส่งแบบมี VLAN Tag เหมือน Trunk Port ทั่วไป
- Access (Untagged): Traffic ส่งแบบไม่มี Tag เหมือน Access Port ทั่วไป
- Access (802.1P): ใช้กับอุปกรณ์ที่ส่ง Traffic แบบ Priority Tag (VLAN 0)
1 Port กำหนดแบบ Access (Untagged) หรือ Access (802.1P) ได้เพียง 1 EPG ส่วน EPG อื่นบน Port เดียวกันต้องเป็น Trunk
ความหมายของ Deployment Immediacy
- Immediate: Leaf ติดตั้ง Policy ของ EPG (เช่น Contract) ลงใน Hardware (Policy TCAM) ทันทีที่ Deploy เหมาะกับ Port ที่ต่ออุปกรณ์เครือข่ายหรือระบบที่ต้องใช้งานได้ทันที
- On Demand: Leaf ติดตั้ง Policy เมื่อมี Traffic ของ EPG เข้ามาครั้งแรก ช่วยประหยัดพื้นที่ TCAM เหมาะกับ Fabric ที่มี EPG จำนวนมาก


5.5 ผูก Contract
ACI ทำงานแบบ Allow-list คือไม่อนุญาตจนกว่าจะกำหนดให้อนุญาต EPG ใหม่จึงยังสื่อสารกับ EPG อื่นหรือเครือข่ายภายนอกไม่ได้ จนกว่าจะผูก Contract แบบ Provider / Consumer
- กฎนี้ใช้กับทุกคู่ ทั้ง EPG ↔ EPG, EPG ↔ External EPG (L3Out) และ External EPG ↔ External EPG
- ในช่วงย้ายระบบ อาจใช้ Contract แบบอนุญาตทั้งหมดไปก่อน แล้วค่อยกำหนด Filter ให้ละเอียดขึ้นภายหลัง


6. กรณีต้องการเพิ่มเฉพาะ Port หรือเฉพาะ VLAN
เมื่อวาง Policy หลักไว้แล้ว การเพิ่มครั้งถัดไปไม่ต้องทำทุกขั้นตอน
เพิ่ม Port ใหม่ (VLAN, Domain, AAEP, Policy Group, BD และ EPG มีอยู่แล้ว)
- ไปที่ Leaf Interface Profile เดิมของ Switch นั้น เพิ่ม Interface Selector ของ Port ใหม่ แล้วเลือก Interface Policy Group เดิม
- ไปที่ EPG แล้ว Deploy Static Port ลง Port ใหม่ (ข้อ 5.4)
เพิ่ม VLAN ใหม่บน Port ที่ตั้งค่า Access Policies ไว้แล้ว
- เพิ่ม VLAN ใน Encap Blocks ของ VLAN Pool เดิม
- ทำต่อตั้งแต่ข้อ 5.1 (สร้าง BD และ EPG ใหม่ แล้ว Deploy Static Port)
7. ตรวจสอบผลการ Deploy
ผ่าน APIC GUI
ไปที่ Fabric → Inventory → Pod 1 → เลือก Leaf → Interfaces → Physical Interfaces เลือก Port แล้วดูแท็บ Deployed EPGs จะเห็น EPG และ VLAN ที่ Deploy อยู่บน Port นั้น

ผ่าน CLI บน Leaf
show vlan encap-id 100 # VLAN ภายใน Leaf, ชื่อ EPG และ Port ที่ใช้ Encap VLAN นี้
show vlan extended # Mapping ระหว่าง VLAN ภายใน Leaf กับ Encap VLAN ทั้งหมด
show interface status # สถานะของทุก Port
show endpoint ip 192.168.100.10 # ตรวจว่า ACI เรียนรู้ Endpoint ที่ Port และ EPG ถูกต้องหรือไม่
8. ข้อควรระวังและปัญหาที่พบบ่อย
- Fault F0467 (Configuration failed): เกิดเมื่อ Deploy EPG ไม่สำเร็จ ดูสาเหตุได้จาก Description ของ Fault เช่น
- invalid-vlan: VLAN ไม่อยู่ใน VLAN Pool หรือยังไม่ผูก Domain กับ EPG
- invalid-path: Port ไม่มี Access Policies หรือ AAEP ไม่ได้ผูกกับ Domain
- encap-already-in-use: Encap VLAN นี้ถูก EPG อื่นใช้อยู่แล้วบน Leaf เดียวกัน
- Port เป็นสมาชิก Port-Channel / vPC อยู่แล้ว: ต้องเลือก Path Type เป็น Direct Port Channel หรือ Virtual Port Channel ไม่ใช่ Port เดี่ยว ไม่เช่นนั้นจะ Deploy ไม่สำเร็จ
- Deploy สำเร็จแต่ยังสื่อสารไม่ได้: ตรวจว่าผูก Contract แล้ว และตั้งค่า BD ตรงกับตำแหน่งของ Gateway (ข้อ 5.1)
- ก่อนแก้ไขบนระบบ Production: ควรสร้าง Snapshot ที่ Admin → Config Rollbacks ไว้ทุกครั้ง เพื่อย้อนกลับได้หากเกิดปัญหา
