4..部署场景2:带有遗留的Linux Bridge
此场景描述了使用Linux bridge的ML2插件实现OpenStack网络服务的遗留(基本)实现。
遗留实现通过为常规(非特权)用户提供一种方法来管理一个项目中的虚拟网络,并包含以下组件:提供了自服务虚拟数据中心基础设施的网络部分。
项目(租户)网络
项目网络为特定项目的实例提供了连接性。常规(非特权)用户可以在管理员或操作员为其定义的分配中管理项目网络。
项目网络可以使用VLAN、GRE或VXLAN传输方法,这取决于分配。项目网络通常使用私有IP地址范围(RFC1918),并且缺乏与外部网络(如Internet)的连接。
网络是指项目网络上的IP地址作为固定的IP地址。
外部网络
外部网络提供与外部网络(如Internet)的连接。只有管理(特权)用户可以管理外部网络,因为它们与物理网络基础设施交互。
外部网络可以使用平面或VLAN传输方法,这取决于物理网络基础结构,通常使用公共IP地址范围。
注意:Flat网络本质上是使用未标记的或本地的VLAN。类似于物理网络的2层属性,每个外部网桥只能存在一个平面网络。在大多数情况下,生产部署应该使用VLAN传输来进行外部网络。
路由器
路由器通常连接项目和外部网络。默认情况下,它们实现SNAT,为项目网络上的实例提供出站外部连接。
每个路由器在SNAT的外部网络分配中使用一个IP地址。路由器还使用DNAT为项目网络的实例提供入站外部连接。
网络指的是路由器上的IP地址,这些路由器为项目网络上的实例提供入站外部连接,作为浮动的IP地址。
路由器还可以连接属于同一个项目的项目网络。
支持的服务
其他支持服务包括DHCP和元数据。DHCP服务管理项目网络上实例的IP地址。元数据服务为项目网络中的实例提供了一个API,以获取诸如SSH密钥之类的元数据。
注意:
示例配置创建了一个平面外部网络和一个VXLAN项目网络。然而,这种配置也支持VLAN外部和项目网络。
Linux网桥代理不支持GRE项目网络。
一、先决条件
这些先决条件定义了部署此场景所需的最小物理基础设施和立即的OpenStack服务依赖关系。
例如,网络服务直接依赖于身份服务,而计算服务直接依赖于网络服务。而像镜像服务没有依赖性的服务,是因为网络服务没有直接依赖它。
然而,计算服务依赖于镜像服务来启动一个实例。本场景中的示例配置假定了网络服务组件的基本配置知识。
基础设施
一个具有网络管理接口的控制器节点。
一个具有四个网络接口的网络节点:管理、项目隧道网络、VLAN项目网络和外部(通常是Internet)。
至少有一个具有三个网络接口的计算节点:管理、项目隧道网络和VLAN项目网络。
为了提高对网络流量的理解,网络和计算节点为VLAN项目网络包含一个单独的网络接口。在生产环境中,可以使用VLAN项目网络的任何网络接口。
在示例配置中,管理网络使用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服务的合适配置
ML2插件、Linux网桥代理、L3代理、DHCP代理、元数据代理和任何依赖关系。
计算节点的Openstack服务
在neutron.conf文件中具有openstack keystone服务的合适配置
在nova.conf文件中具有openstack计算 控制/管理服务的合适配置去使用neutron
ML2插件、Linux网桥代理和任何依赖关系。
体系结构
遗留体系结构在您的环境中提供基本的虚拟网络组件。在项目和外部网络之间的路由完全驻留在网络节点上.
尽管比其他体系结构更容易部署,但是在网络节点上执行所有功能会造成一个单点故障和潜在的性能问题。
考虑在生产环境中部署DVR或L3 HA架构,以提供冗余和提高性能。然而,DVR架构需要Open vSwitch。
一般的体系架构
网络节点包含以下网络组件:
Linux bridge代理管理虚拟交换机之间的连接性,以及通过虚拟端口与其他网络组件(如名称空间和底层接口)进行交互。
管理qdhcp名称空间的DHCP代理。qdhcp名称空间为使用项目网络的实例提供DHCP服务。
管理qrouter名称空间的L3代理。qrouter名称空间提供了项目和外部网络之间以及项目网络之间的路由。它们还在实例和元数据代理之间路由元数据通信。
元数据代理处理实例的元数据操作。
网络节点回顾
网络节点组件
计算节点包含以下网络组件:
Linux bridge代理管理虚拟交换机之间的连接,以及通过虚拟端口与其他网络组件(如名称空间、安全组和底层接口)的交互。
计算节点回顾
计算节点组件
二、Packet flow
南北网络流量在一个实例和外部网络之间传输,通常是互联网。东西网络流量在实例之间传播。
案例1:有固定ip的实例的南北网络流量
对于具有固定IP地址的实例,网络节点路由项目与外部网络之间的南北网络流量。
外部网络
网络203.0.113.0/24
IP地址分配从203.0.113.101到203.0.113.200
带有203.0.113.101的项目网络路由器接口TR
项目网络
网络192.168.1.0/24
带有192.168.1.1与MAC地址TG的网关
计算节点1:
带有192.168.1.11与MAC地址I1的实例1
实例1驻留在计算节点1上,并使用一个项目网络
实例向外部网络的主机发送一个包。
注意:尽管该图显示了VXLAN和VLAN项目网络,但是数据包流只考虑使用VXLAN项目网络的一个实例。
以下步骤涉及计算节点1:
1.对于VXLAN项目网络:
实例1的tap接口(1)将包转发给tunnel网桥qbr上。该包包含目标MAC地址TG,因为目的地驻留在另一个网络上。 安全组规则(2)在tunnel网桥qbr上处理数据包的状态跟踪。 tunnel网桥的qbr将包转发给逻辑通道接口vxlan-sid(3),其中sid包含项目网络分段ID。
2.对于VLAN项目网络:
实例1的tap接口将包转发给VLAN网桥qbr上。该包包含目标MAC地址TG,因为目的地驻留在另一个网络上。
安全组规则在VLAN网桥qbr上处理数据包的状态跟踪。
VLAN bridge qbr将包转发到逻辑VLAN接口device.sid。该接口引用底层物理VLAN接口和包含项目网络分割ID的sid。
逻辑VLAN接口device.sid通过物理VLAN接口将包转发给网络节点。
以下步骤涉及网络节点:
1.对于VXLAN项目网络:
物理通道接口将包转发给逻辑通道接口vxlan-sid(4),其中sid包含项目网络分割ID。 逻辑通道接口vxlan-sid将包转发给tunnel网桥qbr。 tunnel网桥qbr将数据包转发到路由器名称空间qrouter中的qr接口(5)。该qr接口包含项目网络路由器接口IP地址TG。
2.对于VLAN项目网络:
物理VLAN接口将包转发到逻辑VLAN接口device.sid。该接口引用底层物理VLAN接口和包含项目网络分割ID的sid。
逻辑VLAN接口device.sid将包转发给VLAN网桥qbr。
VLAN bridge qbr将包转发到路由器名称空间qrouter中的qr接口。该qr接口包含项目网络1网关IP地址TG。
3.iptables服务(6)使用qg接口(7)作为源IP地址在包上执行SNAT。qg接口包含项目网络路由器接口IP地址TR。
4.路由器名称空间qrouter将包转发给外部网桥qbr。
5.外部网桥qbr通过物理外部接口将包转发到外部网络。
注意:返回的流量也遵循类似的步骤。
有固定ip地址的实例的南北网络流量流向
案例2:具有浮动IP地址的实例的南北流量
对于具有浮动IP地址的实例,网络节点路由项目和外部网络之间的南北网络流量。
外部网络
网络203.0.113.0/24
IP地址分配从203.0.113.101到203.0.113.200
带有203.0.113.101的项目网络路由器接口TR
项目网络
网络192.168.1.0/24
带有192.168.1.1与MAC地址TG的网关
计算节点1:
带有192.168.1.11与MAC地址I1以及浮动ip F1 203.0.113.102的实例1
实例1驻留在计算节点1上,并使用一个项目网络。
实例从外部网络的主机接收数据包。
注意:
尽管该图显示了VXLAN和VLAN项目网络,但是数据包流只考虑使用VXLAN项目网络的一个实例。
以下步骤涉及网络节点:
1.物理外部接口将包转发给外部网桥qbr。
2.外部网桥qbr将数据包转发到路由器名称空间qrouter中的qg接口(1)。qg接口包含实例浮动IP地址F1。
3.iptables服务(2)使用qr接口(3)作为源IP地址在包上执行DNAT。该qr接口包含项目网络网关IP地址TR。
4.对于VXLAN项目网络:
路由器名称空间qrouter将数据包转发到tunnel网桥qbr。 tunnel网桥qbr将包转发给逻辑隧道接口vxlan-sid(4),其中sid包含项目网络分段ID。 物理通道接口将数据包转发到计算节点1。
5.对于VLAN项目网络:
路由器名称空间qrouter将数据包转发到VLAN网桥qbr。
VLAN bridge qbr将包转发到逻辑VLAN接口device.sid。该接口引用底层物理VLAN接口和包含项目网络分割ID的sid。
物理VLAN接口将数据包转发到计算节点1。
以下步骤涉及计算节点1:
1.关于VXLAN项目网络:
物理通道接口将包转发给逻辑通道接口vxlan-sid(5),其中sid包含项目网络分割ID。 逻辑通道接口vxlan-sid将包转发给tunnel网桥qbr。 安全组规则(6)在tunnel网桥qbr上处理封包的防火墙和状态跟踪。 在实例1中,tunnel网桥qbr将数据包转发到tap接口(7)。
2.VLAN项目网络:
物理VLAN接口将包转发到逻辑VLAN接口device.sid。该接口引用底层物理VLAN接口和包含项目网络分割ID的sid。
逻辑VLAN接口device.sid将包转发给VLAN网桥qbr。
VLAN网桥qbr的安全组规则处理数据包的防火墙和状态跟踪。
VLAN网桥qbr将数据包转发到实例1的tap接口。
返回的流量也遵循类似的步骤。
有固定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
实例1:带有使用MAC地址I1的192.168.1.11
计算节点2
实例2:带有MAC地址I2的192.168.2.11
实例1驻留在计算节点1上,并使用project network 1。
实例2驻留在计算节点2上,并使用project network 2。
两个项目网络都位于同一路由器上。
实例1发送一个包到实例2。
以下步骤涉及计算节点1:
1.实例1的tap接口(1)将包转发给tunnel网桥qbr。该包包含目标MAC地址TG1,因为目的地驻留在另一个网络上。
2.安全组规则(2)在tunnel网桥qbr上处理数据包的状态跟踪。
3.tunnel网桥qbr将包转发给逻辑隧道接口vxlan-sid(3),其中sid包含项目网络分段ID。
4.物理通道接口将数据包转发到网络节点。
以下步骤涉及网络节点:
1.物理通道接口将包转发给逻辑通道接口vxlan - sid(4),其中sid包含项目网络分割ID。
2.逻辑通道接口vxlan - sid将包转发给tunnel网桥qbr。
3.tunnel网桥qbr将数据包转发到路由器名称空间qrouter中的qr - 1接口(5)。qr- 1接口包含项目网络1网关IP地址TG1。
4.路由器名称空间qrouter将数据包(6)路由到qr - 2接口(7)。qr - 2接口包含项目网络2网关IP地址TG2。
5.路由器名称空间qrouter将数据包转发到VLAN网桥qbr。
6.VLAN bridge qbr将包转发到逻辑VLAN接口vlan-sid(8),其中sid包含项目网络分割ID。
7.物理VLAN接口将数据包转发到计算节点2。
以下步骤涉及计算节点2:
1.物理VLAN接口将数据包转发到逻辑VLAN接口vlan-sid(9),其中sid包含项目网络分割ID。
2.逻辑VLAN接口vlan-sid将包转发给VLAN网桥qbr。
3.安全组规则(10)在VLAN网桥qbr上处理数据包的防火墙和状态跟踪。
4.VLAN bridge qbr将包转发到实例2上的tap接口(11)。
注意:返回的流量也遵循类似的步骤。
不同网络实例的东西向网络流量流向
案例4:在同一网络上的实例的东西向流量流向
对于具有固定或浮动IP地址的实例,项目网络在不使用网络节点上的项目路由器的情况下,在实例之间转换东西向网络流量。
项目网络
网络:192.168.1.0/24
计算节点1
实例1:带有使用MAC地址I1的192.168.1.11,
计算节点2
实例2:带有MAC地址I2的192.168.1.12
实例1驻留在compute节点1中。
实例2驻留在compute节点2中。
两个实例都使用相同的项目网络。
实例1发送一个包到实例2。
Linux网桥代理处理在项目网络中的切换。
以下步骤涉及计算节点1:
1.实例1的tap接口(1)将包转发给tunnel网桥qbr。该包包含目标MAC地址TG1,因为目的地驻留在另一个网络上。
2.安全组规则(2)在tunnel网桥qbr上处理数据包的状态跟踪。
3.tunnel网桥qbr将包转发给逻辑tunnel接口vxlan - sid(3),其中sid包含项目网络分段ID。
4.物理通道接口将数据包转发到网络节点。
以下步骤涉及计算节点2:
1.物理通道接口将包转发给逻辑通道接口vxlan - sid(4),其中sid包含项目网络分割ID。
2.逻辑通道接口vxlan - sid将包转发给tunnel网桥qbr。
3.安全组规则(5)在tunnel网桥qbr上处理封包的防火墙和状态跟踪。
4.在实例2中,tunnel网桥qbr将数据包转发到tap接口(6)。
注意:返回的流量也遵循类似的步骤。
在相同网络上的实例的东西向网络网络流向
示例配置
使用下面的示例配置作为在您的环境中部署该场景的模板
控制节点
1.配置常见的选项。编辑/etc/neutron/neutron.配置文件:
[DEFAULT] verbose = True core_plugin = ml2 service_plugins = router allow_overlapping_ips = True
2.配置ML2插件。编辑/etc/neutron/plugins/ml2/ml2_conf.ini文件:
[ml2] type_drivers = flat,vlan,vxlan tenant_network_types = vlan,vxlan mechanism_drivers = linuxbridge,l2population [ml2_type_flat] flat_networks = external [ml2_type_vlan] network_vlan_ranges = external,vlan:MIN_VLAN_ID:MAX_VLAN_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.IptablesFirewallDriver enable_security_group = True enable_ipset = True
将MIN_VLAN_ID、MAX_VLAN_ID、MIN_VXLAN_ID和MAX_VXLAN_ID替换为VLAN和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.配置Linux网桥代理。编辑/etc/neutron/plugins/ml2/ml2_conf.ini文件:
[linux_bridge] physical_interface_mappings = vlan:PROJECT_VLAN_INTERFACE,external:EXTERNAL_INTERFACE [vxlan] enable_vxlan = True local_ip = TUNNEL_INTERFACE_IP_ADDRESS l2_population = True [securitygroup] firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver enable_security_group = True enable_ipset = True
将PROJECT_VLAN_INTERFACE和EXTERNAL_INTERFACE替换为处理VLAN项目网络和外部网络的底层接口的名称。用接口的IP地址替换TUNNEL_INTERFACE_IP_ADDRESS,该接口处理项目隧道网络。
5.配置L3代理。编辑/etc/neutron/l3_agent.ini文件:
[DEFAULT] verbose = True interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver use_namespaces = True external_network_bridge = router_delete_namespaces = True
6.配置DHCP代理。编辑/etc/neutron/dhcp_agent.ini文件:
[DEFAULT] verbose = True interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver 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.开始以下服务:
Linux bridge 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.配置Linux桥代理。编辑/etc/neutron/plugins/ml2/ml2_conf.ini文件:
[linux_bridge] physical_interface_mappings = vlan:PROJECT_VLAN_INTERFACE [vxlan] enable_vxlan = True local_ip = TUNNEL_INTERFACE_IP_ADDRESS l2_population = True [securitygroup] firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver enable_security_group = True enable_ipset = True
将PROJECT_VLAN_INTERFACE替换为处理VLAN项目网络和外部网络的底层接口的名称。使用处理VXLAN项目网络的接口的IP地址替换TUNNEL_INTERFACE_IP_ADDRESS。
5.开始以下服务:
Linux bridge agent
验证服务操作
1.提供管理项目凭据。
2.验证代理的存在和操作:
$ neutron agent-list +--------------------------------------+--------------------+-------------+-------+----------------+---------------------------+ | id | agent_type | host | alive | admin_state_up | binary | +--------------------------------------+--------------------+-------------+-------+----------------+---------------------------+ | 0146e482-f94a-4996-9e2a-f0cafe2575c5 | L3 agent | network1 | :-) | True | neutron-l3-agent | | 0dd4af0d-aafd-4036-b240-db12cf2a1aa9 | Linux bridge agent | compute2 | :-) | True | neutron-linuxbridge-agent | | 2f9e5434-575e-4079-bcca-5e559c0a5ba7 | Linux bridge agent | network1 | :-) | True | neutron-linuxbridge-agent | | 4105fd85-7a8f-4956-b104-26a600670530 | Linux bridge agent | compute1 | :-) | True | neutron-linuxbridge-agent | | 8c15992a-3abc-4b14-aebc-60065e5090e6 | Metadata agent | network1 | :-) | True | neutron-metadata-agent | | aa2e8f3e-b53e-4fb9-8381-67dcad74e940 | DHCP agent | network1 | :-) | True | neutron-dhcp-agent | +--------------------------------------+--------------------+-------------+-------+----------------+---------------------------+
创建初始网络
这个示例创建了一个平面外部网络和一个VXLAN项目网络。
1.提供管理项目凭据。
2.创建外部网络:
$ neutron net-create ext-net --router:external True \ --provider:physical_network external --provider:network_type flat Created a new network: +---------------------------+--------------------------------------+ | Field | Value | +---------------------------+--------------------------------------+ | admin_state_up | True | | id | d57703fd-5571-404c-abca-f59a13f3c507 | | name | ext-net | | provider:network_type | flat | | provider:physical_network | external | | provider:segmentation_id | | | router:external | True | | shared | False | | status | ACTIVE | | subnets | | | tenant_id | 897d7360ac3441209d00fbab5f0b5c8b | +---------------------------+--------------------------------------+
3.在外部网络上创建子网:
$ neutron subnet-create ext-net --name ext-subnet --allocation-pool \ start=203.0.113.101,end=203.0.113.200 --disable-dhcp \ --gateway 203.0.113.1 203.0.113.0/24 Created a new subnet: +-------------------+----------------------------------------------------+ | Field | Value | +-------------------+----------------------------------------------------+ | allocation_pools | {"start": "203.1.113.101", "end": "203.0.113.200"} | | cidr | 201.0.113.0/24 | | dns_nameservers | | | enable_dhcp | False | | gateway_ip | 203.0.113.1 | | host_routes | | | id | 020bb28d-0631-4af2-aa97-7374d1d33557 | | ip_version | 4 | | ipv6_address_mode | | | ipv6_ra_mode | | | name | ext-subnet | | network_id | d57703fd-5571-404c-abca-f59a13f3c507 | | tenant_id | 897d7360ac3441209d00fbab5f0b5c8b | +-------------------+----------------------------------------------------+
示例配置包含vlan作为第一个项目网络类型。只有管理用户才能创建其他类型的网络,如VXLAN。下面的命令使用admin项目凭证创建一个VXLAN项目网络。
1.获得常规项目的ID。例如使用demo项目:
$ openstack project show demo
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Demo Project |
| enabled | True |
| id | 8dbcb34c59a741b18e71c19073a47ed5 |
| name | demo |
+-------------+----------------------------------+
2.创建项目网络:
$ neutron net-create demo-net --tenant-id 8dbcb34c59a741b18e71c19073a47ed5 \ --provider:network_type vxlan Created a new network: +---------------------------+--------------------------------------+ | Field | Value | +---------------------------+--------------------------------------+ | admin_state_up | True | | id | 3a0663f6-9d5d-415e-91f2-0f1bfefbe5ed | | name | demo-net | | provider:network_type | vxlan | | provider:physical_network | | | provider:segmentation_id | 1 | | router:external | False | | shared | False | | status | ACTIVE | | subnets | | | tenant_id | 8dbcb34c59a741b18e71c19073a47ed5 | +---------------------------+--------------------------------------+
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 | 1d5ab804-8925-46b0-a7b4-e520dc247284 | | ip_version | 4 | | ipv6_address_mode | | | ipv6_ra_mode | | | name | demo-subnet | | network_id | 3a0663f6-9d5d-415e-91f2-0f1bfefbe5ed | | tenant_id | 8dbcb34c59a741b18e71c19073a47ed5 | +-------------------+--------------------------------------------------+
5.创建一个项目路由器:
$ neutron router-create demo-router
+-----------------------+--------------------------------------+
| Field | Value |
+-----------------------+--------------------------------------+
| admin_state_up | True |
| external_gateway_info | |
| id | 299b2363-d656-401d-a3a5-55b4378e7fbb |
| name | demo-router |
| routes | |
| status | ACTIVE |
| tenant_id | 8dbcb34c59a741b18e71c19073a47ed5 |
+-----------------------+--------------------------------------+
6.在路由器上添加项目子网作为接口:
$ neutron router-interface-add demo-router demo-subnet Added interface 4f819fd4-be4d-42ab-bd47-ba1b2cb39006 to router demo-router.
7.在路由器上添加一个通向外部网络的网关:
$ neutron router-gateway-set demo-router ext-net Set gateway for router demo-router
验证网络操作
1在网络节点上,验证qrouter和qdhcp名称空间的创建:
$ ip netns qdhcp-3a0663f6-9d5d-415e-91f2-0f1bfefbe5ed qrouter-299b2363-d656-401d-a3a5-55b4378e7fbb
注意:在启动实例之前,qdhcp名称空间可能不存在。
2.在路由器上确定项目网络的外部网络网关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": "1d5ab804-8925-46b0-a7b4-e520dc247284", "ip_address": "192.168.1.1"} | | ff5f93c6-3760-4902-a401-af78ff61ce99 | | fa:16:3e:54:d7:8c | {"subnet_id": "020bb28d-0631-4af2-aa97-7374d1d33557", "ip_address": "203.0.113.101"} | +--------------------------------------+------+-------------------+--------------------------------------------------------------------------------------+
3.在控制器节点或任何有访问外部网络的主机上,在项目路由器上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
4.提供常规项目凭证。下面的步骤使用demo项目。
5.在项目网络上启动一个具有接口的实例。
6.获得对实例的控制台访问。
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
7.创建适当的安全组规则,允许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 | |
+-------------+-----------+---------+-----------+--------------+
8.在外部网络上创建浮动IP地址:
$ neutron floatingip-create ext-net
+---------------------+--------------------------------------+
| Field | Value |
+---------------------+--------------------------------------+
| fixed_ip_address | |
| floating_ip_address | 203.0.113.102 |
| floating_network_id | e5f9be2f-3332-4f2d-9f4d-7f87a5a7692e |
| id | 77cf2a36-6c90-4941-8e62-d48a585de050 |
| port_id | |
| router_id | |
| status | DOWN |
| tenant_id | 443cd1596b2e46d49965750771ebbfe1 |
+---------------------+--------------------------------------+
9.将浮动IP地址与实例关联:
$ nova floating-ip-associate demo-instance1 203.0.113.102
10.验证添加到实例的浮动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 |
+--------------------------------------+----------------+--------+------------+-------------+-----------------------------------------+
11.在控制器节点或任何访问外部网络的主机上,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