OpenStack网络部署:基于Open vSwitch的实现方案
OpenStack网络部署:基于Open vSwitch的实现方案
本场景描述了使用ML2插件配合Open vSwitch(OVS)实现OpenStack网络服务的基本架构。
该实现通过为普通用户提供自助服务虚拟数据中心网络管理的能力,使他们能够在项目中管理虚拟网络,包括以下核心组件:
项目网络
项目网络为特定项目中的实例提供网络连接。普通用户可在管理员预设的范围内管理项目网络。项目网络支持VLAN、GRE或VXLAN传输方式,通常使用私有IP地址范围。网络中的IP地址作为固定IP分配给实例。
外部网络
外部网络提供与外部网络(如Internet)的连接。只有管理员用户可以管理外部网络,因为它们与物理网络基础设施直接交互。
外部网络可使用FLAT或VLAN传输方式,取决于物理网络架构,通常使用公共IP地址范围。
注意:FLAT网络本质上是使用未标记的本地VLAN,类似于物理网络的二层结构。每个外部网桥只能存在一个平面网络。在生产环境中,建议使用VLAN传输方式配置外部网络。
路由器
路由器通常连接项目网络和外部网络。默认情况下,它们实现SNAT,为项目网络上的实例提供出站连接。
每个路由器在外部网络分配中使用一个IP地址进行SNAT。
路由器还使用DNAT为项目网络中的实例提供入站外部连接。
网络中分配给路由器的IP地址,用于为项目网络实例提供入站连接,称为浮动IP地址。
路由器还可以连接属于同一项目的不同项目网络。
支持的服务
支持的服务包括DHCP和元数据服务。DHCP服务管理项目网络上实例的IP地址分配。元数据服务为项目网络中的实例提供API,用于获取SSH密钥等元数据。
本示例配置创建了一个FLAT外部网络和一个VXLAN项目网络。但该配置也支持VLAN外部网络、VLAN项目网络和GRE项目网络。
先决条件
这些先决条件定义了部署此场景所需的最小物理基础设施和OpenStack服务依赖关系。
例如,网络服务直接依赖身份服务,而计算服务直接依赖网络服务。镜像服务等服务没有直接依赖关系,因为网络服务不直接依赖它。
然而,计算服务依赖镜像服务来启动实例。本场景中的示例配置假设您已掌握网络服务组件的基本配置知识。
基础设施
-
一个带有网络管理接口的控制节点
-
一个具有四个网络接口的网络节点:管理接口、项目隧道网络接口、VLAN项目网络接口和外部网络接口(通常是Internet)。
-
Open vSwitch网桥br-vlan必须包含VLAN接口上的一个端口,Open vSwitch网桥br-ex必须在外部接口上包含一个端口。
-
至少一个具有三个网络接口的计算节点:管理接口、项目隧道网络接口和VLAN项目网络接口。Open vSwitch网桥br-vlan必须包含VLAN接口上的一个端口。
为更好地理解网络流量,网络和计算节点为VLAN项目网络使用单独的网络接口。
在生产环境中,VLAN项目网络可通过任何Open vSwitch网桥访问网络接口,例如br-tun网桥。
在示例配置中,管理网络使用10.0.0.0/24,隧道网络使用10.0.1.0/24,外部网络使用203.0.113.0/24。VLAN网络不需要IP地址范围,因为它只处理二层连接。
硬件要求:

网络布局

服务布局

注意:对于VLAN外部和项目网络,物理网络基础设施必须支持VLAN标记。为获得VXLAN和GRE项目网络的最佳性能,网络基础设施应支持巨型帧。
控制节点的OpenStack服务
在neutron.conf文件中配置数据库服务器的合适参数
在neutron.conf文件中配置消息队列服务的合适参数<br></br>在neutron.conf文件中配置openstack keystone服务的合适参数<br></br>在nova.conf文件中配置openstack计算控制/管理服务以使用neutron<br></br>neutron服务器服务、ML2插件及其依赖服务
网络节点的OpenStack服务
在neutron.conf文件中配置openstack keystone服务的合适参数<br></br>Open vSwitch服务、ML2插件、Open vSwitch代理、三层代理、DHCP代理、metadata代理及其依赖服务
计算节点的OpenStack服务
在neutron.conf文件中配置openstack keystone服务的合适参数<br></br><br></br>在nova.conf文件中配置openstack计算控制/管理服务以使用neutron
Open vSwitch服务、ML2插件、Open vSwitch代理及其依赖服务
架构
该遗留架构在您的环境中提供基本的虚拟网络组件。项目和外部网络之间的路由完全驻留在网络节点上。
尽管比其他架构更容易部署,但在网络节点上执行所有功能会造成单点故障和潜在的性能问题。
在生产环境中,建议部署DVR或L3 HA架构以提供冗余并提高性能。
通用架构

网络节点包含以下网络组件:
Open vSwitch代理管理虚拟交换机之间的连接,并通过虚拟端口与其他网络组件(如名称空间、Linux网桥和底层接口)进行交互。<br></br>dhcp代理管理qdhcp名称空间,为使用项目网络的实例提供DHCP服务。<br></br>管理qrouter名称空间的L3代理。qrouter名称空间提供项目网络之间以及项目网络与外部网络之间的路由。它还在实例和元数据代理之间路由元数据通信。<br></br><br></br>元数据代理处理实例的元数据操作。
网络节点概览

网络节点组件

计算节点包含以下网络组件:
Open vSwitch代理管理虚拟交换机之间的连接,并通过虚拟端口与其他网络组件(如名称空间、Linux网桥和底层接口)进行交互。
Linux bridge处理安全组。由于open vSwitch和iptables的限制,网络服务使用Linux bridge来管理实例的安全组。
计算节点概览

计算节点组件

数据包流
南北向流量在实例和外部网络之间传输,通常是互联网。东西向流量在实例之间传输。
案例1:具有固定IP的实例的南北向流量
对于具有固定IP地址的实例,网络节点路由项目网络与外部网络之间的南北向流量。
外部网络
网络: 203.0.113.0/24<br></br>IP地址分配范围: 203.0.113.101 到 203.0.113.200<br></br>项目网络路由器接口IP: 203.0.113.101 (TR)<br></br>
项目网络
网络: 192.168.1.0/24
网关IP: 192.168.1.1,MAC地址: TG
计算节点1:
实例1: IP 192.168.1.11,MAC地址: I1
实例1驻留在计算节点1上,使用一个项目网络。
实例向外部网络的主机发送数据包。
以下步骤涉及计算节点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为项目网络添加内部标记。
5.对于VLAN项目网络:
Open vSwitch集成网桥 br-int将数据包转发到Open vSwitch VLAN网桥br-vlan。<br></br>Open vSwitch VLAN bridge br-vlan用项目网络的实际VLAN标记替换内部标记<br></br>Open vSwitch VLAN bridge br-vlan通过VLAN接口将数据包转发到网络节点
6.对于VXLAN和GRE项目网络:
Open vSwitch集成网桥<tt>br-int</tt>将数据包转发到Open vSwitch通道网桥br-tun。<br></br>Open vSwitch通道网桥br-tun将数据包封装在VXLAN或GRE通道中,并添加一个标记来标识项目网络。<br></br>Open vSwitch通道网桥br-tun通过通道接口将数据包转发到网络节点。
以下步骤涉及网络节点:
1.对于VLAN项目网络:
VLAN接口将数据包转发到Open vSwitch VLAN网桥br-vlan。<br></br>Open vSwitch VLAN bridge br-vlan将数据包转发到Open vSwitch集成网桥br-int。<br></br>Open vSwitch集成网桥用内部标记替换了项目网络的实际VLAN标记。
2.对于VXLAN和GRE项目网络:
通道接口将数据包转发到Open vSwitch通道网桥br-tun。<br></br>Open vSwitch通道网桥br-tun解封装数据包并为项目网络添加内部标记。<br></br>Open vSwitch隧道桥br-tun将数据包转发到Open vSwitch集成网桥br-int。
3.Open vSwitch集成网桥将数据包转发到路由器名称空间qrouter中的qr接口(3)。qr接口包含项目网络网关IP地址TG。
4.iptables服务(4)使用qg接口(5)作为源IP地址在数据包上执行SNAT。qg接口包含项目网络路由器接口IP地址TR。
5.路由器名称空间qrouter通过qg接口将数据包转发到Open vSwitch集成网桥。
6.Open vSwitch集成网桥将数据包转发到Open vSwitch外部网桥br-ex。
7.Open vSwitch外部网桥br-ex通过外部接口将数据包转发到外部网络。
注意:返回流量遵循类似步骤。
具有固定IP的实例的南北向流量流向

案例2:具有浮动IP的实例的南北向流量
对于具有浮动IP的实例,网络节点路由项目网络与外部网络之间的南北向流量。
外部网络
网络: 203.0.113.0/24<br></br>IP地址分配范围: 203.0.113.101 到 203.0.113.200<br></br>项目网络路由器接口IP: 203.0.113.101 (TR)<br></br>
项目网络
网络: 192.168.1.0/24
网关IP: 192.168.1.1,MAC地址: TG
计算节点1:
实例1: IP 192.168.1.11,MAC地址: I1,浮动IP: F1 (203.0.113.102)
实例1驻留在计算节点1上,使用一个项目网络。
实例从外部网络的主机接收数据包。
以下步骤涉及网络节点:
1.外部接口将数据包转发到Open vSwitch外部网桥br-ex
2.Open vSwitch外部网桥br-ex将数据包转发到Open vSwitch集成桥br-int。
3.Open vSwitch集成网桥将数据包转发到路由器名称空间qrouter中的qg接口(1)。qg接口包含实例1的浮动IP地址F1。
4.iptables服务(2)使用qr接口(3)作为源IP地址在数据包上执行DNAT。qr接口包含项目网络路由器接口IP地址TR。
5.路由器名称空间qrouter将数据包转发到Open vSwitch集成网桥br-int。
6.Open vSwitch集成桥br-int为项目网络添加内部标记。
7.对于VLAN项目网络:
Open vSwitch集成网桥br-int将数据包转发到Open vSwitchVLAN桥br-vlan。<br></br>Open vSwitch VLAN bridge br-vlan用项目网络的实际VLAN标记替换内部标记。<br></br>Open vSwitch VLAN网桥br-vlan通过VLAN接口将数据包转发到计算节点。
8.对于VXLAN和GRE项目网络
Open vSwitch集成网桥<tt>br-int</tt>将数据包转发到Open vSwitch通道网桥br-tun。
Open vSwitch通道网桥br-tun将数据包封装在VXLAN或GRE通道中,并添加一个标记来标识项目网络。
Open vSwitch通道网桥br-tun通过通道接口将数据包转发到计算节点
以下步骤涉及计算节点1:
对于VLAN项目网络:
VLAN接口将数据包转发到Open vSwitch VLAN网桥br-vlan。
Open vSwitch VLAN网桥br-vlan将数据包转发到Open vSwitch集成网桥br-int。
Open vSwitch集成网桥br-int用内部标记替换实际的VLAN标记。
对于VXLAN和GRE项目网络:
通道接口将数据包转发到Open vSwitch通道网桥br-tun。
Open vSwitch通道网桥br-tun解封装数据包并为项目网络添加内部标记。
Open vSwitch通道网桥br-tun将数据包转发到Open vSwitch集成网桥br-int。
3.Open vSwitch集成网桥br-int将数据包转发到Linux网桥qbr。
4.安全组规则(4)在Linux网桥qbr上处理数据包的防火墙和状态跟踪。
5.Linux网桥qbr将数据包转发到实例1上的tap接口(5)。
注意:返回流量遵循类似步骤。
具有浮动IP的实例的南北向流量流向

案例3:不同网络实例的东西向流量
对于具有固定或浮动IP的实例,网络节点使用相同的项目路由器路由不同项目网络之间的东西向流量。
项目网络1
网络: 192.168.1.0/24
网关: IP 192.168.1.1,MAC地址: TG1
项目网络2
网络: 192.168.2.0/24
网关: IP 192.168.2.1,MAC地址: TG2
计算节点1
实例1: IP 192.168.1.11,MAC地址: I1
计算节点2
实例2: IP 192.168.2.11,MAC地址: I2
实例1驻留在计算节点1上,使用project network 1。 实例2驻留在计算节点2上,使用project network 2。
两个项目网络都位于同一路由器上。 实例1向实例2发送数据包。
以下步骤涉及计算节点1:
1.实例1 tap接口(1)将数据包转发到Linux网桥qbr。数据包包含目标MAC地址TG1,因为目的地在另一个网络上。
2.安全组规则(2)在Linux桥qbr上处理数据包的状态跟踪。
3.Linux网桥qbr将数据包转发到Open vSwitch集成网桥br-int
4.Open vSwitch集成网桥br-int为项目网络1添加内部标记。
5.对于VLAN项目网络
Open vSwitch集成网桥br-int将数据包转发到Open vSwitch VLAN网桥br-vlan。<br></br>Open vSwitch VLAN bridge br-vlan用项目网络1的实际VLAN标记替换内部标记。<br></br>Open vSwitch VLAN网桥br-vlan通过VLAN接口将数据包转发到网络节点。
6.对于VXLAN和GRE项目网络:
Open vSwitch集成网桥 br-int将数据包转发到Open vSwitch通道网桥br-tun。<br></br>Open vSwitch通道网桥br-tun将数据包封装在VXLAN或GRE通道中,并添加一个标记来标识项目网络1。<br></br>Open vSwitch通道网桥br-tun通过通道接口将数据包转发到网络节点。
以下步骤涉及网络节点:
1.对于VLAN项目网络
VLAN接口将数据包转发到Open vSwitch VLAN网桥br-vlan。
Open vSwitch VLAN网桥br-vlan将数据包转发到Open vSwitch集成网桥br-int。
Open vSwitch集成网桥br-int替换项目网络1的实际VLAN标记为内部标记。
2.对于VXLAN和GRE项目网络:
通道接口将数据包转发到Open vSwitch通道网桥br-tun。
Open vSwitch通道网桥br-tun解封装数据包并为项目网络1添加内部标记。
Open vSwitch通道网桥br-tun将数据包转发到Open vSwitch集成网桥br-int。
3.Open vSwitch集成网桥 br-int将数据包转发到路由器名称空间qrouter中的qr-1接口(3)。qr-1接口包含项目网络1网关IP地址TG1。
4.路由器名称空间qrouter将数据包路由到qr-2接口(4)。qr-2接口包含项目网络2网关IP地址TG2。
5.路由器名称空间qrouter将数据包转发到Open vSwitch集成网桥br-int。
6.Open vSwitch集成网桥br-int为项目网络2添加内部标记。
7.对于VLAN项目网络:
Open vSwitch集成网桥br-int将数据包转发到Open vSwitch VLAN网桥br-vlan。
Open vSwitch VLAN bridge br-vlan用项目网络2的实际VLAN标记替换内部标记。
Open vSwitch VLAN网桥br-vlan通过VLAN接口将数据包转发到计算节点2。
8.对于VXLAN和GRE项目网络:
Open vSwitch集成网桥br-int 将数据包转发到Open vSwitch通道网桥br-tun。
Open vSwitch通道网桥br-tun将数据包封装在VXLAN或GRE隧道中,并添加一个标记来识别项目网络2。
Open vSwitch通道网桥br-tun通过通道接口将数据包转发到计算节点2。
以下步骤涉及计算节点2:
1.对于VLAN项目网络::
VLAN接口将数据包转发到Open vSwitch VLAN网桥br-vlan。
Open vSwitch VLAN网桥br-vlan将数据包转发到Open vSwitch集成网桥br-int。
Open vSwitch集成网桥br-int用内部标记替换项目网络2的实际VLAN标记。
2.对于VXLAN和GRE项目网络:
通道接口将数据包转发到Open vSwitch通道网桥br-tun。
Open vSwitch通道网桥br-tun解封装数据包并为项目网络2添加内部标记。
Open vSwitch通道网桥br-tun将数据包转发到Open vSwitch集成桥br-int。
3.Open vSwitch集成网桥 br-int 将数据包转发到Linux网桥qbr。
4.安全组规则(5)在Linux网桥qbr上处理数据包的防火墙和状态跟踪。
5.Linux网桥qbr将数据包转发到实例2上的tap接口(6)。
注意:返回流量遵循类似步骤。
不同网络实例的东西向流量流向

案例4:同一网络上的实例东西向流量
对于具有固定或浮动IP的实例,项目网络在实例之间直接转发东西向流量,无需使用网络节点上的项目路由器。
项目网络
网络: 192.168.1.0/24
计算节点1
实例1: IP 192.168.1.11,MAC地址: I1
计算节点2
实例2: IP 192.168.1.12,MAC地址: I2
实例1驻留在compute节点1中。 实例2驻留在compute节点2中。 两个实例都使用相同的项目网络。 实例1向实例2发送数据包。 Open vSwitch代理在项目网络中处理交换。
以下步骤涉及计算节点1:
1.实例1的tap接口(1)将数据包转发到VLAN网桥qbr。数据包包含目标MAC地址I2,因为目的地在同一网络。
2.安全组规则(2)在供应商网桥qbr上处理数据包的状态跟踪。
3.Linux网桥qbr将数据包转发到Open vSwitch集成网桥br-int。
4.Open vSwitch集成网桥为项目网络1添加内部标记。
5.对于VLAN项目网络:
Open vSwitch集成网桥<tt>br-int</tt>将数据包转发到Open vSwitch VLAN网桥br-vlan。
Open vSwitch VLAN bridge br-vlan用项目网络1的实际VLAN标记替换内部标记。
Open vSwitch VLAN bridge br-vlan通过VLAN接口将数据包转发到计算节点2。
6.对于VXLAN和GRE项目网络:
Open vSwitch集成网桥<tt>br-int</tt>将数据包转发到Open vSwitch通道网桥<tt>br-tun</tt>上。
Open vSwitch通道网桥br-tun将数据包封装在VXLAN或GRE通道中,并添加一个标记来标识项目网络1。
Open vSwitch通道网桥br-tun通过通道接口将数据包转发到计算节点2。
以下步骤涉及计算节点2:
1.对于VLAN项目网络:
VLAN接口将数据包转发到Open vSwitch VLAN网桥br-vlan。<br></br>Open vSwitch VLAN网桥br-vlan将数据包转发到Open vSwitch集成网桥br-int。<br></br>Open vSwitch集成网桥br-int用内部标记替换项目网络2的实际VLAN标记。<br></br>
2.对于VXLAN和GRE项目网络:
通道接口将数据包转发到Open vSwitch通道网桥br-tun。<br></br><br></br>Open vSwitch通道网桥br-tun解封装数据包并为项目网络2添加内部标记。<br></br><br></br>Open vSwitch通道网桥br-tun将数据包转发到Open vSwitch集成网桥br-int。
3.Open vSwitch集成网桥br-int将数据包转发到Linux网桥qbr。 4.安全组规则(3)在Linux网桥qbr上处理数据包的防火墙和状态跟踪。 5.Linux网桥qbr将数据包转发到实例2上的tap接口(4)。
注意:返回流量遵循类似步骤。
同一网络上的实例东西向流量流向

示例配置
使用以下示例配置作为在您的环境中部署该场景的模板。
控制节点
1.配置通用选项。编辑/etc/neutron/neutron.conf文件:
[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,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的最小值和最大值。
注意:
1.tenant_network_types选项中的第一个值在常规用户创建网络时成为默认项目网络类型。
2.network_vlan_range选项中的external值缺少VLAN ID范围,以支持管理用户使用任意VLAN ID。
3.启动服务
网络节点
1.配置内核以启用包转发并禁用反向路径过滤。编辑/etc/sysctl.conf文件:
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.conf文件:
[DEFAULT]
verbose = True
4.配置Open vSwitch代理。编辑/etc/neutron/plugins/ml2/ml2_conf.ini文件:
[ovs]
local_ip = TUNNEL_INTERFACE_IP_ADDRESS
enable_tunneling = True
bridge_mappings = vlan:br-vlan,external:br-ex
[agent]
l2_population = True
tunnel_types = gre,vxlan
[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
注意: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/GRE项目网络减少MTU。
1.编辑/etc/neutron/dhcp_agent.ini文件:
[DEFAULT]
dnsmasq_config_file = /etc/neutron/dnsmasq-neutron.conf<br></br><br></br><br></br>2.编辑/etc/neutron/dnsmasq-neutron.conf文件:
dhcp-option-force=26,1450
<br></br><br></br>
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.conf文件:
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.conf文件:
[DEFAULT]
verbose = True
4.配置Open vSwitch代理。编辑/etc/neutron/plugins/ml2/ml2_conf.ini文件:
[ovs]
local_ip = TUNNEL_INTERFACE_IP_ADDRESS
enable_tunneling = True
bridge_mappings = vlan:br-vlan
[agent]
l2_population = True
tunnel_types = gre,vxlan
[securitygroup]
firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
enable_security_group = True
enable_ipset = True
使用GRE/VXLAN项目网络接口的IP地址替换TUNNEL_INTERFACE_IP_ADDRESS。
5.启动以下服务:
Open vSwitch
Open vSwitch agent
验证服务操作
1.提供管理项目凭据。
2.验证代理的存在和操作:
$ neutron agent-list
+--------------------------------------+--------------------+----------+-------+----------------+---------------------------+
| id | agent_type | host | alive | admin_state_up | binary |
+--------------------------------------+--------------------+----------+-------+----------------+---------------------------+
| 1eaf6079-41c8-4b5b-876f-73b02753ff57 | Open vSwitch agent | compute1 | :-) | True | neutron-openvswitch-agent |
| 511c27b3-8317-4e27-8a0f-b158e4fb8368 | Metadata agent | network1 | :-) | True | neutron-metadata-agent |
| 7eae11ef-8157-4fd4-a352-bc841cf709f6 | Open vSwitch agent | network1 | :-) | True | neutron-openvswitch-agent |
| a9110ce6-22cc-4f78-9b2e-57f83aac68a3 | Open vSwitch agent | compute2 | :-) | True | neutron-openvswitch-agent |
| c41f3200-8eda-43ab-8135-573e826776d9 | DHCP agent | network1 | :-) | True | neutron-dhcp-agent |
| f897648e-7623-486c-8043-1b219eb2895a | L3 agent | network1 | :-) | True | neutron-l3-agent |
+--------------------------------------+--------------------+----------+-------+----------------+---------------------------+
创建初始网络
此示例创建了一个FLAT外部网络和一个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 | e5f9be2f-3332-4f2d-9f4d-7f87a5a7692e |
| name | ext-net |
| provider:network_type | flat |
| provider:physical_network | external |
| provider:segmentation_id | |
| router:external | True |
| shared | False |
| status | ACTIVE |
| subnets | |
| tenant_id | 96393622940e47728b6dcdb2ef405f50 |
+---------------------------+--------------------------------------+
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.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 | cd9c15a1-0a66-4bbe-b1b4-4b7edd936f7a |
| ip_version | 4 |
| ipv6_address_mode | |
| ipv6_ra_mode | |
| name | ext-subnet |
| network_id | e5f9be2f-3332-4f2d-9f4d-7f87a5a7692e |
| tenant_id | 96393622940e47728b6dcdb2ef405f50 |
+-------------------+----------------------------------------------------+
注意:示例配置包含vlan作为第一个项目网络类型。只有管理员用户才能创建其他类型的网络,如GRE或VXLAN。以下命令使用admin项目凭据创建VXLAN项目网络。
1.获取常规项目的ID。例如使用demo项目:
$ openstack project show demo
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Demo Project |
| enabled | True |
| id | 443cd1596b2e46d49965750771ebbfe1 |
| name | demo |
+-------------+----------------------------------+
2.创建项目网络:
$ neutron net-create demo-net --tenant-id 443cd1596b2e46d49965750771ebbfe1 \
--provider:network_type vxlan
Created a new network:
+---------------------------+--------------------------------------+
| Field | Value |
+---------------------------+--------------------------------------+
| admin_state_up | True |
| id | 6e9c5324-68d1-47a8-98d5-8268db955475 |
| name | demo-net |
| provider:network_type | vxlan |
| provider:physical_network | |
| provider:segmentation_id | 1 |
| router:external | False |
| shared | False |
| status | ACTIVE |
| subnets | |
| tenant_id | 443cd1596b2e46d49965750771ebbfe1 |
+---------------------------+--------------------------------------+
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 | c7b42e58-a2f4-4d63-b199-d266504c03c9 |
| ip_version | 4 |
| ipv6_address_mode | |
| ipv6_ra_mode | |
| name | demo-subnet |
| network_id | 6e9c5324-68d1-47a8-98d5-8268db955475 |
| tenant_id | 443cd1596b2e46d49965750771ebbfe1 |
+-------------------+--------------------------------------------------+
5.创建项目路由器:
$ neutron router-create demo-router
Created a new router:
+-----------------------+--------------------------------------+
| Field | Value |
+-----------------------+--------------------------------------+
| admin_state_up | True |
| external_gateway_info | |
| id | 474a5b1f-d64c-4db9-b3b2-8ae9bb1b5970 |
| name | demo-router |
| routes | |
| status | ACTIVE |
| tenant_id | 443cd1596b2e46d49965750771ebbfe1 |
+-----------------------+--------------------------------------+
6.在路由器上添加项目子网作为接口:
$ neutron router-interface-add demo-router demo-subnet
Added interface 0fa57069-29fd-4795-87b7-c123829137e9 to router demo-router.
7.在路由器上添加通往外部网络的网关:
$ neutron router-gateway-set demo-router ext-net
Set gateway for router demo-router
验证网络操作
1.在网络节点上,验证qrouter和qdhcp名称空间的创建:
$ ip netns
qrouter-4d7928a0-4a3c-4b99-b01b-97da2f97e279
qdhcp-353f5937-a2d3-41ba-8225-fa1af2538141
注意:在启动实例之前,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": "c7b42e58-a2f4-4d63-b199-d266504c03c9", "ip_address": "192.168.1.1"} |
| ff5f93c6-3760-4902-a401-af78ff61ce99 | | fa:16:3e:54:d7:8c | {"subnet_id": "cd9c15a1-0a66-4bbe-b1b4-4b7edd936f7a", "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<br></br><br></br><br></br>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 floatingip-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