Cisco ACI の Tenant を CLI で設定する
Cisco ACI は GUI や REST API など、様々な方法で設定することが出来ます。 今回は CLI で設定する方法をメモしておきます。 尚、実際の検証は 5.0(2h) で行いました。
設定モードへの移行方法¶
ACI 環境において、CLI であっても「設定は全て APIC で行う」というのは同じです。 CLI の設定モードへ移行するには APIC で configure terminal を実行します。
conf t では無く) configure でも同じく、設定モードへ移行することが可能です。
Tenant¶
Tenant の作成時、特に注意事項はありません。
VRF¶
VRF の作成時、特に注意事項はありません。
BD (Bridge Domain)¶
GUI と CLI でデフォルト値に以下の差があります。
| 項目 | GUI デフォルト値 | CLI デフォルト値 |
|---|---|---|
ARP Flooding |
enable |
disable |
その為、CLI から BD を作成する場合、必要に応じて arp flooding を設定しておきます。
尚、bridge-domain Bd1 で BD を作成すると必ず同時に interface bridge-domain Bd1 も定義されます。
# show running-config tenant Tenant1
# Command: show running-config tenant Tenant1
# Time: Sun Aug 16 00:03:22 2020
tenant Tenant1
vrf context Vrf1
exit
bridge-domain Bd1
arp flooding
vrf member Vrf1
exit
interface bridge-domain Bd1
exit
exit
この設定は連動しており、例えば no interface bridge-domain Bd1 で削除すると bridge-domain Bd1 も削除されます。
apic1# configure
apic1(config)# tenant Tenant1
apic1(config-tenant)# no interface bridge-domain Bd1
apic1(config-tenant)#
apic1(config-tenant)# show running-config tenant Tenant1
# Command: show running-config tenant Tenant1
# Time: Sun Aug 16 00:05:31 2020
tenant Tenant1
vrf context Vrf1
exit
exit
BD Subnet¶
GUI と CLI でデフォルト値に以下の差があります。
| 項目 | GUI デフォルト値 | CLI デフォルト値 |
|---|---|---|
Make this IP address primary |
disable |
enable |
その為、CLI から BD を作成する場合、ip address ~ secondary のように secondary を設定します。
以下のように secondary を指定せずに設定すると Make this IP address primary が Enable になります。
tenant Tenant1
bridge-domain Bd1
arp flooding
vrf member Vrf1
exit
interface bridge-domain Bd1
ip address 10.0.1.254/24
exit
exit

Application Profile¶
Application Profile の作成時、特に注意事項はありません。
AppEpg (Application EPG)¶
GUI と CLI でデフォルト値に以下の差があります。
| 項目 | GUI デフォルト値 | CLI デフォルト値 |
|---|---|---|
QoS |
Level3 |
Unspecified |
その為、CLI から設定する時は必要に応じて明示的に set qos-class level3 を設定します。 尚、今回は VMM Domain で設定しています。
tenant Tenant1
application Ap1
epg Epg1
bridge-domain member Bd1
set qos-class level3
vmware-domain member Vmm1 push pre-provision
exit
exit
exit
exit
L3Out¶
L3Out は設定量が多いで若干、長くなります。 最低限の設定は概ね以下のようになろうかと思います。 ここでは OSPF で設定しています。 show running-config で表示されるコンフィグ順序上は「router ospf default が先 (上位)」なのですが、router ospf default で定義している VRF が存在しない場合、この順序で設定するとエラーになってしまいます。 そこで (show running-config 通りのコンフィグ順序では無く) router ospf default より先に vrf context を設定しています。
tenant Tenant1
l3out L3Out1
vrf member Vrf1
exit
external-l3 epg Epg99 l3out L3Out1
vrf member Vrf1
exit
exit
!
leaf 101
vrf context tenant Tenant1 vrf Vrf1 l3out L3Out1
router-id 10.0.99.201
route-map L3Out1_in
scope global
exit
route-map L3Out1_out
scope global
exit
route-map L3Out1_shared
scope global
exit
exit
!
router ospf default
vrf member tenant Tenant1 vrf Vrf1
area 0.0.0.0 l3out L3Out1
exit
exit
!
interface vlan 101
vrf member tenant Tenant1 vrf Vrf1
ip address 10.0.99.254/24
ip router ospf default area 0.0.0.0
mtu 1500
exit
interface ethernet 1/1
switchport trunk allowed vlan 101 tenant Tenant1 external-svi l3out L3Out1
exit
exit
Filter¶
Filter の作成時、特に注意事項はありません。
Contract 及び Subject¶
contract で Contract を作成します。 type オプションには以下の値を指定可能です。 type オプションを指定しない場合は Standard Contract が作成されます。
| No. | type | 作成される Contract 種別 | 備考 |
|---|---|---|---|
| 1 | permit | Standard | - |
| 2 | deny | Taboo | - |
| 3 | oob-mgmt | Out-Of-Band Contracts | mgmt' Tenant でしか作成出来ない (他 Tenant で作成するとエラー) |
Out-Of-Band Contracts とは mgmt Tenant で OoB 接続の管理に利用する特殊な Contract です。

GUI で Subject を設定する場合、デフォルトで Apply Both Direction が true に設定されますが、CLI では access-group Filter1 both のように、明示的に both を指定する必要があります。
Apply Both Direction を false に設定する場合は in オプションを指定する必要があります。
access-group Filter1 設定はオプションとして以下の 3 値から指定することが出来ます。
| No. | access-group 設定 | Apply Both Direction | Filter Chain For Consumer to Provider | Filter Chain For Provider to Consumer |
|---|---|---|---|---|
| 1 | both | true | - | - |
| 2 | in | false | ○ | X |
| 3 | out | false | X | ○ |
尚、CLI に限った話ではありませんが、both な Filter が存在する Subject に in や out な設定を追加することは出来ません。 実際に試してみると Cannot add in if both is present というエラーになります。
apic1(config)# tenant Tenant1
apic1(config-tenant)# contract Contract1
apic1(config-tenant-contract)# subject Subject1
apic1(config-tenant-contract-subj)# access-group Filter1 both
apic1(config-tenant-contract-subj)# access-group Filter2 in
Cannot add in if both is present
apic1(config-tenant-contract-subj)# access-group Filter3 out
Cannot add out if both is present
both Filter を含まないのであれば in と out を混在させることは可能です。 以下で例示している Contract2 や Contract3 はいずれも正しく設定可能です。
tenant Tenant1
contract Contract2
subject Subject1
access-group Filter1 in
access-group Filter2 out
exit
exit
!
contract Contract3
subject Subject1
access-group Filter1 out
access-group Filter2 in
exit
exit
exit
L3Out と AppEpg を Contract する¶
L3Out と AppEpg を Contract してみます。
L3Out (Provider) ~ AppEpg (Consumer)¶
以下の設定になります。
tenant Tenant1
application Ap1
epg Epg1
contract consumer Contract1
exit
exit
external-l3 epg Epg99 l3out L3Out1
contract provider Contract1
exit
exit
AppEpg (Provider) ~ L3Out (Consumer)¶
Provider と Consumer を逆に設定する場合、以下の設定になります。
tenant Tenant1
application Ap1
epg Epg1
contract provider Contract1
exit
exit
external-l3 epg Epg99 l3out L3Out1
contract consumer Contract1
exit
exit
BD Subnet を L3Out から広報する¶
BD Subnet を L3Out から広報するには下記の設定が必要です。
- BD の L3 Configurations で
Associated L3 Outsへ適切な L3Out を関連付ける - BD Subnet の Scope を
Advertised Externallyに設定する
これを CLI で設定すると下記の通りです。
leaf 201
vrf context tenant Tenant1 vrf Vrf1 l3out L3Out1
route-map L3Out1_out
scope global
match bridge-domain Bd1
exit
exit
exit
exit
!
tenant Tenant1
interface bridge-domain Bd1
ip address 10.0.1.254/24 scope public
exit
exit
leaf の match bridge-domain Bd1 に一致する設定は、GUI 上では下記です。

Tenant の ip address 10.0.1.254/24 scope public に一致する設定は、GUI 上では下記です。

ExtEpg Subnet¶
ExtEpg Subnet の External EPG Classification が External Subnets for External EPG をチェックした状態にするには以下のように設定します。
ExtEpg の Route Control / External EPG Classification 設定ごとの設定を一覧にすると以下の通りです。 Route Control に関連する設定は leaf で、External EPG Classification に関する設定は tenant で実施します。

全体の設定¶
(Application Profile や Subject, Filter などを除き) 今回設定した主要コンポーネントを図示すると以下の通りです。

この構成を CLI から設定する場合、コンフィグは以下の通りです。
tenant Tenant1
access-list Filter1
match ip
exit
contract Contract1
subject Subject1
access-group Filter1 both
exit
exit
vrf context Vrf1
exit
bridge-domain Bd1
arp flooding
vrf member Vrf1
exit
application Ap1
epg Epg1
bridge-domain member Bd1
contract consumer Contract1
set qos-class level3
vmware-domain member Vmm1 push pre-provision
exit
exit
exit
l3out L3Out1
vrf member Vrf1
exit
external-l3 epg Epg99 l3out L3Out1
vrf member Vrf1
match ip 10.0.101.0/24
contract provider Contract1
exit
interface bridge-domain Bd1
ip address 10.0.1.254/24 scope public
exit
exit
!
leaf 201
vrf context tenant Tenant1 vrf Vrf1 l3out L3Out1
router-id 10.0.99.201
route-map L3Out1_in
scope global
exit
route-map L3Out1_out
scope global
match bridge-domain Bd1
exit
exit
route-map L3Out1_shared
scope global
exit
exit
router ospf default
vrf member tenant Tenant1 vrf Vrf1
area 0.0.0.0 l3out L3Out1
exit
exit
interface vlan 101
vrf member tenant Tenant1 vrf Vrf1
ip address 10.0.99.254/24
ip router ospf default area 0.0.0.0
mtu 1500
exit
interface ethernet 1/1
switchport trunk allowed vlan 101 tenant Tenant1 external-svi l3out L3Out1
exit
exit