简介
本文档介绍如何验证在以应用为中心的基础设施(ACI)交换矩阵中配置的合同是否正确且行为正常。
拓扑
在本文档中使用的示例中,虚拟机A (VM)连接到Leaf1,并且已签订合同,允许它与连接到Leaf2的VM-B通信。合同允许互联网控制消息协议(ICMP)和HTTP。
下图说明了拓扑:
流程概述
以下是合同和规则的策略交互和流程:
- 应用策略基础设施控制器(APIC)上的策略管理器与交换机上的策略元素管理器通信。
- 交换机上的策略元素管理器对交换机上的对象存储进行编程。
- 交换机上的策略管理器与交换机上的访问控制列表服务质量(ACLQOS)客户端通信。
- ACLQOS客户端对硬件进行编程。
确定使用的合同/分区规则
以下是添加两个终端组(EPG)的合同前,枝叶交换机的show zoning-rule命令输出示例。
fab1_leaf1# show zoning-rule
Rule ID SrcEPG DstEPG FilterID operSt Scope Action
======= ====== ====== ======== ====== ===== ======
4096 0 0 implicit enabled 16777200 deny,log
4097 0 0 implicit enabled 3080192 deny,log
4098 0 0 implicit enabled 2686976 deny,log
4099 0 49154 implicit enabled 2686976 permit
4102 0 0 implicit enabled 2097152 deny,log
4103 0 32771 implicit enabled 2097152 permit
4117 16387 16386 12 enabled 2097152 permit
4116 16386 16387 13 enabled 2097152 permit
4100 16386 49154 default enabled 2097152 permit
4101 49154 16386 default enabled 2097152 permit
4104 0 32770 implicit enabled 2097152 permit
4105 49155 16387 13 enabled 2097152 permit
4112 16387 49155 13 enabled 2097152 permit
4113 49155 16387 12 enabled 2097152 permit
4114 16387 49155 12 enabled 2097152 permit
[snip]
这是添加合同后的相同命令输出,以便两个EPG可以相互通信:
fab1_leaf1# show zoning-rule
Rule ID SrcEPG DstEPG FilterID operSt Scope Action
======= ====== ====== ======== ====== ======== ========
4096 0 0 implicit enabled 16777200 deny,log
4097 0 0 implicit enabled 3080192 deny,log
4098 0 0 implicit enabled 2686976 deny,log
4099 0 49154 implicit enabled 2686976 permit
4131 49155 32771 7 enabled 2686976 permit
4132 32771 49155 6 enabled 2686976 permit
4102 0 0 implicit enabled 2097152 deny,log
4103 0 32771 implicit enabled 2097152 permit
4117 16387 16386 12 enabled 2097152 permit
4116 16386 16387 13 enabled 2097152 permit
4100 16386 49154 default enabled 2097152 permit
4101 49154 16386 default enabled 2097152 permit
4104 0 32770 implicit enabled 2097152 permit
4105 49155 16387 13 enabled 2097152 permit
4112 16387 49155 13 enabled 2097152 permit
4113 49155 16387 12 enabled 2097152 permit
4114 16387 49155 12 enabled 2097152 permit
[snip]
注意:注意已添加的新规则ID(4131和4132)、7和6的过滤器ID以及2686976的范围。
注意:使用此命令输出可以轻松找到必须在实验室系统中检查的规则;但在发生动态更改的生产环境中,此命令可能会很繁琐。
另一种定位关注规则的方法是使用Visore。对fvCtx的上下文托管对象(MO)执行搜索。然后,您可以在该屏幕上搜索您的特定情景可分辨名称(DN),如下所示:
请注意该情景的范围。您可以用它来映射到show-zoning-rule命令输出,以便查找必须查询的规则:
您还可以通过用户界面(UI)确定情景的网段ID/范围,如下所示:
此范围与show zoning-rules命令输出中显示的范围一致:
当您拥有范围ID信息并确定规则和过滤器ID后,可以使用next命令验证您命中了新过滤器(而不是EPG之间的隐式拒绝消息)。包含隐式拒绝消息,以便默认情况下EPG无法通信。
请注意,在此命令输出中,Leaf1、Filter-6 (f-6)递增:
fab1_leaf1# show system internal policy-mgr stats | grep 2686976
Rule (4098) DN (sys/actrl/scope-2686976/rule-2686976-s-any-d-any-f-implicit)
Ingress: 0, Egress: 81553
Rule (4099) DN (sys/actrl/scope-2686976/rule-2686976-s-any-d-49154-f-implicit)
Ingress: 0, Egress: 0
Rule (4131) DN (sys/actrl/scope-2686976/rule-2686976-s-49155-d-32771-f-7)
Ingress: 0, Egress: 0
Rule (4132) DN (sys/actrl/scope-2686976/rule-2686976-s-32771-d-49155-f-6)
Ingress: 1440, Egress: 0
fab1_leaf1# show system internal policy-mgr stats | grep 2686976
Rule (4098) DN (sys/actrl/scope-2686976/rule-2686976-s-any-d-any-f-implicit)
Ingress: 0, Egress: 81553
Rule (4099) DN (sys/actrl/scope-2686976/rule-2686976-s-any-d-49154-f-implicit)
Ingress: 0, Egress: 0
Rule (4131) DN (sys/actrl/scope-2686976/rule-2686976-s-49155-d-32771-f-7)
Ingress: 0, Egress: 0
Rule (4132) DN (sys/actrl/scope-2686976/rule-2686976-s-32771-d-49155-f-6)
Ingress: 1470, Egress: 0
请注意,在此命令输出中,Leaf2、Filter-7 (f-7)递增:
fab1_leaf2# show system internal policy-mgr stats | grep 268697
Rule (4098) DN (sys/actrl/scope-2686976/rule-2686976-s-any-d-any-f-implicit)
Ingress: 0, Egress: 80257
Rule (4099) DN (sys/actrl/scope-2686976/rule-2686976-s-any-d-49153-f-implicit)
Ingress: 0, Egress: 0
Rule (4117) DN (sys/actrl/scope-2686976/rule-2686976-s-32771-d-49155-f-6)
Ingress: 0, Egress: 0
Rule (4118) DN (sys/actrl/scope-2686976/rule-2686976-s-49155-d-32771-f-7)
Ingress: 2481, Egress: 0
fab1_leaf2# show system internal policy-mgr stats | grep 268697
Rule (4098) DN (sys/actrl/scope-2686976/rule-2686976-s-any-d-any-f-implicit)
Ingress: 0, Egress: 80257
Rule (4099) DN (sys/actrl/scope-2686976/rule-2686976-s-any-d-49153-f-implicit)
Ingress: 0, Egress: 0
Rule (4117) DN (sys/actrl/scope-2686976/rule-2686976-s-32771-d-49155-f-6)
Ingress: 0, Egress: 0
Rule (4118) DN (sys/actrl/scope-2686976/rule-2686976-s-49155-d-32771-f-7)
Ingress: 2511, Egress: 0
提示:的范围、规则ID、目标、源pcTags和过滤器的知识对于进一步排除此问题的尝试非常重要。了解规则ID所在的EPG也很有用。
您可以通过moquery 命令使用DN名称fvAEPg 和grep在mo上搜索特定pcTag,如下所示:
admin@RTP_Apic1:~> moquery -c fvAEPg | grep 49155 -B 5
dn : uni/tn-Prod/ap-commerceworkspace/epg-Web
lcOwn : local
matchT : AtleastOne
modTs : 2014-10-16T01:27:35.355-04:00
monPolDn : uni/tn-common/monepg-default
pcTag : 49155
还可以将filter选项与moquery命令一起使用,如下所示:
admin@RTP_Apic1:~> moquery -c fvAEPg -f 'fv.AEPg.pcTag=="49155"'
Total Objects shown: 1
# fv.AEPg
name : Web
childAction :
configIssues :
configSt : applied
descr :
dn : uni/tn-Prod/ap-commerceworkspace/epg-Web
lcOwn : local
matchT : AtleastOne
modTs : 2014-10-16T01:27:35.355-04:00
monPolDn : uni/tn-common/monepg-default
pcTag : 49155
prio : unspecified
rn : epg-Web
scope : 2523136
status :
triggerSt : triggerable
uid : 15374
验证硬件编程
现在,您可以验证规则的硬件条目。要查看硬件信息,请输入show platform internal ns table mth_lux_slvz_DHS_SecurityGroupStatTable_memif_data ingress命令(这是vsh_lc命令):
在本示例中,硬件条目41(条目[000041])递增。
注意:前面显示的命令用于Northstar ASIC。用于Donner或Donner+的命令是show platform internal ns table mth_luxh_slvy_DHS_SecurityGroupStatTable_memif_data。
注意:此命令在生产环境中不切实际,但您可以使用此部分介绍的其他命令代替。
记住规则(4132)和范围(268976)。
输入以下命令以确定三重内容可寻址存储器(TCAM)硬件索引条目映射的规则ID,并根据规则ID和/或过滤器ID进行过滤:
module-1# show system internal aclqos zoning-rules
[snip]
===========================================
Rule ID: 4131 Scope 4 Src EPG: 49155 Dst EPG: 32771 Filter 7
Curr TCAM resource:
=============================
unit_id: 0
=== Region priority: 771 (rule prio: 3 entry: 3)===
sw_index = 62 | hw_index = 40
=== Region priority: 772 (rule prio: 3 entry: 4)===
sw_index = 63 | hw_index = 45
===========================================
Rule ID: 4132 Scope 4 Src EPG: 32771 Dst EPG: 49155 Filter 6
Curr TCAM resource:
=============================
unit_id: 0
=== Region priority: 771 (rule prio: 3 entry: 3)===
sw_index = 66 | hw_index = 41
=== Region priority: 771 (rule prio: 3 entry: 3)===
sw_index = 67 | hw_index = 42
[snip]
在本示例中,相关的源和目标EPG组合为32771=0x8003,49155=0xC003。因此,您可以考虑与规则ID(4131和4132)和过滤器ID(6和7)匹配的这些源和目标类的所有TCAM条目。
在本示例中,其中一些TCAM条目被转储。作为参考,以下是允许这些EPG的ping和Web流量的合同配置:
module-1# show platform internal ns table mth_lux_slvz_DHS_SecurityGroupKeyTable0
_memif_data 41
=======================================================================
TABLE INSTANCE : 0
=======================================================================
ENTRY[000041] =
sg_label=0x4
sclass=0x8003
dclass=0xc003
prot=0x1 (IP Protocol 0x01 = ICMP)
注意:前面显示的命令用于Northstar ASIC。用于Donner或Donner+的命令是show platform internal ns table mth_luxh_slvq_DHS_SecurityGroupKeyTable0_memif_data。
sup_tx_mask=0x1
src_policy_incomplete_mask=0x1
dst_policy_incomplete_mask=0x1
class_eq_mask=0x1
aclass_mask=0x1ff
port_dir_mask=0x1
dport_mask=0xffff
sport_mask=0xffff
tcpflags_mask=0xff
ip_opt_mask=0x1
ipv6_route_mask=0x1
ip_fragment_mask=0x1
ip_frag_offset0_mask=0x1
ip_frag_offset1_mask=0x1
ip_mf_mask=0x1
l4_partial_mask=0x1
dst_local_mask=0x1
routeable_mask=0x1
spare_mask=0x7ff
v4addr_key_mask=0x1
v6addr_key_mask=0x1
valid=0x1
module-1# show platform internal ns table mth_lux_slvz_DHS_SecurityGroupKeyTable0
_memif_data 42
=======================================================================
TABLE INSTANCE : 0
=======================================================================
ENTRY[000042] =
sg_label=0x4
sclass=0x8003
dclass=0xc003
prot=0x6 <--
dport=0x50 <--
sup_tx_mask=0x1
src_policy_incomplete_mask=0x1
dst_policy_incomplete_mask=0x1
class_eq_mask=0x1
aclass_mask=0x1ff
port_dir_mask=0x1
sport_mask=0xffff
tcpflags_mask=0xff
ip_opt_mask=0x1
ipv6_route_mask=0x1
ip_fragment_mask=0x1
ip_frag_offset0_mask=0x1
ip_frag_offset1_mask=0x1
ip_mf_mask=0x1
l4_partial_mask=0x1
dst_local_mask=0x1
提示:您可以使用相同方法验证每个TCAM条目。
排除硬件编程问题
本节提供一些有用的故障排除命令和提示。
有用的故障排除命令
遇到问题时,可以使用以下一些有用的命令来定位枝叶策略管理器错误:
fab1_leaf1# show system internal policy-mgr event-history errors
1) Event:E_DEBUG, length:84, at 6132 usecs after Mon Sep 8 13:15:56 2014
[103] policy_mgr_handle_ctx_mrules(779): ERROR: Failed to process prio(1537):
(null)
2) Event:E_DEBUG, length:141, at 6105 usecs after Mon Sep 8 13:15:56 2014
[103] policy_mgr_process_mrule_prio_aces(646): ERROR: Failed to insert iptables
rule for rule(4120) , fentry(5_0) with priority(1537): (null)
[snip]
fab1_leaf1# show system internal policy-mgr event-histor trace
[1409945922.23737] policy_mgr_ppf_hdl_close_state:562: Got close state callback
[1409945922.23696] policy_mgr_ppf_rdy_ntf_fun:239: StatStoreEnd returned: 0x0(SU
CCESS)
[1409945922.23502] policy_mgr_ppf_rdy_ntf_fun:208: ppf ready notification: sess_
id: (0xFF0104B400005B51)
[1409945922.23475] policy_mgr_ppf_rdy_ntf_fun:205: Got ready notification callba
ck with statustype (4)
[1409945921.983476] policy_mgr_gwrap_handler:992: Dropped...now purging it...
[1409945921.982882] policy_mgr_ppf_goto_state_fun:481: Sess id (0xFF0104B400005B
[snip]
module-1# show system internal aclqos event-history trace
T [Fri Sep 5 13:18:24.863283] ============= Session End ============
T [Fri Sep 5 13:18:24.862924] Commit phase: Time taken 0.62 ms, usr 0.00 ms,
sys 0.00 ms
T [Fri Sep 5 13:18:24.862302] ppf session [0xff0104b410000087] commit ... npi
nst 1
T [Fri Sep 5 13:18:24.861421] Verify phase: Time taken 0.77 ms, usr 0.00 ms,
sys 0.00 ms
T [Fri Sep 5 13:18:24.860615] ============= Session Begin ============
T [Fri Sep 5 13:18:24.830472] ============= Session End ============
T [Fri Sep 5 13:18:24.830062] Commit phase: Time taken 0.98 ms, usr 0.00 ms,
sys 0.00 ms
T [Fri Sep 5 13:18:24.829085] ppf session [0xff0104b410000086] commit ... npi
nst 1
T [Fri Sep 5 13:18:24.827685] Verify phase: Time taken 2.04 ms, usr 0.00 ms,
sys 0.00 ms
T [Fri Sep 5 13:18:24.825388] ============= Session Begin ============
T [Fri Sep 5 12:32:51.364225] ============= Session End ============
T [Fri Sep 5 12:32:51.363748] Commit phase: Time taken 0.64 ms, usr 0.00 ms,
[snip]
提示:有些文件很大,因此更容易将文件发送到bootflash,然后在编辑器中检查它们。
module-1# show system internal aclqos ?
asic Asic information
brcm Broadcam information
database Database
event-history Show various event logs of ACLQOS
mem-stats Show memory allocation statistics of ACLQOS
prefix External EPG prefixes
qos QoS related information
range-resource Zoning rules L4 destination port range resources
regions Security TCAM priority regions
span SPAN related information
zoning-rules Show zoning rules
module-1# show system internal aclqos event-history ?
errors Show error logs of ACLQOS
msgs Show various message logs of ACLQOS
ppf Show ppf logs of ACLQOS
ppf-parse Show ppf-parse logs of ACLQOS
prefix Show prefix logs of ACLQOS
qos Show qos logs of ACLQOS
qos-detail Show detailed qos logs of ACLQOS
span Show span logs of ACLQOS
span-detail Show detailed span logs of ACLQOS
trace Show trace logs of ACLQOS
trace-detail Show detailed trace logs of ACLQOS
zoning-rules Show detailed logs of ACLQOS
故障排除提示
以下是一些有用的故障排除提示:
- 如果遇到TCAM耗尽问题,请检查UI或CLI是否存在与所讨论的规则相关的故障。可以报告此故障:
Fault F1203 - Rule failed due to hardware programming error.
一条规则可在专用集成电路(ASIC)中采用多个TCAM条目。要查看ASIC上的条目数,请输入以下命令:
fab1-leaf1# vsh_lc
module-1# show platform internal ns table-health
VLAN STATE curr usage: 0 - size: 4096
QQ curr usage: 0 - size: 16384
SEG STATE curr usage: 0 - size: 4096
SRC TEP curr usage: 0 - size: 4096
POLICY KEY curr usage: 0 - size: 1
SRC VP curr usage: 0 - size: 4096
SEC GRP curr usage: 43 - size: 4096
注意:在本示例中,有43个条目。此使用情况也会报告给eqptCapacity类中的APIC。
- 当有多个匹配项时,TCAM查找会返回较低的hw-index。要验证索引,请输入以下命令:
show system internal aclqos zoning-rule
在故障排除时,您可以观察由any-any-implicit规则引起的丢弃。此规则始终位于底部,这意味着由于规则不存在,数据包将被丢弃。这可能是由于配置错误,或者策略元素管理器未按预期对其进行编程。
- pcTags可以具有本地或全局范围:
- System Reserved pcTag -此pcTag用于系统内部规则(1-15)。
- 全局范围的pcTag -此pcTag用于共享服务(16-16385)。
- 本地范围的pcTag -此pcTag在本地用于每个VRF(范围从16386-65535)。
在排除故障时,快速查看值的长度即可确定范围。
从规则ID派生合同名称
通常,在故障排除案例中,工程师会查看分区规则。在某些情况下,EPG/pcTag具有许多合同,故障排除可能很繁琐。本部分概述了根据交换机CLI上看到的规则ID确定EPG/pcTags之间使用的合同名称的方法。
为了开始:
1. 查询具体合同/规则对象aclRule(如果需要),按属性id值rule-d缩小搜索范围
2. 找到正确的规则后,单击DN上的绿色箭头查看actrlRule对象的子对象。我们的答案在于孩子。
此处的子对象是actrlRsToEpgConn。通常可以有两个,每个EPG一个。此对象的DN显示应用合同的两个EPG以及方向(提供商或消费者),最重要的是显示合同对象名称。
如突出显示,本例中的合同名称为brc-dpita-ssh。
如果需要,请查询vzBrCP以查找正确的合同。