部署场景1:带有遗留的Open vSwitch
此场景描述了使用带有Open vSwitch(OVS)的ML2插件的OpenStack网络服务的(基本)实现。
遗留的实现通过为普通用户提供一种方法来管理自助服务的虚拟数据中心基础设施的网络部分,他们可以在一个项目中管理虚拟网络,包括以下组件
项目(租户)网络
项目网络为特定项目的实例提供了连接性。常规(非特权)用户可以在管理员或操作员为其定义的分配中管理项目网络。项目网络可以使用VLAN、GRE或VXLAN传输方法。项目网络通常使用私有IP地址范围。网络是指项目网络上的IP地址作为固定的IP地址。
外部网络
外部网络提供与外部网络(如Internet)的连接。只有管理(特权)用户可以管理外部网络,因为它们与物理网络基础设施交互。
外部网络可以使用FLAT或VLAN传输方法,这取决于物理网络基础结构,通常使用公共IP地址范围。
注意:FLAT网络本质上是使用未标记的或本地的VLAN。类似于物理网络的二层,每个外部网桥只能存在一个平面网络。在大多数情况下,生产部署应该使用VLAN传输来进行外部网络。
路由器
路由器通常连接项目和外部网络。默认情况下,它们实现SNAT,为项目网络上的实例提供出站外部连接。
每个路由器在SNAT的外部网络分配中使用一个IP地址
路由器还使用DNAT为项目网络的实例提供入站外部连接。
网络指的是路由器上的IP地址,这些路由器为项目网络上的实例提供入站外部连接,作为浮动的IP地址。
路由器还可以连接属于同一个项目的项目网络。
支持的服务
支持的服务包括DHCP和元数据。DHCP服务管理项目网络上实例的IP地址。元数据服务为项目网络中的实例提供了一个API,以获取诸如SSH密钥之类的元数据。
示例配置创建了一个FLAT外部网络和一个VXLAN项目(租户)网络。然而,这种配置也支持VLAN外部网络、VLAN项目网络和GRE项目网络。
先决条件
这些先决条件定义了部署此场景所需的最小物理基础设施和立即的OpenStack服务依赖关系。
例如,网络服务直接依赖于身份服务,而计算服务直接依赖于网络服务。而像镜像服务没有依赖性的服务,是因为网络服务没有直接依赖它。
然而,计算服务依赖于镜像服务来启动一个实例。本场景中的示例配置假定了网络服务组件的基本配置知识。
基础设施
1、一个带有网络管理接口的控制节点
2、一个具有四个网络接口的网络节点:管理、项目隧道网络、VLAN项目网络和外部(通常是Internet)。
3、Open vSwitch网桥br-vlan必须包含VLAN接口上的一个端口,Open vSwitch 网桥br-ex必须在外部接口上包含一个端口
4、至少有一个具有三个网络接口的计算节点:管理、项目隧道网络和VLAN项目网络。Open vSwitch网桥br-vlan必须包含VLAN接口上的一个端口
为了提高对网络流量的理解,网络和计算节点为VLAN项目网络包含一个单独的网络接口。
在生产环境中,VLAN项目网络可以使用任何Open vSwitch来访问网络接口。例如br-tun网桥。
在示例配置中,管理网络使用10.0.0 / 24,隧道网络使用10.0.1.0 / 24,外部网络使用203.0.113.0 / 24。VLAN网络不需要IP地址范围,因为它只处理二级连接。
硬件要求:
网络布局
服务布局
注意:对于VLAN外部和项目网络,物理网络基础设施必须支持VLAN标记。为了获得VXLAN和GRE项目网络的最佳性能,网络基础设施应该支持巨型帧。
控制节点的OpenStack服务
在neutron.conf文件中具有数据库服务器的合适配置 在neutron.conf文件中具有消息队列服务的合适配置。
在neutron.conf文件中具有openstack keystone服务的合适配置
在nova.conf文件中具有openstack计算 控制/管理服务的合适配置去使用neutron
neutron服务器服务、ML2插件和任何依赖关系。
网络节点的Openstack服务
在neutron.conf文件中具有openstack keystone服务的合适配置
Open vSwitch服务、ML2插件、Open vSwitch代理、三层代理、DHCP代理、metadata代理和任何依赖关系
计算节点的Openstack服务
在neutron.conf文件中具有openstack keystone服务的合适配置
在nova.conf文件中具有openstack计算 控制/管理服务的合适配置去使用neutron
Open vSwitch服务、ML2插件、Open vSwitch代理和和任何依赖关系
体系结构
遗留体系结构在您的环境中提供基本的虚拟网络组件。在项目和外部网络之间的路由完全驻留在网络节点上.
尽管比其他体系结构更容易部署,但是在网络节点上执行所有功能会造成一个单点故障和潜在的性能问题。
考虑在生产环境中部署DVR或L3 HA架构,以提供冗余和提高性能。
一般的体系结构
网络节点包含以下网络组件:
Open vSwitch代理管理虚拟交换机之间的连接,以及通过虚拟端口与其他网络组件(如名称空间、Linux网桥桥和底层接口)进行交互。
dhcp代理管理qdhcp名称空间。qdhcp名称空间为使用项目网络的实例提供DHCP服务。
管理qrouter名称空间的L3代理。qrouter名称空间提供了项目和外部网络之间以及项目网络之间的路由。它们还在实例和元数据代理之间路由元数据通信。
元数据代理处理实例的元数据操作。
网络节点回顾
网络节点组件
计算节点包含以下网络组件:
Open vSwitch代理管理虚拟交换机之间的连接,以及通过虚拟端口与其他网络组件(如名称空间、Linux网桥和底层接口)进行交互。
Linux bridge处理安全组。由于open vSwitch和iptables的限制,网络服务使用Linux bridge来管理实例的安全组。
计算节点回顾
计算节点组件
数据包流
南北网络流量在一个实例和外部网络之间传输,通常是互联网。东西网络流量在实例之间传播。
案例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上,并使用一个项目网络
实例向外部网络的主机发送一个包。
以下步骤涉及计算节点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上。
Open vSwitch VLAN bridge br-vlan用项目网络的实际VLAN标记替换内部标记
Open vSwitch VLAN bridge br-vlan通过VLAN接口将数据包转发到网络节点
6.对于VXLAN和GRE项目网络:
Open vSwitch集成网桥br-int将数据包转发到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上。
开放的vSwitch集成网桥用br-int替换了项目网络的实际VLAN标记与内部标记。
2.对于VXLAN和GRE项目网络:
通道接口将数据包转发到Open vSwitch 通道网桥br-tun上。
Open vSwitch通道网桥br-tun打开包并为项目网络添加内部标记。
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
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上,并使用一个项目网络。
实例从外部网络的主机接收数据包。
以下步骤涉及网络节点:
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地址TR1。
5.路由器名称空间qrouter将数据包转发到Open vSwitch 集成网桥br-int。
6.Open vSwitch集成桥br-int为项目网络添加了内部标记。
7.对于VLAN项目网络:
Open vSwitch集成网桥br-int将数据包转发到Open vSwitchVLAN桥br-vlan上。
Open vSwitch VLAN bridge br-vlan用项目网络的实际VLAN标记替换内部标记。
Open vSwitch VLAN网桥br-vlan通过VLAN接口将数据包转发到计算节点。
8.对于VXLAN和GRE项目网络
Open vSwitch集成网桥br-int将数据包转发到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 网关:带有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)将包转发到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。
Open vSwitch VLAN bridge br-vlan用项目网络1的实际VLAN标记替换内部标记。
Open vSwitch VLAN网桥br-vlan通过VLAN接口将数据包转发到网络节点。
6.对于VXLAN和GRE项目网络:
Open vSwitch集成网桥 br-int将数据包转发到Open vSwitch通道网桥br-tun上。
Open vSwitch通道网桥br-tun将包封装在VXLAN或GRE 通道中,并添加一个标记来标识项目网络1。
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 TG2网关IP地址。
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集成桥brint。
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:带有使用MAC地址I1的192.168.1.11,
计算节点2
实例2:带有MAC地址I2的192.168.1.12
实例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集成网桥br-int将数据包转发到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集成网桥br-int将数据包转发到Open vSwitch通道网桥br-tun上。 Open vSwitch通道网桥br-tun将包封装在VXLAN或GRE通道中,并添加一个标记来标识项目网络1。 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.安全组规则(3)在Linux网桥qbr上处理数据包的防火墙和状态跟踪。
5.Linux网桥qbr将数据包转发到实例2上的tap接口(4)。
注意:返回的流量也遵循类似的步骤。
在相同网络上的实例的东西向网络网络流向
示例配置
使用下面的示例配置作为在您的环境中部署该场景的模板。
控制节点
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,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选项中的外部值缺少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 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
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 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
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