4.4. 扁平提供商网络数据包流的工作方式?
本节论述了如何将流量流流和来自具有扁平供应商网络配置的实例的流量。
扁平提供商网络中传出流量流
下图描述了离开实例的流量的数据包流,并直接指向外部网络。配置 br-ex
外部网桥后,将物理接口添加到网桥,并将实例生成至 Compute 节点,生成的接口和网桥配置类似于下图中的配置(如果使用 iptables_hybrid
防火墙驱动程序):
-
数据包离开实例的
eth0
接口,并到达 linux 网桥qbr-xx
。 -
网桥
qbr-xx
连接到br-int
,使用 veth 对qvb-xx <-> qvo-xxx
。这是因为网桥用于应用安全组定义的入站/出站防火墙规则。 -
接口
qvb-xx
连接到qbr-xx
linux 网桥,qvoxx
连接到br-int
Open vSwitch (OVS) 网桥。
'qbr-xx'Linux 网桥配置示例:
# brctl show qbr269d4d73-e7 8000.061943266ebb no qvb269d4d73-e7 tap269d4d73-e7
br-int
上的 qvo-xx
配置:
# ovs-vsctl show Bridge br-int fail_mode: secure Interface "qvof63599ba-8f" Port "qvo269d4d73-e7" tag: 5 Interface "qvo269d4d73-e7"
端口 qvo-xx
使用与扁平提供商网络关联的内部 VLAN 标签标记。在本例中,VLAN 标签为 5
。当数据包到达 qvo-xx
时,VLAN 标签将附加到数据包标头中。
数据包然后被移到 br-ex
OVS 网桥,使用 patch-peer int-br-ex <-> phy-br-ex
。
br-int
上的 patch-peer 配置示例:
# ovs-vsctl show Bridge br-int fail_mode: secure Port int-br-ex Interface int-br-ex type: patch options: {peer=phy-br-ex}
br-ex
上的 patch-peer 配置示例:
Bridge br-ex Port phy-br-ex Interface phy-br-ex type: patch options: {peer=int-br-ex} Port br-ex Interface br-ex type: internal
当此数据包在 br-ex
上到达 phy-br-ex
时,br-ex
中的 OVS 流会剥离 VLAN 标签(5)并将其转发到物理接口。
在以下示例中,输出显示 phy-br-ex
的端口号为 2
。
# ovs-ofctl show br-ex OFPT_FEATURES_REPLY (xid=0x2): dpid:00003440b5c90dc6 n_tables:254, n_buffers:256 capabilities: FLOW_STATS TABLE_STATS PORT_STATS QUEUE_STATS ARP_MATCH_IP actions: OUTPUT SET_VLAN_VID SET_VLAN_PCP STRIP_VLAN SET_DL_SRC SET_DL_DST SET_NW_SRC SET_NW_DST SET_NW_TOS SET_TP_SRC SET_TP_DST ENQUEUE 2(phy-br-ex): addr:ba:b5:7b:ae:5c:a2 config: 0 state: 0 speed: 0 Mbps now, 0 Mbps max
以下输出显示了到达 phy-br-ex
(in_port=2
)的任何数据包,其 VLAN 标签为 5
(dl_vlan=5
)。此外,br-ex 中的 OVS 流可剥离 VLAN 标签,并将数据包转发到物理接口。
# ovs-ofctl dump-flows br-ex NXST_FLOW reply (xid=0x4): cookie=0x0, duration=4703.491s, table=0, n_packets=3620, n_bytes=333744, idle_age=0, priority=1 actions=NORMAL cookie=0x0, duration=3890.038s, table=0, n_packets=13, n_bytes=1714, idle_age=3764, priority=4,in_port=2,dl_vlan=5 actions=strip_vlan,NORMAL cookie=0x0, duration=4702.644s, table=0, n_packets=10650, n_bytes=447632, idle_age=0, priority=2,in_port=2 actions=drop
如果物理接口是另一个 VLAN 标记的接口,则物理接口会将标签添加到数据包中。
扁平提供商网络中传入流量流
本节包含来自外部网络传入流量流的信息,直到它到达实例的接口。
-
传入流量到达物理节点上的
eth1
。 -
数据包传递到
br-ex
网桥。 -
数据包通过 patch-peer
phy-br-ex <--> int-br-ex
移到br-int
。
在以下示例中,int-br-ex
使用端口号 15
。请参阅包含 15 (int-br-ex)
的条目:
# ovs-ofctl show br-int OFPT_FEATURES_REPLY (xid=0x2): dpid:00004e67212f644d n_tables:254, n_buffers:256 capabilities: FLOW_STATS TABLE_STATS PORT_STATS QUEUE_STATS ARP_MATCH_IP actions: OUTPUT SET_VLAN_VID SET_VLAN_PCP STRIP_VLAN SET_DL_SRC SET_DL_DST SET_NW_SRC SET_NW_DST SET_NW_TOS SET_TP_SRC SET_TP_DST ENQUEUE 15(int-br-ex): addr:12:4e:44:a9:50:f4 config: 0 state: 0 speed: 0 Mbps now, 0 Mbps max
观察 br-int 上的流量流
当数据包到达
int-br-ex
时,br-int
网桥内的 OVS 流规则会导致数据包添加内部 VLAN 标签5
。请参阅 operations=mod_vlan_vid:5
条目:# ovs-ofctl dump-flows br-int NXST_FLOW reply (xid=0x4): cookie=0x0, duration=5351.536s, table=0, n_packets=12118, n_bytes=510456, idle_age=0, priority=1 actions=NORMAL cookie=0x0, duration=4537.553s, table=0, n_packets=3489, n_bytes=321696, idle_age=0, priority=3,in_port=15,vlan_tci=0x0000 actions=mod_vlan_vid:5,NORMAL cookie=0x0, duration=5350.365s, table=0, n_packets=628, n_bytes=57892, idle_age=4538, priority=2,in_port=15 actions=drop cookie=0x0, duration=5351.432s, table=23, n_packets=0, n_bytes=0, idle_age=5351, priority=0 actions=drop
-
第二条规则管理到达 int-br-ex (in_port=15),没有 VLAN 标签(vlan_tci=0x0000)的数据包):该规则将 VLAN 标签 5 添加到数据包(action
=mod_vlan_vid:5,
),并将其转发到HQxxx
。 -
在剥离 VLAN 标签后,
qvoxxx
接受数据包并将其转发到qvbxx
。 - 数据包然后到达实例。
VLAN 标签 5 是一个在带有扁平提供商网络的测试 Compute 节点上使用的示例 VLAN;该值由 neutron-openvswitch-agent
自动分配。对于您自己的扁平提供商网络,这个值可能会有所不同,并且可能因两个单独的 Compute 节点上的同一网络而异。