らくがきちょう

なんとなく ~所属組織/団体とは無関係であり、個人の見解です~

Cisco ACI で Policy Control Enforcement Preference 設定時の Policy CAM を確認する

Cisco ACI では同一 VRF 内での通信時に「Contract 設定が必要か?」「不必要か?」を定義する Policy Control Enforcement Preference という設定があります。 この設定はプライベート ネットワークの設定パラメータ に下記と記載されています。

Policy Control Enforcement Preference:優先ポリシー制御。値は [enforced] または [unenforced] です。[enforced] を選択した場合は、トラフィックを許可するエンドポイント グループ間のコントラクトが必要です。[unenforced] を選択した場合は、プライベート ネットワーク内のすべてのトラフィックが許可されます。デフォルトは [enforced] です。

Policy Control Enforcement PreferenceEnforced または Unenforced を設定出来ます。 今回は各々の値を設定した際に Policy CAM がどのように変化するのか、比較してみます。 テストは 5.0(2h) で実施しました。

テスト用 Tenant 未作成の場合

テスト用 Tenant 未作成時だと policy_count の値は 65 でした。

leaf# vsh_lc -c 'show platform internal hal health-stats asic-unit all' | grep -e policy_count -e policy_label_count
policy_count                  : 65 
max_policy_count              : 65536 
policy_label_count                : 0 
max_policy_label_count            : 0 

Unenforced 設定の場合

以下の設定をし、Policy Control Enforcement PreferenceUnenforced で VRF を作成します。 設定上、Epg1 と Epg2 は Contract しています。

tenant Tenant1
  access-list Filter1
    match icmp
    exit
  contract Contract1
    subject Subject1
      access-group Filter1 both
      exit
    exit
  vrf context Vrf1
    no contract enforce
    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 deploy immediate
        exit
      exit
    epg Epg2
      bridge-domain member Bd1
      contract provider Contract1
      set qos-class level3
      vmware-domain member Vmm1 deploy immediate
        exit
      exit
    exit
  exit

vnid は 2129923 で VRF が作成されました。

leaf# show system internal epm vrf Tenant1:Vrf1


+--------------------------------+--------+----------+----------+------+--------
               VRF                  Type    VRF vnid  Context ID Status Endpoint
                                                                          Count 
+--------------------------------+--------+----------+----------+------+--------
 Tenant1:Vrf1                     Tenant   2129923    69         Up     0       

VRF に作成された Zoning-Rule を確認すると implicit (暗黙的) な Src Any : Dst Any ルールが作成されていることが分かります。 また、設定上は Epg1 と Epg2 を Contract させているにも関わらず、explicit (明示的) なルールが作成されていないことが分かります。

leaf# show zoning-rule scope 2129923
+---------+--------+--------+----------+---------+---------+---------+------+--------+-----------------+
| Rule ID | SrcEPG | DstEPG | FilterID |   Dir   |  operSt |  Scope  | Name | Action |     Priority    |
+---------+--------+--------+----------+---------+---------+---------+------+--------+-----------------+
|   4134  |   0    |   0    | implicit | uni-dir | enabled | 2129923 |      | permit | any_any_any(21) |
+---------+--------+--------+----------+---------+---------+---------+------+--------+-----------------+
leaf# contract_parser.py --vrf Tenant1:Vrf1
Key:
[prio:RuleId] [vrf:{str}] action protocol src-epg [src-l4] dst-epg [dst-l4] [flags][contract:{str}] [hit=count]

[21:4134] [vrf:Tenant1:Vrf1] permit any epg:any epg:any [contract:implicit] [hit=0]

Tenant 未作成時は 65 だった policy_count の値は implicit ルールが「ひとつ」増えたので +1 され、66 になっています。

leaf# vsh_lc -c 'show platform internal hal health-stats asic-unit all' | grep -e policy_count -e policy_label_count
policy_count                  : 66 
max_policy_count              : 65536 
policy_label_count                : 0 
max_policy_label_count            : 0

Enforced 設定の場合

以下の設定をし、Policy Control Enforcement PreferenceEnforced で VRF を作成します (未指定の場合、デフォルトで Enforced です)。

tenant Tenant1
  access-list Filter1
    match icmp
    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 deploy immediate
        exit
      exit
    epg Epg2
      bridge-domain member Bd1
      contract provider Contract1
      set qos-class level3
      vmware-domain member Vmm1 deploy immediate
        exit
      exit
    exit
  exit

vnid は 2129923 で VRF が作成されました。

leaf# show system internal epm vrf Tenant1:Vrf1


+--------------------------------+--------+----------+----------+------+--------
               VRF                  Type    VRF vnid  Context ID Status Endpoint
                                                                          Count 
+--------------------------------+--------+----------+----------+------+--------
 Tenant1:Vrf1                     Tenant   2129923    70         Up     0 

VRF に作成された Zoning-Rule を確認すると implicit なルールは 4 つ、explicit なルールが 2 つ、合計 6 つのルールが作成されていることが分かります。

leaf# show zoning-rule scope 2129923
+---------+--------+--------+----------+----------------+---------+---------+-------------------+----------+----------------------+
| Rule ID | SrcEPG | DstEPG | FilterID |      Dir       |  operSt |  Scope  |        Name       |  Action  |       Priority       |
+---------+--------+--------+----------+----------------+---------+---------+-------------------+----------+----------------------+
|   4134  |   0    |   0    | implicit |    uni-dir     | enabled | 2129923 |                   | deny,log |   any_any_any(21)    |
|   4174  |   0    |   0    | implarp  |    uni-dir     | enabled | 2129923 |                   |  permit  |  any_any_filter(17)  |
|   4170  |   0    |   15   | implicit |    uni-dir     | enabled | 2129923 |                   | deny,log | any_vrf_any_deny(22) |
|   4175  |   0    | 32770  | implicit |    uni-dir     | enabled | 2129923 |                   |  permit  |   any_dest_any(16)   |
|   4176  | 49155  | 49154  |    5     | uni-dir-ignore | enabled | 2129923 | Tenant1:Contract1 |  permit  |    fully_qual(7)     |
|   4173  | 49154  | 49155  |    5     |     bi-dir     | enabled | 2129923 | Tenant1:Contract1 |  permit  |    fully_qual(7)     |
+---------+--------+--------+----------+----------------+---------+---------+-------------------+----------+----------------------+
leaf# contract_parser.py --vrf Tenant1:Vrf1
Key:
[prio:RuleId] [vrf:{str}] action protocol src-epg [src-l4] dst-epg [dst-l4] [flags][contract:{str}] [hit=count]

[7:4173] [vrf:Tenant1:Vrf1] permit ip icmp tn-Tenant1/ap-Ap1/epg-Epg1(49154) tn-Tenant1/ap-Ap1/epg-Epg2(49155) [contract:uni/tn-Tenant1/brc-Contract1] [hit=0]
[7:4176] [vrf:Tenant1:Vrf1] permit ip icmp tn-Tenant1/ap-Ap1/epg-Epg2(49155) tn-Tenant1/ap-Ap1/epg-Epg1(49154) [contract:uni/tn-Tenant1/brc-Contract1] [hit=0]
[16:4175] [vrf:Tenant1:Vrf1] permit any epg:any tn-Tenant1/bd-Bd1(32770) [contract:implicit] [hit=0]
[16:4174] [vrf:Tenant1:Vrf1] permit arp epg:any epg:any [contract:implicit] [hit=0]
[21:4134] [vrf:Tenant1:Vrf1] deny,log any epg:any epg:any [contract:implicit] [hit=0]
[22:4170] [vrf:Tenant1:Vrf1] deny,log any epg:any pfx-0.0.0.0/0(15) [contract:implicit] [hit=0]

Tenant 未作成時は 65 だった policy_count の値は implicit/explicit ルールの分が増え、合計 70 になっています。

leaf# vsh_lc -c 'show platform internal hal health-stats asic-unit all' | grep -e policy_count -e policy_label_count
policy_count                  : 70 
max_policy_count              : 65536 
policy_label_count                : 0 
max_policy_label_count            : 0