5.场景3:高可用性使用分布式虚拟路由(DVR)

时间:2024-02-18 08:23:18

 

这个场景描述了使用ML2插件和Open vSwitch的OpenStack网络服务的高可用性分布式虚拟路由(DVR)实现。示例配置创建了一个Flat外部网络和一个VXLAN项目(租户)网络。然而,这种配置也支持VLAN外部网络、VLAN项目网络和GRE项目网络。

DVR架构通过直接连接到计算节点上的外部网络来增强遗留体系结构。

对于具有浮动IP地址的实例,项目和外部网络之间的路由完全驻留在计算节点上,以消除遗留网络节点的单点故障和性能问题。路由也完全驻留在计算节点上,这些节点使用相同的分布式虚拟路由器上的项目网络来固定或浮动IP地址。然而,具有固定IP地址的实例仍然依赖于项目和外部网络之间的路由和SNAT服务的网络节点。

 

注意:在Juno版本中,DVR支持VXLAN和GRE项目网络。在Kilo版本中,DVR增加了对VLAN项目网络的支持。所有的版本支持Flat和VLAN外部网络。

 

一、先决条件

 

这些先决条件定义了部署此场景所需的最小物理基础设施和立即的OpenStack服务依赖关系。

例如,网络服务直接依赖于身份服务,而计算服务直接依赖于网络服务。而像镜像服务没有依赖性的服务,是因为网络服务没有直接依赖它。

然而,计算服务依赖于镜像服务来启动一个实例。本场景中的示例配置假定了网络服务组件的基本配置知识。

 

基础设施

 



一个具有网络管理接口的控制器节点。

一个具有四个网络接口的网络节点:管理、项目隧道网络、VLAN项目网络和外部(通常是Internet)。Open vSwitch网桥br-vlan必须在VLAN接口上包含一个端口,而Open vSwitch网桥br- ex必须在外部接口上包含一个端口。

至少有两个具有四个网络接口的计算节点:管理、项目隧道网络、项目VLAN网络和外部(通常是Internet)。Open vSwitch网桥br-vlan必须在VLAN接口上包含一个端口,而Open vSwitch网桥br- ex必须在外部接口上包含一个端口。

 

在示例配置中,管理网络使用10.0.0 / 24,隧道网络使用10.0.1.0 / 24,外部网络使用203.0.113.0 / 24。VLAN网络不需要IP地址范围,因为它只处理第二层连接。

 

硬件要求:

 

 

  网络布局

 

 

 

 

 服务布局

 

 注意:对于VLAN外部和项目网络,物理网络基础设施必须支持VLAN标记。为了获得VXLAN项目网络的最佳性能,网络基础设施应该支持巨型帧。

 

控制节点的OpenStack服务

 

neutron.conf文件中具有数据库服务器的合适配置
在neutron.conf文件中具有消息队列服务的合适配置。
在neutron.conf文件中具有openstack keystone服务的合适配置
在nova.conf文件中具有openstack计算 控制/管理服务的合适配置去使用neutron
neutron服务器服务、ML2插件和任何依赖关系。

 

网络节点的Openstack服务

在neutron.conf文件中具有openstack keystone服务的合适配置
Open vSwitch服务、ML2插件、打开的vSwitch代理、L3代理、DHCP代理、元数据代理和任何依赖关系。

 

计算节点的Openstack服务

 

在neutron.conf文件中具有openstack keystone服务的合适配置

在nova.conf文件中具有openstack计算 控制/管理服务的合适配置去使用neutron
Open vSwitch服务、ML2插件、打开的vSwitch代理、L3代理、元数据代理和任何依赖项。

 

体系结构

 

一般架构

 

 注意:“北南”一词通常定义了网络流量,即在一个实例和外部网络(通常是因特网)之间传输的网络流量,术语“东西”通常定义了在实例之间传输的网络流量。

 

 网络节点包含以下网络组件:

1.Open vSwitch代理管理虚拟交换机之间的连接,以及通过虚拟端口与其他网络组件(如名称空间、Linux网桥和底层接口)进行交互。

2.管理qdhcp名称空间的DHCP代理。dhcp名称空间为使用项目网络的实例提供dhcp服务。

3.L3代理管理qrouter和snat名称空间。

对于在遗留路由器上使用项目网络的实例,qrouter名称空间路由南北和东西网络流量,并执行DNAT / SNAT,类似于遗留场景。
它们还在实例和元数据代理之间路由元数据通信。 对于在分布式路由器上使用项目网络的固定IP地址的实例,snat命名空间为南北网络流量执行snat。

4.元数据代理在遗留路由器上使用项目网络处理实例的元数据操作。

 

 

 网络节点组件回顾

 

 

 

 网络节点组件连接

 

 

 计算节点包含以下网络组件:

1.Open vSwitch代理管理虚拟交换机之间的连接,以及通过虚拟端口与其他网络组件(如名称空间、Linux网桥和底层接口)进行交互。

2.L3代理管理qrouter和fip名称空间。

对于在分布式路由器上使用项目网络的浮动IP地址的实例,fip命名空间路由南北向网络流量并执行DNAT / SNAT。

对于有固定或浮动IP地址的实例,在分布式路由器上使用项目网络,qrouter命名空间路由东西向流量。

 

3.元数据代理在分布式路由器上使用项目网络来处理实例的元数据操作。

4.Linux网桥处理安全组

 

注意:由于Open vSwitch和iptables的限制,网络服务使用Linux网桥来管理实例的安全组。

 

计算节点组件回顾

 

 

计算节点组件连接 

 

 

二、Packet flow

 

对于在分布式路由器上使用项目网络固定IP地址的实例,网络节点在项目和外部网络之间传输南北网络流量。

 

外部网络

网络203.0.113.0/24
IP地址分配从203.0.113.101到203.0.113.200
带有203.0.113.101的项目网络路由器接口TR
项目网络SNAT接口192.168.1.2与MAC地址TN

 

项目网络

网络192.168.1.0/24

带有192.168.1.1与MAC地址TG的网关

计算节点1:

带有192.168.1.11与MAC地址I1的实例1
DVR MAC地址D1

实例1驻留在计算节点1上,并使用一个项目网络。

实例向外部网络的主机发送一个包。

 

注意:这个场景支持VLAN和GRE / VXLAN项目网络。但是,数据包流只考虑使用VXLAN项目网络来简化的一个实例。

 

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

1.实例1的tap接口(1)将包转发到Linux网桥qbr。该包包含目标MAC地址TG,因为目的地驻留在另一个网络上。

2.安全组规则(2)在Linux网桥qbr上处理数据包的状态跟踪。

3.Linux网桥qbr将数据包转发到Open vSwitch集成网桥br-int。

4.Open vSwitch集成网桥br-int修该改包含项目网络1的内部标记的数据包。

5.在分布式路由器名称空间qrouter中,Open vSwitch集成网桥将数据包(3)转发到项目网络1网关TG接口qr。

6.分布式路由器qrouter名称空间解决了在SNAT命名空间SNAT上的sg接口(4)的项目网络1 SNAT接口MAC地址TN,并将数据包转发到Open vSwitch集成网桥br-int。

7.Open vSwitch集成网桥br-int将数据包转发到Open vSwitch tunnel网桥br-tun上。

8.Open vSwitch tunnel网桥br-tun用D1取代了信息包源MAC地址I1。

9.Open vSwitchtunnel网桥br-tun将包封装在VXLAN隧道中,其中包含项目网络1的标签。

10.Open vSwitchtunnel网桥br-tun通过隧道接口将数据包转发到网络节点。

 

以下步骤涉及网络节点:

1.tunnel接口将数据包转发到Open vSwitch tunnel 网桥br-tun。

2.Open vSwitch tunnel网桥br-tun打开包,并为项目网络1添加内部标签。

3.Open vSwitchtunnel网桥br-tun将包转发到Open vSwitch集成网桥br-int。

4.Open vSwitch集成网桥br-int用TG替换了包源MAC地址D1。

5.Open vSwitch集成网桥br-int将包转发到SNAT命名空间SNAT中的sg接口(4)。

6.iptables服务(5)在qg接口上使用project network 1路由器接口IP地址TR在包上执行SNAT。

7.qg接口将包转发给Open vSwitch外部网桥br-ex。

8.Open vSwitch外部网桥br- ex通过外部接口将包转发到外部网络。

 

 

返回的流量也遵循类似的步骤。

 

有固定ip地址的实例的南北网络流量流向

 

 

 

 

 

案例2:具有浮动IP地址的实例的南北流量

对于使用分布式路由器的IP地址的实例,计算节点包含了实例路由项目和外部网络之间的南北网络通信,避开了网络节点。

考虑到这种情况的复杂性,下面的案例涵盖了从外部网络到实例的网络流量以及从实例到外部网络的流量。

 

 

外部网络

网络203.0.113.0/24

带有MAC地址EG的网关203.0.113.1,

浮动IP范围203.0.113.101至203.0.113.200

带有203.0.113.101的项目网络路由器接口 TR

 



项目网络

网络192.168.1.0/24

带有MAC地址TG的网关192.168.1.1

 



计算节点

带有MAC地址I1和浮动IP地址为203.0.113.102 F1的实例1 192.168.1.11

DVR MAC地址D1

DVR内部IP地址DA1和DA2

 



实例1驻留在计算节点1上,并使用一个项目网络。

实例1向外部网络的主机发送数据包。

 

 

请注意:这个场景支持VLAN和GRE / VXLAN项目网络。但是,数据包流只考虑使用VXLAN项目网络来简化的一个实例。

 

下面的步骤涉及到从外部网络到计算节点1的实例的数据包:

1.外部接口将包转发给Open vSwitch外部网桥br-ex。该包包含目标IP地址F1。

2.Open vSwitch外部网桥br-ex将数据包转发到浮动IP名称空间fip中的fg接口(1)。fg接口对实例浮动IP地址F1的任何ARP请求作出响应。

3.浮动IP名称空间fip将数据包(2)路由到使用DVR内部IP地址DA1和DA2的分布式路由器名称空间qrouter。fpr接口(3)包含DVR内部IP地址DA1,rfp接口(4)包含DVR内部IP地址DA2。

4.浮动IP名称空间fip将数据包转发到分布式路由器名称空间qrouter中的rfp接口(5)。rfp接口还包含实例浮动IP地址F1。

5.分布式路由器名称空间qrouter中的iptables服务(6)使用目标IP地址在包上执行DNAT。qr接口(7)包含项目网络网关IP地址TG。

6.分布式路由器名称空间qrouter将数据包转发到Open vSwitch集成网桥br-int。

7.Open vSwitch集成网桥br-int将包转发到Linux网桥qbr。

8.安全组规则(8)在Linux网桥qbr上处理数据包的防火墙和状态跟踪。

9.Linux网桥qbr将包转发到实例tap接口(9)。

 

 

下面的步骤涉及到从计算节点1的实例到外部网络的数据包出站:

1.实例1的tap接口(9)将包转发到Linux网桥qbr。该包包含目标MAC地址TG1,因为目的地驻留在另一个网络上。

2.安全组规则(8)在Linux网桥qbr上处理数据包的状态跟踪。

3.Linux网桥qbr将数据包转发到Open vSwitch集成网桥br-int。

4.在分布式路由器名称空间qrouter中,Open vSwitch集成网桥br-int将包转发到qr接口(7)。qr接口包含了TG项目网络网关IP地址。

5.iptables服务(6)使用rfp接口(5)作为源IP地址在包上执行SNAT。rfp接口包含实例浮动IP地址F1。

6.分布式路由器名称空间qrouter(2)使用DVR内部IP地址DA1和DA2将数据包路由到浮动IP名称空间fip。rfp接口(4)包含DVR内部IP地址DA2,fpr接口(3)包含DVR内部IP地址DA1。

7.在浮动IP名称空间fip中,fg接口(1)将包转发给Open vSwitch外部网桥br-ex。fg接口包含项目路由器外部IP地址TE。

8.OpenvSwitch外部桥br-ex通过外部接口将包转发到外部网络。

 

有固定ip地址的实例的南北网络流量流向

 

 

 

 案例3:在同一路由器上使用不同网络的实例的东/西向流量

 对于用分布式路由器的项目网络使用固定或浮动IP地址的实例,计算节点将在同一分布式虚拟路由器的项目网络中,连接的项目网络之间的东西网络传输,避开网络节点。

 

项目网络1

网络192.168.1.0/24

带有MAC地址TG1的网关192.168.1.1

 



项目网络2

网络192.168.2.0/24

带有MAC地址TG2的网关192.168.2.1

 



计算节点1

带有MAC地址I1的实例1 192.168.1.11

DVR MAC地址D1


计算节点2

带有MAC地址为I2的实例2 192.168.2.11

DVR MAC地址D2


实例1驻留在计算节点1上,并使用project network 1。

实例2驻留在计算节点2上,并使用project network 2。

两个项目网络都位于相同的分布式虚拟路由器上。

实例1发送一个包到实例2。

 

注意:这个场景支持VLAN和GRE / VXLAN项目网络。但是,数据包流只考虑使用VXLAN项目网络来简化的一个实例。

 

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

1.实例1的tap接口(1)将包转发到Linux网桥qbr。该包包含目标MAC地址TG1,因为目的地驻留在另一个网络上。
2.安全组规则(2)在Linux网桥qbr上处理数据包的状态跟踪。
3.Linux网桥qbr将数据包转发到Open vSwitch集成网桥br-int。
4.在分布式路由器名称空间qrouter中,Open vSwitch集成网桥br-int将包转发到项目网络1接口(3)。
5.分布式路由器名称空间qrouter将数据包路由到项目网络2。
6.在分布式路由器名称空间qrouter名称空间中,项目网络2接口(4)将包转发给Open vSwitch集成网桥br-int。
7.Open vSwitch集成网桥br-int修改包含项目网络2的内部标记的数据包
8.Open vSwitch集成网桥br-int将数据包转发到Open vSwitchtunnel网桥br-tun上。
9.Open vSwitchtunnel网桥br-tun用D1取代了信息包源MAC地址I1。
10.Open vSwitch tunnel网桥br-tun将包封装在VXLAN隧道中,其中包含项目网络2的标签。
11.Open vSwitch隧道桥br-tun通过隧道接口将包转发给计算节点2。

 

 

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

1.tunnel接口将数据包转发到Open vSwitch tunnel网桥br-tun。
2.Open vSwitch tunnel网桥br-tun打开包。
3.Open vSwitch tunnel网桥br-tun将包转发到Open vSwitch集成网桥br-int。
4.Open vSwitch集成网桥br-int用TG2替换了包源MAC地址D1。
5.Open vSwitch集成网桥br-int将包转发到Linux网桥qbr。
6.安全组规则(7)在Linux桥qbr上处理数据包的防火墙和状态跟踪。
7.Linux桥qbr将包转发给实例2 tap接口(8)。

 

 

注意:从计算节点1到达的数据包不会在计算节点2的qrouter名称空间中遍历项目网络接口(5、6)。然而,返回的流量会遍历它们。

 

在同一路由器上使用不同网络的实例的东/西向网络流量

 

 

 

 

 示例配置


使用下面的示例配置作为在您的环境中部署该场景的模板。

 注意:这个配置主要支持Kilo版本

 

控制节点

1.配置常见的选项。编辑/etc/neutron/neutron.配置文件:

 

[DEFAULT]
verbose = True
router_distributed = True
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = True

 

请注意:

配置router_distributed = True选项为所有用户创建分布式路由器。没有它,只有特权用户才能在路由器创建过程中使用分布式的真选项来创建分布式路由器。

 

 2.配置ML2插件。编辑/etc/neutron/plugins/ml2/ml2_conf.ini文件:

[ml2]
type_drivers = flat,vlan,gre,vxlan
tenant_network_types = vlan,gre,vxlan
mechanism_drivers = openvswitch,l2population

[ml2_type_flat]
flat_networks = external

[ml2_type_vlan]
network_vlan_ranges = external,vlan:MIN_VLAN_ID:MAX_VLAN_ID

[ml2_type_gre]
tunnel_id_ranges = MIN_GRE_ID:MAX_GRE_ID

[ml2_type_vxlan]
vni_ranges = MIN_VXLAN_ID:MAX_VXLAN_ID
vxlan_group = 239.1.1.1

[securitygroup]
firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
enable_security_group = True
enable_ipset = True

替换MIN_VLAN_ID、MAX_VLAN_ID、MIN_GRE_ID、MAX_GRE_ID、MIN_VXLAN_ID和MAX_VXLAN_ID和VLAN、GRE和VXLAN ID最小值,以及适合您的环境的最大值。

 

请注意

tenant_network_types选项中的第一个值在常规用户创建网络时成为默认项目网络类型。
network_vlan_range选项中的外部值缺少VLAN ID范围,以支持管理用户使用任意VLAN ID。

 

3.启动服务

 

 

网络节点

1.配置内核以启用包转发和禁用反向路径过滤。编辑/etc/sysctl.配置文件:

net.ipv4.ip_forward=1
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0

2.加载新内核配置:

$ sysctl -p

 

 3.配置常见的选项。编辑/etc/neutron/neutron.配置文件:

[DEFAULT]
verbose = True

 

4.配置Open vSwitch代理。编辑/etc/neutron/plugins/ml2/ml2_conf.ini文件:

[ovs]
local_ip = TUNNEL_INTERFACE_IP_ADDRESS
bridge_mappings = vlan:br-vlan,external:br-ex

[agent]
l2_population = True
tunnel_types = gre,vxlan
enable_distributed_routing = True
arp_responder = True

[securitygroup]
firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
enable_security_group = True
enable_ipset = True

 

使用处理GRE / VXLAN项目网络的接口的IP地址替换TUNNEL_INTERFACE_IP_ADDRESS。

 

5.配置L3代理。编辑/etc/neutron/l3_agent.ini文件:

[DEFAULT]
verbose = True
interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver
use_namespaces = True
external_network_bridge =
router_delete_namespaces = True
agent_mode = dvr_snat

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

 

6.配置DHCP代理。编辑/etc/neutron/dhcp_agent.ini文件:

 

[DEFAULT]
verbose = True
interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
use_namespaces = True
dhcp_delete_namespaces = True

 

7.(可选)为VXLAN项目网络减少MTU。

 
1.编辑/etc/neutron/dhcp_agent。ini文件:

[DEFAULT]
dnsmasq_config_file = /etc/neutron/dnsmasq-neutron.conf


2.编辑/etc/neutron/dnsmasq-neutron.conf文件:

dhcp-option-force=26,1450
 

 

8.配置元数据代理。编辑/etc/neutron/metadata_agent.ini文件:

[DEFAULT]
verbose = True
nova_metadata_ip = controller
metadata_proxy_shared_secret = METADATA_SECRET

 

用合适的环境值替换METADATA_SECRET。

 

9.开始以下服务:

    Open vSwitch
    Open vSwitch agent
    L3 agent
    DHCP agent
    Metadata agent

 

计算节点

 

1.配置内核以启用网桥上的iptables并禁用反向路径过滤。编辑/etc/sysctl.配置文件:

net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1

2.加载新内核配置:

$ sysctl -p

 

3.配置常见的选项。编辑/etc/neutron/neutron.配置文件:

[DEFAULT]
verbose = True

 

4.配置Open vSwitch代理。编辑/etc/neutron/plugins/ml2/ml2_conf.ini文件:

[ovs]
local_ip = TUNNEL_INTERFACE_IP_ADDRESS
bridge_mappings = vlan:br-vlan,external:br-ex

[agent]
l2_population = True
tunnel_types = gre,vxlan
enable_distributed_routing = True
arp_responder = True

[securitygroup]
firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
enable_security_group = True
enable_ipset = True

使用处理GRE / VXLAN项目网络的接口的IP地址替换TUNNEL_INTERFACE_IP_ADDRESS。

 

 5.配置L3代理。编辑/etc/neutron/l3_agent.ini文件:

 

[DEFAULT]
verbose = True
interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver
use_namespaces = True
external_network_bridge =
router_delete_namespaces = True
agent_mode = dvr

 

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

 

6.配置元数据代理。编辑/etc/neutron/metadata_agent.ini文件:

 

[DEFAULT]
verbose = True
nova_metadata_ip = controller
metadata_proxy_shared_secret = METADATA_SECRET

 

用合适的环境值替换METADATA_SECRET。

 

7.启动以下服务:

    Open vSwitch
    Open vSwitch agent
    L3 agent
    Metadata agent

 

 

 

验证服务操作

1.提供管理项目凭据。

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

 

$ neutron agent-list
+--------------------------------------+--------------------+----------+-------+----------------+---------------------------+
| id                                   | agent_type         | host     | alive | admin_state_up | binary                    |
+--------------------------------------+--------------------+----------+-------+----------------+---------------------------+
| 10b084e5-4ab8-43d6-9b04-6d56f27f9cd4 | Metadata agent     | network1 | :-)   | True           | neutron-metadata-agent    |
| 2f90ef81-3eed-4ecf-b6b9-2d2c21dda85c | Open vSwitch agent | compute2 | :-)   | True           | neutron-openvswitch-agent |
| 319563ac-88f9-4352-b63e-e55beb673372 | DHCP agent         | network1 | :-)   | True           | neutron-dhcp-agent        |
| 3345723e-16e8-4b74-9d15-d7f1f977a3bd | Open vSwitch agent | compute1 | :-)   | True           | neutron-openvswitch-agent |
| 4643c811-a54a-41da-91a8-c2328bcaeea3 | Open vSwitch agent | network1 | :-)   | True           | neutron-openvswitch-agent |
| 5ad81671-efc3-4acc-9d5d-030a1c4f6a25 | L3 agent           | compute1 | :-)   | True           | neutron-l3-agent          |
| 641337fa-99c2-468d-8d7e-89277d6ba144 | Metadata agent     | compute1 | :-)   | True           | neutron-metadata-agent    |
| 9372e008-bd29-4436-8e01-8ddfd50d2b74 | L3 agent           | network1 | :-)   | True           | neutron-l3-agent          |
| af9d1169-1012-4440-9de2-778c8fce21b9 | L3 agent           | compute2 | :-)   | True           | neutron-l3-agent          |
| ee59e3ba-ee3c-4621-b3d5-c9d8123b6cc5 | Metadata agent     | compute2 | :-)   | True           | neutron-metadata-agent    |
+--------------------------------------+--------------------+----------+-------+----------------+---------------------------+

 

 

 

创建初始网络

 

这个示例创建了一个flat外部网络和一个VXLAN项目网络。

1.提供管理项目凭据。

2.创建外部网络:

 

$ neutron net-create ext-net --router:external \
  --provider:physical_network external --provider:network_type flat
Created a new network:
+---------------------------+--------------------------------------+
| Field                     | Value                                |
+---------------------------+--------------------------------------+
| admin_state_up            | True                                 |
| id                        | 893aebb9-1c1e-48be-8908-6b947f3237b3 |
| name                      | ext-net                              |
| provider:network_type     | flat                                 |
| provider:physical_network | external                             |
| provider:segmentation_id  |                                      |
| router:external           | True                                 |
| shared                    | False                                |
| status                    | ACTIVE                               |
| subnets                   |                                      |
| tenant_id                 | 54cd044c64d5408b83f843d63624e0d8     |
+---------------------------+--------------------------------------+

 

 3.在外部网络上创建子网:

 

 

$ neutron subnet-create ext-net 203.0.113.0/24 --allocation-pool \
  start=203.0.113.101,end=203.0.113.200 --disable-dhcp \
  --gateway 203.0.113.1
Created a new subnet:
+-------------------+------------------------------------------------------+
| Field             | Value                                                |
+-------------------+------------------------------------------------------+
| allocation_pools  | {"start": "203.0.113.101", "end": "203.0.113.200"}   |
| cidr              | 203.0.113.0/24                                       |
| dns_nameservers   |                                                      |
| enable_dhcp       | False                                                |
| gateway_ip        | 203.0.113.1                                          |
| host_routes       |                                                      |
| id                | 9159f0dc-2b63-41cf-bd7a-289309da1391                 |
| ip_version        | 4                                                    |
| ipv6_address_mode |                                                      |
| ipv6_ra_mode      |                                                      |
| name              | ext-subnet                                           |
| network_id        | 893aebb9-1c1e-48be-8908-6b947f3237b3                 |
| tenant_id         | 54cd044c64d5408b83f843d63624e0d8                     |
+-------------------+------------------------------------------------------+

 

示例配置包含vlan作为第一个项目网络类型。只有管理用户才能创建其他类型的网络,如VXLAN。下面的命令使用admin项目凭证创建一个VXLAN项目网络。

1.获得常规项目的ID。例如使用demo项目:

 

$ openstack project show demo
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Demo Project                     |
| enabled     | True                             |
| id          | cdef0071a0194d19ac6bb63802dc9bae |
| name        | demo                             |
+-------------+----------------------------------+

2.创建项目网络:

$ neutron net-create demo-net --tenant-id cdef0071a0194d19ac6bb63802dc9bae \
  --provider:network_type vxlan
Created a new network:
+---------------------------+--------------------------------------+
| Field                     | Value                                |
+---------------------------+--------------------------------------+
| admin_state_up            | True                                 |
| id                        | ac108952-6096-4243-adf4-bb6615b3de28 |
| name                      | demo-net                             |
| provider:network_type     | vxlan                                |
| provider:physical_network |                                      |
| provider:segmentation_id  | 1                                    |
| router:external           | False                                |
| shared                    | False                                |
| status                    | ACTIVE                               |
| subnets                   |                                      |
| tenant_id                 | cdef0071a0194d19ac6bb63802dc9bae     |
+---------------------------+--------------------------------------+

 

 

3.提供常规项目凭证。下面的步骤使用demo项目。

4.在项目网络上创建子网:

 

$ neutron subnet-create demo-net --name demo-subnet --gateway 192.168.1.1 \
  192.168.1.0/24
Created a new subnet:
+-------------------+------------------------------------------------------+
| Field             | Value                                                |
+-------------------+------------------------------------------------------+
| allocation_pools  | {"start": "192.168.1.2", "end": "192.168.1.254"}     |
| cidr              | 192.168.1.0/24                                       |
| dns_nameservers   |                                                      |
| enable_dhcp       | True                                                 |
| gateway_ip        | 192.168.1.1                                          |
| host_routes       |                                                      |
| id                | 69d38773-794a-4e49-b887-6de6734e792d                 |
| ip_version        | 4                                                    |
| ipv6_address_mode |                                                      |
| ipv6_ra_mode      |                                                      |
| name              | demo-subnet                                          |
| network_id        | ac108952-6096-4243-adf4-bb6615b3de28                 |
| tenant_id         | cdef0071a0194d19ac6bb63802dc9bae                     |
+-------------------+------------------------------------------------------+

5.创建一个分布式项目路由器:

$ neutron router-create demo-router
Created a new router:
+-----------------------+--------------------------------------+
| Field                 | Value                                |
+-----------------------+--------------------------------------+
| admin_state_up        | True                                 |
| distributed           | True                                 |
| external_gateway_info |                                      |
| ha                    | False                                |
| id                    | 635660ae-a254-4feb-8993-295aa9ec6418 |
| name                  | demo-router                          |
| routes                |                                      |
| status                | ACTIVE                               |
| tenant_id             | cdef0071a0194d19ac6bb63802dc9bae     |
+-----------------------+--------------------------------------+

 

注意:默认策略可能会防止"distributed"标志出现在非特权用户的命令输出中。

 

6.将项目网络连接到路由器:

$ neutron router-interface-add demo-router demo-subnet
Added interface b1a894fd-aee8-475c-9262-4342afdc1b58 to router demo-router.

 

 7.在路由器上为项目网络添加到外部网络的网关:

$ neutron router-gateway-set demo-router ext-net
Set gateway for router demo-router

 

验证网络操作

 

1.在网络节点上,验证snat、qrouter和qdhcp名称空间的创建:

$ ip netns
snat-4d7928a0-4a3c-4b99-b01b-97da2f97e279
qrouter-4d7928a0-4a3c-4b99-b01b-97da2f97e279
qdhcp-353f5937-a2d3-41ba-8225-fa1af2538141

 

注意:在启动实例之前,qdhcp名称空间可能不存在。

 

2.提供管理项目凭据。

3.在路由器上确定项目网络的外部网络网关IP地址,通常是外部子网IP分配范围内的最低IP地址:

$ neutron router-port-list demo-router
+--------------------------------------+------+-------------------+--------------------------------------------------------------------------------------+
| id                                   | name | mac_address       | fixed_ips                                                                            |
+--------------------------------------+------+-------------------+--------------------------------------------------------------------------------------+
| b1a894fd-aee8-475c-9262-4342afdc1b58 |      | fa:16:3e:c1:20:55 | {"subnet_id": "69d38773-794a-4e49-b887-6de6734e792d", "ip_address": "192.168.1.1"}   |
| ff5f93c6-3760-4902-a401-af78ff61ce99 |      | fa:16:3e:54:d7:8c | {"subnet_id": "9159f0dc-2b63-41cf-bd7a-289309da1391", "ip_address": "203.0.113.101"} |
+--------------------------------------+------+-------------------+--------------------------------------------------------------------------------------+

 

4.在控制器节点或任何有访问外部网络的主机上,在项目路由器上ping外部网络网关IP地址:

$ ping -c 4 203.0.113.101
PING 203.0.113.101 (203.0.113.101) 56(84) bytes of data.
64 bytes from 203.0.113.101: icmp_req=1 ttl=64 time=0.619 ms
64 bytes from 203.0.113.101: icmp_req=2 ttl=64 time=0.189 ms
64 bytes from 203.0.113.101: icmp_req=3 ttl=64 time=0.165 ms
64 bytes from 203.0.113.101: icmp_req=4 ttl=64 time=0.216 ms

--- 203.0.113.101 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2999ms
rtt min/avg/max/mdev = 0.165/0.297/0.619/0.187 ms

 

5.提供常规项目凭证。
6.在项目网络上启动一个具有接口的实例。
7.在实例的计算节点上,验证qrouter名称空间的创建:

$ ip netns
qrouter-4d7928a0-4a3c-4b99-b01b-97da2f97e279

 

8.获得对实例的控制台访问。

1.测试连接到项目路由器:
$ ping -c 4 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_req=1 ttl=64 time=0.357 ms
64 bytes from 192.168.1.1: icmp_req=2 ttl=64 time=0.473 ms
64 bytes from 192.168.1.1: icmp_req=3 ttl=64 time=0.504 ms
64 bytes from 192.168.1.1: icmp_req=4 ttl=64 time=0.470 ms

--- 192.168.1.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2998ms
rtt min/avg/max/mdev = 0.357/0.451/0.504/0.055 ms

2.测试连接到互联网:
$ ping -c 4 openstack.org
PING openstack.org (174.143.194.225) 56(84) bytes of data.
64 bytes from 174.143.194.225: icmp_req=1 ttl=53 time=17.4 ms
64 bytes from 174.143.194.225: icmp_req=2 ttl=53 time=17.5 ms
64 bytes from 174.143.194.225: icmp_req=3 ttl=53 time=17.7 ms
64 bytes from 174.143.194.225: icmp_req=4 ttl=53 time=17.5 ms

--- openstack.org ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 17.431/17.575/17.734/0.143 ms

 

 

9.创建适当的安全组规则,允许ping和SSH访问实例。例如:

$ nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0
 +-------------+-----------+---------+-----------+--------------+
 | IP Protocol | From Port | To Port | IP Range  | Source Group |
 +-------------+-----------+---------+-----------+--------------+
 | icmp        | -1        | -1      | 0.0.0.0/0 |              |
 +-------------+-----------+---------+-----------+--------------+

 $ nova secgroup-add-rule default tcp 22 22 0.0.0.0/0
 +-------------+-----------+---------+-----------+--------------+
 | IP Protocol | From Port | To Port | IP Range  | Source Group |
 +-------------+-----------+---------+-----------+--------------+
 | tcp         | 22        | 22      | 0.0.0.0/0 |              |
 +-------------+-----------+---------+-----------+--------------+

 

10.在外部网络上创建浮动IP地址:

$ neutron floatingip-create ext-net
Created a new floatingip:
+---------------------+--------------------------------------+
| Field               | Value                                |
+---------------------+--------------------------------------+
| fixed_ip_address    |                                      |
| floating_ip_address | 203.0.113.102                        |
| floating_network_id | 9bce64a3-a963-4c05-bfcd-161f708042d1 |
| id                  | 05e36754-e7f3-46bb-9eaa-3521623b3722 |
| port_id             |                                      |
| router_id           |                                      |
| status              | DOWN                                 |
| tenant_id           | 7cf50047f8df4824bc76c2fdf66d11ec     |
+---------------------+--------------------------------------+

 

11.将浮动IP地址与实例关联:

$ nova floating-ip-associate demo-instance1 203.0.113.102

 

2.验证添加到实例的浮动IP地址:

$ nova list
+--------------------------------------+----------------+--------+------------+-------------+-----------------------------------------+
| ID                                   | Name           | Status | Task State | Power State | Networks                                |
+--------------------------------------+----------------+--------+------------+-------------+-----------------------------------------+
| 05682b91-81a1-464c-8f40-8b3da7ee92c5 | demo-instance1 | ACTIVE | -          | Running     | demo-net=192.168.1.3, 203.0.113.102     |
+--------------------------------------+----------------+--------+------------+-------------+-----------------------------------------+

 

13.在使用实例的计算节点上,验证fip名称空间的创建:

$ ip netns
fip-2c7bd9c2-8ab0-46ef-b7c1-023ce0452c24

 

14.在控制器节点或任何访问外部网络的主机上,ping与实例关联的浮动IP地址:

$ ping -c 4 203.0.113.102
PING 203.0.113.102 (203.0.113.112) 56(84) bytes of data.
64 bytes from 203.0.113.102: icmp_req=1 ttl=63 time=3.18 ms
64 bytes from 203.0.113.102: icmp_req=2 ttl=63 time=0.981 ms
64 bytes from 203.0.113.102: icmp_req=3 ttl=63 time=1.06 ms
64 bytes from 203.0.113.102: icmp_req=4 ttl=63 time=0.929 ms

--- 203.0.113.102 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3002ms
rtt min/avg/max/mdev = 0.929/1.539/3.183/0.951 ms