Open vswitch:使用DVR使用高可用性

Posted zhongguiyao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Open vswitch:使用DVR使用高可用性相关的知识,希望对你有一定的参考价值。

 

这个架构示例通过分布式虚拟路由器(DVR)高可用性机制扩展了自助服务部署示例,该机制在计算节点(而不是特定场景的网络节点)上提供self-service和Provider网络之间的连接。对于具有浮动IPv4地址的实例,self-service和Provider网络之间的路由完全驻留在计算节点上,以消除网络节点的单点故障和性能问题。

对于在同一分布式虚拟路由器上使用自助网络的固定或浮动IPv4地址的实例,路由也完全驻留在计算节点上。

但是,具有固定IP地址的实例仍然依赖于网络节点在self-service和Provider网络之间进行路由和SNAT服务。

 

请考虑此高可用性机制的以下属性, 以确定您的环境中的实用性:

1.如果实例位于具有浮动IPv4地址的self-service网络上,则仅通过实例所在的计算节点提供到实例的连接。
2.仅具有IPv6地址或同时具有IPv4和IPv6地址的self-service网络上的实例依赖于网络节点进行IPv6连接。
3.每个计算节点上的路由器的实例在其包含网关的提供商网络上消耗IPv4地址。 #这个暂时理解不了

 

 

前提条件:

 

使用以下组件修改计算节点:

安装openstack 网络3层代理

 

注意:

考虑添加至少一个额外的网络节点,为具有固定IP地址的实例提供高可用性。有关更多信息,请参阅带有VRRP的分布式虚拟路由。

 

 

架构:

 

技术分享图片

 

 下图显示了一个self-service网络和一个未标记(Flat)网络的组件和连接性。在这种情况下,实例与网络的DHCP代理驻留在同一个计算节点上。

如果DHCP代理驻留在另一个计算节点上,后者只包含一个带有OVS集成网桥上端口的DHCP名称空间。

 

技术分享图片

 

 

示例配置

 

使用以下示例配置作为模板,将对使用DVR的高可用性的支持添加到支持self-service网络的现有操作环境中。

 

控制节点:

1.编辑neutron.conf文件:

默认情况下为所有路由器启用分布式路由。

[DEFAULT]
router_distributed = True

 

重启neutron-server服务

 

网络节点:

openswitch_agent.ini下启用分发路由

[DEFAULT]
enable_distributed_routing = True

 

l3_agent.ini文件下配置三层代理去提供SNAT服务

[DEFAULT]
agent_mode = dvr_snat

 

 

注意:

external_network_bridge选项故意不包含任何值。

 

重启Open vSwitch agent和Layer-3 agent服务

 

 

计算节点

1.安装网络服务3层代理

2.在openswitch_agent.ini下启用分发路由

[DEFAULT]
enable_distributed_routing = True

 

3.在l3_agent.ini下配置3层代理

 

[DEFAULT]
interface_driver = openvswitch
external_network_bridge =
agent_mode = dvr

 

注意:

 

external_network_bridge选项故意不包含任何值。

 

重启Open vSwitch agent和Layer-3 agent服务

 

 

验证:

1.获取管理项目证书。

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

 

$ openstack network agent list
+--------------------------------------+--------------------+----------+-------------------+-------+-------+---------------------------+
| ID                                   | Agent Type         | Host     | Availability Zone | Alive | State | Binary                    |
+--------------------------------------+--------------------+----------+-------------------+-------+-------+---------------------------+
| 05d980f2-a4fc-4815-91e7-a7f7e118c0db | L3 agent           | compute1 | nova              | True  | UP    | neutron-l3-agent          |
| 1236bbcb-e0ba-48a9-80fc-81202ca4fa51 | Metadata agent     | compute2 |                   | True  | UP    | neutron-metadata-agent    |
| 2a2e9a90-51b8-4163-a7d6-3e199ba2374b | L3 agent           | compute2 | nova              | True  | UP    | neutron-l3-agent          |
| 457d6898-b373-4bb3-b41f-59345dcfb5c5 | Open vSwitch agent | compute2 |                   | True  | UP    | neutron-openvswitch-agent |
| 513caa68-0391-4e53-a530-082e2c23e819 | Linux bridge agent | compute1 |                   | True  | UP    | neutron-linuxbridge-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 |                   | True  | UP    | neutron-openvswitch-agent |
| a6c69690-e7f7-4e56-9831-1282753e5007 | Metadata agent     | compute1 |                   | 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 |                   | True  | UP    | neutron-openvswitch-agent |
+--------------------------------------+--------------------+----------+-------------------+-------+-------+---------------------------+

 

 

创建初始网络

 

类似于self-service部署示例,此配置支持多个VXLAN自助服务网络。在启用高可用性之后,所有其他路由器都使用分布式路由。

下面的过程创建一个额外的自助网络和路由器。网络服务还支持向现有路由器添加分布式路由。

1.获取常规(非管理)项目证书。

2.创建一个self-service网络

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

 

 

3.在self-service网络上创建IPv4子网。

openstack subnet create --subnet-range 192.0.2.0/24   --network selfservice2 --dns-nameserver 8.8.4.4 selfservice2-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              | selfservice2-v4           |
+-------------------+---------------------------+

 

 

4.在self-service网络上创建IPv6子网。

 

 openstack subnet create --subnet-range fd00:192:0:2::/64 --ip-version 6   --ipv6-ra-mode slaac --ipv6-address-mode slaac --network selfservice2   --dns-nameserver 2001:4860:4860::8844 selfservice2-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              | selfservice2-v6                                      |
+-------------------+------------------------------------------------------+

 

5.创建一个路由器

 openstack router create router2
+-----------------------+---------+
| Field                 | Value   |
+-----------------------+---------+
| admin_state_up        | UP      |
| name                  | router2 |
| status                | ACTIVE  |
+-----------------------+---------+

 

6.在路由器上添加IPv4和IPv6子网作为接口。

$ openstack router add subnet router2 selfservice2-v4
$ openstack router add subnet router2 selfservice2-v6

 

7.添加provider网络作为路由器上的网关。

 

 openstack router set router2 --external-gateway provider1

 

验证网络操作

1.获取管理项目证书。

2.验证路由器上的分布式路由。

$ openstack router show router2
+-------------------------+---------+
| Field                   | Value   |
+-------------------------+---------+
| admin_state_up          | UP      |
| distributed             | True    |
| ha                      | False   |
| name                    | router2 |
| status                  | ACTIVE  |
+-------------------------+---------+

 

 

3.在每个计算节点上,使用相同ID验证创建的qrouter名称空间。

 

# ip netns
qrouter-78d2f628-137c-4f26-a257-25fc20f203c1

 

4.在网络节点上,用相同的ID验证创建的snat和qrouter名称空间。

# ip netns
snat-78d2f628-137c-4f26-a257-25fc20f203c1
qrouter-78d2f628-137c-4f26-a257-25fc20f203c1

 

5.在附加的self-service网络上使用一个接口启动实例。例如,使用flavor ID 1的CirrOS镜像:

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

 

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

 openstack server list

 

7.在Provider网络上创建一个浮动的IPv4地址。

$ openstack floating ip create provider1

 

8.将浮动的IPv4地址与实例关联起来。

openstack server add floating ip selfservice-instance2 203.0.113.17

 

9.在包含实例的计算节点上,验证fip名称空间的创建,其ID与提供者网络相同。

# ip netns
fip-4bfa3075-b4b2-4f7d-b88e-df1113942d43

 

 

网络流量流向

 

 

以下部分描述了几种常见场景中的网络流量

南北网络流量在实例和外部网络(如Internet)之间传输。

东西向网络流量在相同或不同网络上的实例之间传输。

 

在所有场景中,物理网络基础设施处理provider网络和外部网络(如Internet)之间的交换和路由。每个案例引用一个或多个以下组件:

Provider network (VLAN):
    VLAN ID 101 (tagged) Self-service network 1 (VXLAN):
    VXLAN ID (VNI) 101 Self-service network 2 (VXLAN):
    VXLAN ID (VNI) 102 Self-service router:
    Gateway on the provider network
    Interface on self-service network 1
    Interface on self-service network 2

Instance 1

Instance 2

 

 

 

 

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

 

对于具有固定IPv4地址的实例,网络节点对从self-service传递到Internet等外部网络的南北通信量执行SNAT。

对于具有固定IPv6地址的实例,网络节点在self-service和外部网络之间执行常规的流量路由。

实例驻留在计算节点1上,并使用自助服务网络1。

实例向Internet上的主机发送数据包。

 

 

 

技术分享图片

 

以下步骤涉及计算节点1:

1.实例接口(1)通过veth对将数据包转发到安全组桥接实例端口(2)。
2.在安全组网桥上的安全组规则(3)处理数据包的防火墙和连接跟踪。
3.安全组网桥OVS端口(4)通过veth对将数据包转发到OVS集成网桥安全组端口(5)。
4.OVS集成网桥向包添加了一个内部VLAN标记。
5.OVS集成网桥将内部VLAN标签交换为内部隧道ID。
6.OVS集成网桥patch端口(6)将数据包转发到OVS tunnel网桥patch端口(7)。
7.OVS tunnel网桥(8)使用VNI 101封装包。
8.覆盖网络的底层物理接口(9)通过覆盖网络(10)将包转发给网络节点。

 

 

以下步骤涉及网络节点:

 

1.覆盖网络的底层物理接口(11)将包转发到OVS tunnel网桥(12)。
2.OVS tunnel网桥打开包并添加一个内部隧道ID。

 

以上是关于Open vswitch:使用DVR使用高可用性的主要内容,如果未能解决你的问题,请参考以下文章

如何升级Mininet的Open vSwitch版本

Open vSwitch使用案例扩展实验

玩转OpenStack网络Neutron--使用Open vSwitch实现VLAN类型租户网络

虚拟化网络之Open-vswitch的使用实例

Docker实践 -- 使用Open vSwitch实现跨主机通信

Open vSwitch