Open vSwitch: 自助服务网络

此架构示例增强了 Open vSwitch: 提供商网络,以支持几乎无限数量的完全虚拟网络。虽然网络服务支持 VLAN 自助服务网络,但此示例侧重于 VXLAN 自助服务网络。有关自助服务网络的更多信息,请参阅 自助服务网络

先决条件

添加一个具有以下组件的网络节点

  • 三个网络接口:管理、提供商和叠加。

  • OpenStack Networking Open vSwitch (OVS) 第二层代理、第三层代理以及包含 OVS 的任何代理。

修改计算节点,使其具有以下组件

  • 添加一个网络接口:overlay。

注意

您可以将 DHCP 和元数据代理保留在每个计算节点上,也可以将它们移动到网络节点。

架构

Self-service networks using OVS - overview

下图显示了一个自助服务网络和一个未标记(扁平)提供商网络的组件和连接。在这种特定情况下,实例位于与网络 DHCP 代理相同的计算节点上。如果 DHCP 代理位于另一个计算节点上,则后者仅包含一个 DHCP 命名空间,并带有连接到 OVS 集成桥的端口。

Self-service networks using OVS - components and connectivity - one network

示例配置

使用以下示例配置作为模板,以向现有的支持提供商网络的运行环境添加对自助服务网络的支持。

控制器节点

  1. neutron.conf 文件中

    • 启用路由并允许重叠的 IP 地址范围。

      [DEFAULT]
      service_plugins = router
      
  2. ml2_conf.ini 文件中

    • vxlan 添加到类型驱动程序和项目网络类型。

      [ml2]
      type_drivers = flat,vlan,vxlan
      tenant_network_types = vxlan
      
    • 启用第二层填充机制驱动程序。

      [ml2]
      mechanism_drivers = openvswitch,l2population
      
    • 配置 VXLAN 网络 ID (VNI) 范围。

      [ml2_type_vxlan]
      vni_ranges = VNI_START:VNI_END
      

      VNI_STARTVNI_END 替换为适当的数值。

  3. 重新启动以下服务

    • Neutron 服务器

    • Open vSwitch 代理

网络节点

  1. 安装网络服务 OVS 第二层代理和第三层代理。

  2. 安装 OVS。

  3. neutron.conf 文件中,配置常用选项

    [DEFAULT]
    core_plugin = ml2
    auth_strategy = keystone
    
    [database]
    # ...
    
    [keystone_authtoken]
    # ...
    
    [nova]
    # ...
    
    [agent]
    # ...
    

    请参阅您的 OpenStack 版本的 安装教程和指南配置参考,以获取 [DEFAULT][database][keystone_authtoken][nova][agent] 部分的适当附加配置。

  4. 启动以下服务

    • OVS

  5. 创建 OVS 提供商网桥 br-provider

    $ ovs-vsctl add-br br-provider
    
  6. 将提供商网络接口作为端口添加到 OVS 提供商网桥 br-provider

    $ ovs-vsctl add-port br-provider PROVIDER_INTERFACE
    

    PROVIDER_INTERFACE 替换为处理提供商网络的底层接口的名称。例如,eth1

  7. openvswitch_agent.ini 文件中,配置第二层代理。

    [ovs]
    bridge_mappings = provider:br-provider
    local_ip = OVERLAY_INTERFACE_IP_ADDRESS
    
    [agent]
    tunnel_types = vxlan
    l2_population = True
    
    [securitygroup]
    firewall_driver = iptables_hybrid
    

    OVERLAY_INTERFACE_IP_ADDRESS 替换为处理自助服务网络 VXLAN 覆盖的网络接口的 IP 地址。

  8. 启动以下服务

    • Open vSwitch 代理

    • 第 3 层代理

计算节点

  1. openvswitch_agent.ini 文件中,启用包括第二层填充在内的 VXLAN 支持。

    [ovs]
    local_ip = OVERLAY_INTERFACE_IP_ADDRESS
    
    [agent]
    tunnel_types = vxlan
    l2_population = True
    

    OVERLAY_INTERFACE_IP_ADDRESS 替换为处理自助服务网络 VXLAN 覆盖的网络接口的 IP 地址。

  2. 重新启动以下服务

    • Open vSwitch 代理

验证服务操作

  1. 获取管理项目凭据。

  2. 验证代理的存在和操作。

    $ openstack network agent list
    +--------------------------------------+--------------------+----------+-------------------+-------+-------+---------------------------+
    | ID                                   | Agent Type         | Host     | Availability Zone | Alive | State | Binary                    |
    +--------------------------------------+--------------------+----------+-------------------+-------+-------+---------------------------+
    | 1236bbcb-e0ba-48a9-80fc-81202ca4fa51 | Metadata agent     | compute2 | None              | True  | UP    | neutron-metadata-agent    |
    | 457d6898-b373-4bb3-b41f-59345dcfb5c5 | Open vSwitch agent | compute2 | None              | True  | UP    | neutron-openvswitch-agent |
    | 71f15e84-bc47-4c2a-b9fb-317840b2d753 | DHCP agent         | compute2 | nova              | True  | UP    | neutron-dhcp-agent        |
    | 8805b962-de95-4e40-bdc2-7a0add7521e8 | L3 agent           | network1 | nova              | True  | UP    | neutron-l3-agent          |
    | a33cac5a-0266-48f6-9cac-4cef4f8b0358 | Open vSwitch agent | network1 | None              | True  | UP    | neutron-openvswitch-agent |
    | a6c69690-e7f7-4e56-9831-1282753e5007 | Metadata agent     | compute1 | None              | True  | UP    | neutron-metadata-agent    |
    | af11f22f-a9f4-404f-9fd8-cd7ad55c0f68 | DHCP agent         | compute1 | nova              | True  | UP    | neutron-dhcp-agent        |
    | bcfc977b-ec0e-4ba9-be62-9489b4b0e6f1 | Open vSwitch agent | compute1 | None              | True  | UP    | neutron-openvswitch-agent |
    +--------------------------------------+--------------------+----------+-------------------+-------+-------+---------------------------+
    

创建初始网络

该配置支持多个 VXLAN 自助服务网络。为了简单起见,以下过程创建一个自助服务网络和一个具有网关的扁平提供商网络。路由器使用 NAT 进行 IPv4 网络流量,并直接路由 IPv6 网络流量。

注意

自助服务网络与 IPv6 的连接通常需要向节点和物理网络基础设施添加静态路由。

  1. 获取管理项目凭据。

  2. 更新提供商网络以支持自助服务网络的外部连接。

    $ openstack network set --external provider1
    

    注意

    此命令不会产生任何输出。

  3. 获取常规(非管理)项目凭据。

  4. 创建一个自助服务网络。

    $ openstack network create selfservice1
    +-------------------------+--------------+
    | Field                   | Value        |
    +-------------------------+--------------+
    | admin_state_up          | UP           |
    | mtu                     | 1450         |
    | name                    | selfservice1 |
    | port_security_enabled   | True         |
    | router:external         | Internal     |
    | shared                  | False        |
    | status                  | ACTIVE       |
    +-------------------------+--------------+
    

    注意

    如果您在网络上使用低于 1280 的 MTU 值,请在 IPv6 配置指南 中阅读警告,然后再创建任何子网。

  5. 在自助服务网络上创建一个 IPv4 子网。

    $ openstack subnet create --subnet-range 192.0.2.0/24 \
      --network selfservice1 --dns-nameserver 8.8.4.4 selfservice1-v4
    +-------------------+---------------------------+
    | Field             | Value                     |
    +-------------------+---------------------------+
    | allocation_pools  | 192.0.2.2-192.0.2.254     |
    | cidr              | 192.0.2.0/24              |
    | dns_nameservers   | 8.8.4.4                   |
    | enable_dhcp       | True                      |
    | gateway_ip        | 192.0.2.1                 |
    | ip_version        | 4                         |
    | name              | selfservice1-v4           |
    +-------------------+---------------------------+
    
  6. 在自助服务网络上创建一个 IPv6 子网。

    $ openstack subnet create --subnet-range fd00:192:0:2::/64 \
      --ip-version 6 --ipv6-ra-mode slaac --ipv6-address-mode slaac \
      --network selfservice1 --dns-nameserver 2001:4860:4860::8844 \
      selfservice1-v6
    +-------------------+--------------------------------------------------+
    | Field             | Value                                            |
    +-------------------+--------------------------------------------------+
    | allocation_pools  | fd00:192:0:2::2-fd00:192:0:2:ffff:ffff:ffff:ffff |
    | cidr              | fd00:192:0:2::/64                                |
    | dns_nameservers   | 2001:4860:4860::8844                             |
    | enable_dhcp       | True                                             |
    | gateway_ip        | fd00:192:0:2::1                                  |
    | ip_version        | 6                                                |
    | ipv6_address_mode | slaac                                            |
    | ipv6_ra_mode      | slaac                                            |
    | name              | selfservice1-v6                                  |
    +-------------------+--------------------------------------------------+
    
  7. 创建一个路由器。

    $ openstack router create router1
    +-----------------------+---------+
    | Field                 | Value   |
    +-----------------------+---------+
    | admin_state_up        | UP      |
    | name                  | router1 |
    | status                | ACTIVE  |
    +-----------------------+---------+
    
  8. 将 IPv4 和 IPv6 子网作为接口添加到路由器。

    $ openstack router add subnet router1 selfservice1-v4
    $ openstack router add subnet router1 selfservice1-v6
    

    注意

    这些命令不提供任何输出。

  9. 将提供商网络作为路由器上的网关添加。

    $ openstack router set --external-gateway provider1 router1
    

验证网络操作

  1. 在每个计算节点上,验证是否创建了第二个 qdhcp 命名空间。

    # ip netns
    qdhcp-8b868082-e312-4110-8627-298109d4401c
    qdhcp-8fbc13ca-cfe0-4b8a-993b-e33f37ba66d1
    
  2. 在网络节点上,验证是否创建了 qrouter 命名空间。

    # ip netns
    qrouter-17db2a15-e024-46d0-9250-4cd4d336a2cc
    
  3. 获取常规(非管理)项目凭据。

  4. 创建适当的安全组规则以允许 ping 和 SSH 访问使用该网络的实例。

    $ openstack security group rule create --proto icmp default
    +------------------+-----------+
    | Field            | Value     |
    +------------------+-----------+
    | direction        | ingress   |
    | ethertype        | IPv4      |
    | protocol         | icmp      |
    | remote_ip_prefix | 0.0.0.0/0 |
    +------------------+-----------+
    
    $ openstack security group rule create --ethertype IPv6 \
      --proto ipv6-icmp default
    +-----------+-----------+
    | Field     | Value     |
    +-----------+-----------+
    | direction | ingress   |
    | ethertype | IPv6      |
    | protocol  | ipv6-icmp |
    +-----------+-----------+
    
    $ openstack security group rule create --proto tcp --dst-port 22 default
    +------------------+-----------+
    | Field            | Value     |
    +------------------+-----------+
    | direction        | ingress   |
    | ethertype        | IPv4      |
    | port_range_max   | 22        |
    | port_range_min   | 22        |
    | protocol         | tcp       |
    | remote_ip_prefix | 0.0.0.0/0 |
    +------------------+-----------+
    
    $ openstack security group rule create --ethertype IPv6 --proto tcp \
      --dst-port 22 default
    +----------------+---------+
    | Field          | Value   |
    +----------------+---------+
    | direction      | ingress |
    | ethertype      | IPv6    |
    | port_range_max | 22      |
    | port_range_min | 22      |
    | protocol       | tcp     |
    +----------------+---------+
    
  5. 启动一个具有连接到自助服务网络的接口的实例。例如,使用 flavor ID 1 的 CirrOS 镜像。

    $ openstack server create --flavor 1 --image cirros --nic net-id=NETWORK_ID selfservice-instance1
    

    NETWORK_ID 替换为自助服务网络的 ID。

  6. 确定实例的 IPv4 和 IPv6 地址。

    $ openstack server list
    +--------------------------------------+-----------------------+--------+----------------------------------------------------------+--------+---------+
    | ID                                   | Name                  | Status | Networks                                                 | Image  | Flavor  |
    +--------------------------------------+-----------------------+--------+----------------------------------------------------------+--------+---------+
    | c055cdb0-ebb4-4d65-957c-35cbdbd59306 | selfservice-instance1 | ACTIVE | selfservice1=192.0.2.4, fd00:192:0:2:f816:3eff:fe30:9cb0 | cirros | m1.tiny |
    +--------------------------------------+-----------------------+--------+----------------------------------------------------------+--------+---------+
    

    警告

    IPv4 地址位于私有 IP 地址范围 (RFC1918) 内。因此,网络服务对实例执行源网络地址转换 (SNAT),以访问外部网络,例如互联网。从外部网络(例如互联网)到实例的访问需要一个浮动 IPv4 地址。网络服务执行从浮动 IPv4 地址到自助服务网络上实例 IPv4 地址的目的网络地址转换 (DNAT)。另一方面,IPv6 的网络服务架构由于更大的地址空间和 NAT 的复杂性,缺乏对 NAT 的支持。因此,IPv6 没有浮动 IP 地址,网络服务仅对自助服务网络上的 IPv6 子网执行路由。换句话说,您不能依赖 NAT 来“隐藏”具有 IPv4 和 IPv6 地址或仅具有 IPv6 地址的实例,并且必须正确实施安全组以限制访问。

  7. 在控制器节点或任何可以访问提供商网络的宿主机上,ping 实例的 IPv6 地址。

    $ ping6 -c 4 fd00:192:0:2:f816:3eff:fe30:9cb0
    PING fd00:192:0:2:f816:3eff:fe30:9cb0(fd00:192:0:2:f816:3eff:fe30:9cb0) 56 data bytes
    64 bytes from fd00:192:0:2:f816:3eff:fe30:9cb0: icmp_seq=1 ttl=63 time=2.08 ms
    64 bytes from fd00:192:0:2:f816:3eff:fe30:9cb0: icmp_seq=2 ttl=63 time=1.88 ms
    64 bytes from fd00:192:0:2:f816:3eff:fe30:9cb0: icmp_seq=3 ttl=63 time=1.55 ms
    64 bytes from fd00:192:0:2:f816:3eff:fe30:9cb0: icmp_seq=4 ttl=63 time=1.62 ms
    
    --- fd00:192:0:2:f816:3eff:fe30:9cb0 ping statistics ---
    4 packets transmitted, 4 received, 0% packet loss, time 3004ms
    rtt min/avg/max/mdev = 1.557/1.788/2.085/0.217 ms
    
  8. 可选地,启用从外部网络(例如互联网)到实例的 IPv4 访问。

    1. 在提供商网络上创建一个浮动 IPv4 地址。

      $ openstack floating ip create provider1
      +-------------+--------------------------------------+
      | Field       | Value                                |
      +-------------+--------------------------------------+
      | fixed_ip    | None                                 |
      | id          | 22a1b088-5c9b-43b4-97f3-970ce5df77f2 |
      | instance_id | None                                 |
      | ip          | 203.0.113.16                         |
      | pool        | provider1                            |
      +-------------+--------------------------------------+
      
    2. 将浮动 IPv4 地址与实例关联。

      $ openstack server add floating ip selfservice-instance1 203.0.113.16
      

      注意

      此命令不会产生任何输出。

    3. 在控制器节点或任何可以访问提供商网络的宿主机上,ping 实例的浮动 IPv4 地址。

      $ ping -c 4 203.0.113.16
      PING 203.0.113.16 (203.0.113.16) 56(84) bytes of data.
      64 bytes from 203.0.113.16: icmp_seq=1 ttl=63 time=3.41 ms
      64 bytes from 203.0.113.16: icmp_seq=2 ttl=63 time=1.67 ms
      64 bytes from 203.0.113.16: icmp_seq=3 ttl=63 time=1.47 ms
      64 bytes from 203.0.113.16: icmp_seq=4 ttl=63 time=1.59 ms
      
      --- 203.0.113.16 ping statistics ---
      4 packets transmitted, 4 received, 0% packet loss, time 3005ms
      rtt min/avg/max/mdev = 1.473/2.040/3.414/0.798 ms
      
  9. 获取对实例的访问权限。

  10. 测试到互联网或其他外部网络的 IPv4 和 IPv6 连接。

网络流量流

以下部分描述了几个常见场景中网络流量的流程。南北流量网络流量在实例与外部网络(如 Internet)之间传输。东西流量网络流量在相同或不同网络的实例之间传输。在所有场景中,物理网络基础设施处理提供商网络和外部网络(如 Internet)之间的交换和路由。每个案例都引用以下一个或多个组件

  • 提供商网络 (VLAN)

    • VLAN ID 101(已标记)

  • 自助服务网络 1 (VXLAN)

    • VXLAN ID (VNI) 101

  • 自助服务网络 2 (VXLAN)

    • VXLAN ID (VNI) 102

  • 自助服务路由器

    • 提供商网络上的网关

    • 连接到自助服务网络 1 的接口

    • 连接到自助服务网络 2 的接口

  • 实例 1

  • 实例 2

南北场景 1:具有固定 IP 地址的实例

对于具有固定 IPv4 地址的实例,网络节点对从自助服务到外部网络(例如互联网)的南北流量执行 SNAT。对于具有固定 IPv6 地址的实例,网络节点执行常规的流量路由。

  • 实例位于计算节点 1 上,并使用自助服务网络 1。

  • 实例向互联网上的宿主机发送数据包。

以下步骤涉及计算节点 1

  1. 实例接口 (1) 通过 veth 对将数据包转发到安全组桥实例端口 (2)。

  2. 安全组桥上的安全组规则 (3) 处理数据包的防火墙和连接跟踪。

  3. 安全组桥 OVS 端口 (4) 通过 veth 对将数据包转发到 OVS 集成桥安全组端口 (5)。

  4. OVS 集成桥向数据包添加内部 VLAN 标记。

  5. OVS 集成桥交换内部 VLAN 标签与内部隧道 ID。

  6. OVS 集成桥补丁端口 (6) 将数据包转发到 OVS 隧道桥补丁端口 (7)。

  7. OVS 隧道桥 (8) 使用 VNI 101 封装数据包。

  8. 用于覆盖网络的底层物理接口 (9) 通过覆盖网络 (10) 将数据包转发到网络节点。

以下步骤涉及网络节点

  1. 用于覆盖网络的底层物理接口 (11) 将数据包转发到 OVS 隧道桥 (12)。

  2. OVS 隧道桥解封装数据包并添加内部隧道 ID。

  3. OVS 隧道桥交换内部隧道 ID 与内部 VLAN 标签。

  4. OVS 隧道桥补丁端口 (13) 将数据包转发到 OVS 集成桥补丁端口 (14)。

  5. OVS 集成桥用于自助服务网络的端口 (15) 删除内部 VLAN 标签并将数据包转发到路由器命名空间中的自助服务网络接口 (16)。

    • 对于 IPv4,路由器对数据包执行 SNAT,将源 IP 地址更改为提供商网络上的路由器 IP 地址,并通过提供商网络上的网关接口 (17) 将其发送到提供商网络上的网关 IP 地址。

    • 对于 IPv6,路由器将数据包发送到下一跳 IP 地址,通常是提供商网络上的网关 IP 地址,通过提供商网关接口 (17)。

  6. 路由器将数据包转发到 OVS 集成桥用于提供商网络的端口 (18)。

  7. OVS 集成桥将内部 VLAN 标签添加到数据包。

  8. OVS 集成桥 int-br-provider 补丁端口 (19) 将数据包转发到 OVS 提供商桥 phy-br-provider 补丁端口 (20)。

  9. OVS 提供商桥将实际 VLAN 标签 101 与实际 VLAN 标签交换。

  10. OVS 提供商桥提供商网络端口 (21) 将数据包转发到物理网络接口 (22)。

  11. 物理网络接口通过物理网络基础设施 (23) 将数据包转发到互联网。

注意

返回流量以相反的步骤执行。但是,如果没有浮动 IPv4 地址,提供商或外部网络上的宿主机无法发起与自助服务网络上的实例的连接。

Self-service networks using Open vSwitch - network traffic flow - north/south scenario 1

南北场景 2:具有浮动 IPv4 地址的实例

对于具有浮动 IPv4 地址的实例,网络节点对从实例到外部网络(例如互联网)的南北流量执行 SNAT,对从外部网络到实例的南北流量执行 DNAT。浮动 IP 地址和 NAT 不适用于 IPv6。因此,网络节点在此场景中路由 IPv6 流量。

  • 实例位于计算节点 1 上,并使用自助服务网络 1。

  • 互联网上的宿主机发送数据包到实例。

以下步骤涉及网络节点

  1. 物理网络基础设施 (1) 将数据包转发到提供商物理网络接口 (2)。

  2. 提供商物理网络接口将数据包转发到 OVS 提供商桥提供商网络端口 (3)。

  3. OVS 提供商桥将实际 VLAN 标签 101 与内部 VLAN 标签交换。

  4. OVS 提供商桥 phy-br-provider 端口 (4) 将数据包转发到 OVS 集成桥 int-br-provider 端口 (5)。

  5. 用于提供商网络的 OVS 集成桥端口 (6) 删除内部 VLAN 标签并将数据包转发到路由器命名空间中的提供商网络接口 (6)。

    • 对于 IPv4,路由器对数据包执行 DNAT,将目标 IP 地址更改为自助服务网络上的实例 IP 地址,并通过自助服务接口 (7) 将其发送到自助服务网络上的网关 IP 地址。

    • 对于 IPv6,路由器将数据包发送到下一跳 IP 地址,通常是自助服务网络上的网关 IP 地址,通过自助服务接口 (8)。

  6. 路由器将数据包转发到用于自助服务网络的 OVS 集成桥端口 (9)。

  7. OVS 集成桥向数据包添加内部 VLAN 标记。

  8. OVS 集成桥交换内部 VLAN 标签与内部隧道 ID。

  9. OVS 集成桥 patch-tun 补丁端口 (10) 将数据包转发到 OVS 隧道桥 patch-int 补丁端口 (11)。

  10. OVS 隧道桥 (12) 使用 VNI 101 封装数据包。

  11. 用于覆盖网络的底层物理接口 (13) 通过覆盖网络 (14) 将数据包转发到网络节点。

以下步骤涉及计算节点

  1. 用于覆盖网络的底层物理接口 (15) 将数据包转发到 OVS 隧道桥 (16)。

  2. OVS 隧道桥解封装数据包并添加内部隧道 ID。

  3. OVS 隧道桥交换内部隧道 ID 与内部 VLAN 标签。

  4. OVS 隧道桥 patch-int 补丁端口 (17) 将数据包转发到 OVS 集成桥 patch-tun 补丁端口 (18)。

  5. OVS 集成桥从数据包中删除内部 VLAN 标签。

  6. OVS 集成桥安全组端口 (19) 通过 veth 对将数据包转发到安全组桥 OVS 端口 (20)。

  7. 安全组桥上的安全组规则 (21) 处理数据包的防火墙和连接跟踪。

  8. 安全组桥实例端口 (22) 通过 veth 对将数据包转发到实例接口 (23)。

Self-service networks using Open vSwitch - network traffic flow - north/south scenario 2

注意

出站实例流量类似于南北场景 1,除了 SNAT 将数据包的源 IP 地址更改为提供商网络上的浮动 IPv4 地址,而不是路由器 IP 地址。

东西向场景 1:同一网络上的实例

具有固定 IPv4/IPv6 地址或浮动 IPv4 地址的实例在包含这些实例的计算节点之间直接通信。

默认情况下,VXLAN 协议不知道目标位置,并使用组播来发现它。发现后,它将位置存储在本地转发数据库中。在大型部署中,发现过程会生成大量所有节点都必须处理的网络。为了消除后者并通常提高效率,网络服务包括第二层填充机制驱动程序,该驱动程序自动填充 VXLAN 接口的转发数据库。示例配置启用此驱动程序。有关更多信息,请参阅 ML2 插件

  • 实例 1 位于计算节点 1 上,并使用自助服务网络 1。

  • 实例 2 位于计算节点 2 上,并使用自助服务网络 1。

  • 实例 1 向实例 2 发送数据包。

以下步骤涉及计算节点 1

  1. 实例 1 接口 (1) 通过 veth 对将数据包转发到安全组桥实例端口 (2)。

  2. 安全组桥上的安全组规则 (3) 处理数据包的防火墙和连接跟踪。

  3. 安全组桥 OVS 端口 (4) 通过 veth 对将数据包转发到 OVS 集成桥安全组端口 (5)。

  4. OVS 集成桥向数据包添加内部 VLAN 标记。

  5. OVS 集成桥交换内部 VLAN 标签与内部隧道 ID。

  6. OVS 集成桥补丁端口 (6) 将数据包转发到 OVS 隧道桥补丁端口 (7)。

  7. OVS 隧道桥 (8) 使用 VNI 101 封装数据包。

  8. 用于覆盖网络的底层物理接口 (9) 通过覆盖网络 (10) 将数据包转发到计算节点 2。

以下步骤涉及计算节点 2

  1. 用于覆盖网络的底层物理接口 (11) 将数据包转发到 OVS 隧道桥 (12)。

  2. OVS 隧道桥解封装数据包并添加内部隧道 ID。

  3. OVS 隧道桥交换内部隧道 ID 与内部 VLAN 标签。

  4. OVS 隧道桥 patch-int 补丁端口 (13) 将数据包转发到 OVS 集成桥 patch-tun 补丁端口 (14)。

  5. OVS 集成桥从数据包中删除内部 VLAN 标签。

  6. OVS 集成桥安全组端口 (15) 通过 veth 对将数据包转发到安全组桥 OVS 端口 (16)。

  7. 安全组桥上的安全组规则 (17) 处理数据包的防火墙和连接跟踪。

  8. 安全组桥实例端口 (18) 通过 veth 对将数据包转发到实例 2 接口 (19)。

Self-service networks using Open vSwitch - network traffic flow - east/west scenario 1

注意

返回流量以相反的步骤执行。

东西向场景 2:不同网络上的实例

使用固定 IPv4/IPv6 地址或浮动 IPv4 地址的实例通过网络节点上的路由器进行通信。自助服务网络必须位于同一路由器上。

  • 实例 1 位于计算节点 1 上,并使用自助服务网络 1。

  • 实例 2 位于计算节点 1 上,并使用自助服务网络 2。

  • 实例 1 向实例 2 发送数据包。

注意

两个实例位于同一计算节点上,以说明 VXLAN 如何使多个覆盖可以使用相同的第三层网络。

以下步骤涉及计算节点

  1. 实例接口 (1) 通过 veth 对将数据包转发到安全组桥实例端口 (2)。

  2. 安全组桥上的安全组规则 (3) 处理数据包的防火墙和连接跟踪。

  3. 安全组桥 OVS 端口 (4) 通过 veth 对将数据包转发到 OVS 集成桥安全组端口 (5)。

  4. OVS 集成桥向数据包添加内部 VLAN 标记。

  5. OVS 集成桥交换内部 VLAN 标签与内部隧道 ID。

  6. OVS 集成桥 patch-tun 补丁端口 (6) 将数据包转发到 OVS 隧道桥 patch-int 补丁端口 (7)。

  7. OVS 隧道桥 (8) 使用 VNI 101 封装数据包。

  8. 用于覆盖网络的底层物理接口 (9) 通过覆盖网络 (10) 将数据包转发到网络节点。

以下步骤涉及网络节点

  1. 用于覆盖网络的底层物理接口 (11) 将数据包转发到 OVS 隧道桥 (12)。

  2. OVS 隧道桥解封装数据包并添加内部隧道 ID。

  3. OVS 隧道桥交换内部隧道 ID 与内部 VLAN 标签。

  4. OVS 隧道桥 patch-int 补丁端口 (13) 将数据包转发到 OVS 集成桥 patch-tun 补丁端口 (14)。

  5. 用于自助服务网络 1 (15) 的 OVS 集成桥接端口会移除内部 VLAN 标签,并将数据包转发到路由器命名空间中的自助服务网络 1 接口 (16)。

  6. 路由器通过自助服务网络 2 接口 (17) 将数据包发送到下一跳 IP 地址,通常是自助服务网络 2 上的网关 IP 地址。

  7. 路由器将数据包转发到用于自助服务网络 2 (18) 的 OVS 集成桥接端口。

  8. OVS 集成桥将内部 VLAN 标签添加到数据包。

  9. OVS 集成桥交换内部 VLAN 标签与内部隧道 ID。

  10. OVS 集成桥接 patch-tun 补丁端口 (19) 将数据包转发到 OVS 隧道桥接 patch-int 补丁端口 (20)。

  11. OVS 隧道桥接 (21) 使用 VNI 102 封装数据包。

  12. 用于覆盖网络的底层物理接口 (22) 通过覆盖网络 (23) 将数据包转发到计算节点。

以下步骤涉及计算节点

  1. 用于覆盖网络的底层物理接口 (24) 将数据包转发到 OVS 隧道桥接 (25)。

  2. OVS 隧道桥解封装数据包并添加内部隧道 ID。

  3. OVS 隧道桥交换内部隧道 ID 与内部 VLAN 标签。

  4. OVS 隧道桥接 patch-int 补丁端口 (26) 将数据包转发到 OVS 集成桥接 patch-tun 补丁端口 (27)。

  5. OVS 集成桥从数据包中删除内部 VLAN 标签。

  6. OVS 集成桥接安全组端口 (28) 通过 veth 对将数据包转发到安全组桥接 OVS 端口 (29)。

  7. 安全组桥接上的安全组规则 (30) 处理数据包的防火墙和连接跟踪。

  8. 安全组桥接实例端口 (31) 通过 veth 对将数据包转发到实例接口 (32)。

注意

返回流量以相反的步骤执行。

Self-service networks using Open vSwitch - network traffic flow - east/west scenario 2