上面左边是我的个人微信,如需进一步沟通,请加微信。 右边是我的公众号“Openstack私有云”,如有兴趣,请关注。
1.1.1.1. Neutron服务安装(Networking)
本章介绍如何使用提供商网络或自助服务网络选项安装和配置网络服务(Neutron)。
OpenStack Networking(Neutron)允许您创建并附加由其他OpenStack服务管理的接口设备到网络。可以实现插件以适应不同的网络设备和软件,为OpenStack架构和部署提供灵活性。
1.1.1.1.1. 网络服务概述
它包括以下组件:
2 neutron-server
接受并将API请求路由到相应的OpenStack Networking插件以进行操作。
2 OpenStack网络插件和代理
插拔端口,创建网络或子网,并提供IP寻址。这些插件和代理根据特定云中使用的供应商和技术而有所不同。OpenStack网络兼容思科虚拟和物理交换机的插件和代理,NEC OpenFlow产品,Open vSwitch,Linux桥接器和VMware NSX产品。
通用代理是L3(第3层),DHCP(动态主机IP寻址)和插件代理。
2 消息队列
由大多数OpenStack Networking安装使用,用于在Neutron服务器和各种代理之间路由信息。还充当数据库来存储特定插件的网络状态。
OpenStack Networking主要与OpenStack Compute进行交互,为其实例提供网络和连接。
1.1.1.1.2. OpenStack 网络(Neutron)概念
OpenStack Networking(Neutron)管理虚拟网络基础架构(VNI)的所有网络方面以及OpenStack环境中物理网络基础设施(PNI)的接入层方面。OpenStack Networking使项目能够创建高级虚拟网络拓扑,其中可能包括防火墙,负载平衡器和虚拟专用网(***)等服务。
网络提供网络,子网和路由器作为对象抽象。每个抽象都具有模拟其物理对象的功能:网络包含子网,路由器在不同子网和网络之间路由流量。
任何给定的网络设置至少有一个外部网络。与其他网络不同,外部网络不仅仅是一个虚拟定义的网络。相反,它代表了在OpenStack安装之外可访问的物理外部网络的一个视图。外部网络上的IP地址可以由外部网络上的任何人访问。
除了外部网络,任何网络设置都有一个或多个内部网络。这些软件定义的网络直接连接到虚拟机。只有任何给定内部网络上的虚拟机,或通过接口连接到类似路由器的子网上的虚拟机才能直接访问连接到该网络的虚拟机。
为了外部网络访问虚拟机,反之亦然,需要网络之间的路由器。每个路由器都有一个连接到外部网络的网关和连接到内部网络的一个或多个接口。像物理路由器一样,子网可以访问连接到同一路由器的其他子网上的机器,机器可以通过路由器的网关访问外部网络。
此外,您可以将外部网络上的IP地址分配给内部网络上的端口。一旦连接到子网,该连接都称为端口。你可以分配外部IP给VM的端口,这样,外部网络上的实体可以访问虚拟机。
网络还支持安全组。安全组使管理员能够以组的形式定义防火墙规则。VM可以属于一个或多个安全组,并且Networking将这些安全组中的规则应用于阻止或取消阻止该VM的端口,端口范围或流量类型。
网络使用的每个插件都有自己的概念。尽管操作VNI和OpenStack环境并不重要,但理解这些概念可以帮助您设置网络。所有网络安装使用核心插件和安全组插件(或只是No-Op安全组插件)。此外,还提供了防火墙即服务(FWaaS)和负载均衡器即服务(LBaaS)插件。
1.1.1.1.3. 安装和配置控制器节点
1.1.1.1.3.1. 先决条件
在配置OpenStack Networking(Neutron)服务之前,您必须创建一个数据库,服务凭据和API端点。
1、要创建数据库,请完成以下步骤:
使用数据库访问客户端作为root用户连接到数据库服务器:
$ mysql -u root -p
输入admin凭据以访问仅管理CLI命令:
$ . admin-openrc
2、要创建服务凭据,请完成以下步骤:
创建neutron用户:
$ openstack user create --domain default --password-prompt neutron
User Password:
Repeat User Password:
将admin角色添加到neutron用户:
$ openstack role add --project service --user neutron admin
创建neutron服务实体:
$ openstack service create --name neutron \
--description "OpenStack Networking" network
3、创建网络服务API端点:
$ openstack endpoint create --region RegionOne \
network public http://controller:9696
$ openstack endpoint create --region RegionOne \
network internal http://controller:9696
$ openstack endpoint create --region RegionOne \
network admin http://controller:9696
1.1.1.1.3.2. 配置网络选项
您可以使用由选项1和2表示的两种体系结构之一部署网络服务。
选项1部署最简单的可能架构,仅支持将实例附加到提供商(外部)网络。没有自助服务(私人)网络,路由器或浮动IP地址。只有admin或其他特权用户可以管理提供商网络。
选项2增加了支持将实例附加到自助服务网络的第3层服务的选项1。该demo或其他非特权用户可以管理自助服务网络,包括在自助服务和提供商网络之间提供连接的路由器。此外,浮动IP地址提供与使用来自外部网络(如Internet)的自助服务网络的实例的连接。
自助服务网络通常使用覆盖网络。覆盖网络协议(例如VXLAN)包括额外的头部,可以增加开销并减少可用于有效载荷或用户数据的空间。不知道虚拟网络基础架构,实例尝试使用1500字节的默认以太网最大传输单元(MTU)发送数据包。网络服务通过DHCP自动向实例提供正确的MTU值。但是,某些云图不使用DHCP或忽略DHCP MTU选项,并需要使用元数据或脚本进行配置。
选择以下网络选项之一来配置特定于其的服务。
v 网络选项1:提供商网络
v 网络选项2:自助网络
1.1.1.1.3.3. 配置元数据代理
元数据代理向实例提供诸如凭据的配置信息。
编辑/etc/neutron/metadata_agent.ini文件并完成以下操作:
在[DEFAULT]节中,配置元数据主机和共享密钥:
[DEFAULT]
# ...
nova_metadata_host = controller
metadata_proxy_shared_secret = METADATA_SECRET
用METADATA_SECRET适当的密码替换元数据代理。
1.1.1.1.3.4. 配置计算服务以使用网络服务
编辑/etc/nova/nova.conf文件并执行以下操作:
在[neutron]节中,配置访问参数,启用元数据代理,并配置密码:
[neutron]
# ...
url = http://controller:9696
auth_url = http://controller:35357
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = NEUTRON_PASS
service_metadata_proxy = true
metadata_proxy_shared_secret = METADATA_SECRET
替换NEUTRON_PASS为neutron 身份服务中为用户选择的密码。
替换METADATA_SECRET您为元数据代理选择的密码。
1.1.1.1.3.5. 完成安装
1、网络服务初始化脚本期望/etc/neutron/plugin.ini指向ML2插件配置文件的符号链接 /etc/neutron/plugins/ml2/ml2_conf.ini。如果此符号链接不存在,请使用以下命令创建它:
# ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
2、填充数据库:
# su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf \
--config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron
3、重新启动Compute API服务:
# systemctl restart openstack-nova-api.service
4、启动网络服务并将其配置为在系统启动时启动。
对于两种网络选项:
# systemctl enable neutron-server.service \
neutron-linuxbridge-agent.service neutron-dhcp-agent.service \
neutron-metadata-agent.service
# systemctl start neutron-server.service \
neutron-linuxbridge-agent.service neutron-dhcp-agent.service \
neutron-metadata-agent.service
对于网络选项2,还启用第3层服务:
# systemctl enable neutron-l3-agent.service
# systemctl start neutron-l3-agent.service
1.1.1.1.3.6. 网络选项1:提供商网络
在控制器节点上安装和配置网络组件。
1.1.1.1.3.6.1. 安装组件
# yum install openstack-neutron openstack-neutron-ml2 \
openstack-neutron-linuxbridge ebtables
1.1.1.1.3.6.2. 配置服务器组件
网络服务器组件配置包括数据库,身份验证机制,消息队列,拓扑更改通知和插件。
编辑/etc/neutron/neutron.conf文件并完成以下操作:
在该[database]部分中,配置数据库访问:
[database]
# ...
connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron
替换NEUTRON_DBPASS为数据库选择的密码。
在[DEFAULT]节中,启用模块化第2层(ML2)插件并禁用其他插件:
[DEFAULT]
# ...
core_plugin = ml2
service_plugins =
在[DEFAULT]节中,配置RabbitMQ 消息队列访问:
[DEFAULT]
# ...
transport_url = rabbit://openstack:RABBIT_PASS@controller
替换RABBIT_PASS您为openstackRabbitMQ中的帐户选择的密码 。
在[DEFAULT]和[keystone_authtoken]部分中,配置身份服务访问:
[DEFAULT]
# ...
auth_strategy = keystone
[keystone_authtoken]
# ...
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = NEUTRON_PASS
替换NEUTRON_PASS为neutron 身份服务中为用户选择的密码。
在[DEFAULT]和[nova]部分中,配置网络以通知计算网络拓扑更改:
[DEFAULT]
# ...
notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true
[nova]
# ...
auth_url = http://controller:35357
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = nova
password = NOVA_PASS
替换NOVA_PASS为nova 身份服务中为用户选择的密码。
在[oslo_concurrency]部分中,配置锁定路径:
[oslo_concurrency]
# ...
lock_path = /var/lib/neutron/tmp
1.1.1.1.3.6.3. 配置模块化二层(ML2)插件
ML2插件使用Linux桥机制为实例构建第2层(桥接和交换)虚拟网络基础架构。
编辑/etc/neutron/plugins/ml2/ml2_conf.ini文件并完成以下操作:
在[ml2]节中,启用平面和VLAN网络:
[ml2]
# ...
type_drivers = flat,vlan
在[ml2]节中,禁用自助服务网络:
[ml2]
# ...
tenant_network_types =
在[ml2]节中,启用Linux桥机制:
[ml2]
# ...
mechanism_drivers = linuxbridge
警告:配置ML2插件后,删除type_drivers选项中的值 可能会导致数据库不一致。
在[ml2]节中,启用端口安全扩展驱动程序:
[ml2]
# ...
extension_drivers = port_security
在[ml2_type_flat]部分中,将提供商虚拟网络配置为平面网络:
[ml2_type_flat]
# ...
flat_networks = provider
在[securitygroup]节中,启用ipset以提高安全组规则的效率:
[securitygroup]
# ...
enable_ipset = true
1.1.1.1.3.6.4. 配置Linux桥接器代理
Linux桥接器代理为实例构建第2层(桥接和交换)虚拟网络基础架构,并处理安全组。
编辑/etc/neutron/plugins/ml2/linuxbridge_agent.ini文件并完成以下操作:
在[linux_bridge]节中,将提供商虚拟网络映射到提供商物理网络接口:
[linux_bridge]
physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME
替换PROVIDER_INTERFACE_NAME为底层提供商物理网络接口的名称。
在[vxlan]节中,禁用VXLAN覆盖网络:
[vxlan]
enable_vxlan = false
在[securitygroup]节中,启用安全组并配置Linux桥iptables防火墙驱动程序:
[securitygroup]
# ...
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
1.1.1.1.3.6.5. 配置DHCP代理
DHCP代理为虚拟网络提供DHCP服务。
编辑/etc/neutron/dhcp_agent.ini文件并完成以下操作:
在[DEFAULT]节中,配置Linux桥接器驱动程序Dnsmasq DHCP驱动程序,并启用隔离元数据,以便提供商网络上的实例可以通过网络访问元数据:
[DEFAULT]
# ...
interface_driver = linuxbridge
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = true
1.1.1.1.3.7. 网络选项2:自助网络
在控制器节点上安装和配置网络组件。
1.1.1.1.3.7.1. 安装组件
# yum install openstack-neutron openstack-neutron-ml2 \
openstack-neutron-linuxbridge ebtables
1.1.1.1.3.7.2. 配置服务器组件
编辑/etc/neutron/neutron.conf文件并完成以下操作:
在[database]部分中,配置数据库访问:
[database]
# ...
connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron
替换NEUTRON_DBPASS为数据库选择的密码。
在[DEFAULT]节中,启用模块化第2层(ML2)插件,路由器服务和重叠的IP地址:
[DEFAULT]
# ...
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = true
在[DEFAULT]节中,配置RabbitMQ 消息队列访问:
[DEFAULT]
# ...
transport_url = rabbit://openstack:RABBIT_PASS@controller
替换RABBIT_PASS您为openstackRabbitMQ中的帐户选择的密码 。
在[DEFAULT]和[keystone_authtoken]部分中,配置身份服务访问:
[DEFAULT]
# ...
auth_strategy = keystone
[keystone_authtoken]
# ...
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = NEUTRON_PASS
替换NEUTRON_PASS为neutron 身份服务中为用户选择的密码。
在[DEFAULT]和[nova]部分中,配置网络以通知计算网络拓扑更改:
[DEFAULT]
# ...
notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true
[nova]
# ...
auth_url = http://controller:35357
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = nova
password = NOVA_PASS
替换NOVA_PASS为nova 身份服务中为用户选择的密码。
在[oslo_concurrency]部分中,配置锁定路径:
[oslo_concurrency]
# ...
lock_path = /var/lib/neutron/tmp
1.1.1.1.3.7.3. 配置模块化二层(ML2)插件
ML2插件使用Linux桥机制为实例构建第2层(桥接和交换)虚拟网络基础架构。
编辑/etc/neutron/plugins/ml2/ml2_conf.ini文件并完成以下操作:
在[ml2]节中,启用平面,VLAN和VXLAN网络:
[ml2]
# ...
type_drivers = flat,vlan,vxlan
在[ml2]节中,启用VXLAN自助服务网络:
[ml2]
# ...
tenant_network_types = vxlan
在[ml2]节中,启用Linux Bridge和第2层人口机制:
[ml2]
# ...
mechanism_drivers = linuxbridge,l2population
警告:配置ML2插件后,删除type_drivers选项中的值 可能会导致数据库不一致。
注意:Linux Bridge代理仅支持VXLAN覆盖网络。
在[ml2]节中,启用端口安全扩展驱动程序:
[ml2]
# ...
extension_drivers = port_security
在[ml2_type_flat]部分中,将提供商虚拟网络配置为平面网络:
[ml2_type_flat]
# ...
flat_networks = provider
在[ml2_type_vxlan]节中,配置自助网络的VXLAN网络标识符范围:
[ml2_type_vxlan]
# ...
vni_ranges = 1:1000
在[securitygroup]节中,启用ipset以提高安全组规则的效率:
[securitygroup]
# ...
enable_ipset = true
1.1.1.1.3.7.4. 配置Linux桥接器代理
Linux桥接器代理为实例构建第2层(桥接和交换)虚拟网络基础架构,并处理安全组。
编辑/etc/neutron/plugins/ml2/linuxbridge_agent.ini文件并完成以下操作:
在[linux_bridge]节中,将提供商虚拟网络映射到提供商物理网络接口:
[linux_bridge]
physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME
替换PROVIDER_INTERFACE_NAME为底层提供商物理网络接口的名称。
在[vxlan]节中,启用VXLAN覆盖网络,配置处理覆盖网络的物理网络接口的IP地址,并启用第2层群:
[vxlan]
enable_vxlan = true
local_ip = OVERLAY_INTERFACE_IP_ADDRESS
l2_population = true
替换OVERLAY_INTERFACE_IP_ADDRESS处理覆盖网络的底层物理网络接口的IP地址。示例架构使用管理接口将流量隧道传送到其他节点。因此,替换OVERLAY_INTERFACE_IP_ADDRESS控制器节点的管理IP地址。
在[securitygroup]节中,启用安全组并配置Linux桥iptables防火墙驱动程序:
[securitygroup]
# ...
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
1.1.1.1.3.7.5. 配置第三层代理
第三层(L3)代理为自助虚拟网络提供路由和NAT服务。
编辑/etc/neutron/l3_agent.ini文件并完成以下操作:
在[DEFAULT]节中,配置Linux Bridge接口驱动程序和外部网桥:
[DEFAULT]
# ...
interface_driver = linuxbridge
1.1.1.1.3.7.6. 配置DHCP代理
DHCP代理为虚拟网络提供DHCP服务。
编辑/etc/neutron/dhcp_agent.ini文件并完成以下操作:
在[DEFAULT]节中,配置Linux桥接器驱动程序Dnsmasq DHCP驱动程序,并启用隔离元数据,以便提供商网络上的实例可以通过网络访问元数据:
[DEFAULT]
# ...
interface_driver = linuxbridge
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = true
1.1.1.1.4. 安装和配置计算节点
计算节点处理实例的连接和安全组。
1.1.1.1.4.1. 安装组件
# yum install openstack-neutron-linuxbridge ebtables ipset
1.1.1.1.4.2. 配置公共组件
网络公共组件配置包括身份验证机制,消息队列和插件。
编辑/etc/neutron/neutron.conf文件并完成以下操作:
在[database]节中,注释掉任何connection选项,因为计算节点不直接访问数据库。
在[DEFAULT]节中,配置RabbitMQ 消息队列访问:
[DEFAULT]
# ...
transport_url = rabbit://openstack:RABBIT_PASS@controller
替换RABBIT_PASS您为openstack RabbitMQ中的帐户选择的密码。
在[DEFAULT]和[keystone_authtoken]部分中,配置身份服务访问:
[DEFAULT]
# ...
auth_strategy = keystone
[keystone_authtoken]
# ...
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = NEUTRON_PASS
替换NEUTRON_PASS为neutron 身份服务中为用户选择的密码。
在该[oslo_concurrency]部分中,配置锁定路径:
[oslo_concurrency]
# ...
lock_path = /var/lib/neutron/tmp
1.1.1.1.4.3. 配置网络选项
选择与控制器节点选择的相同的网络选项来配置特定于它的服务。
网络选项1:提供商网络
网络选项2:自助网络
1.1.1.1.4.3.1. 网络选项1:提供商网络
在计算节点上配置网络组件。
配置Linux桥接器代理:
Linux桥接器代理为实例构建第2层(桥接和交换)虚拟网络基础架构,并处理安全组。
编辑/etc/neutron/plugins/ml2/linuxbridge_agent.ini文件并完成以下操作:
在本[linux_bridge]节中,将提供商虚拟网络映射到提供商物理网络接口:
[linux_bridge]
physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME
替换PROVIDER_INTERFACE_NAME为底层提供商物理网络接口的名称。
在本[vxlan]节中,禁用VXLAN覆盖网络:
[vxlan]
enable_vxlan = false
在本[securitygroup]节中,启用安全组并配置Linux桥iptables防火墙驱动程序:
[securitygroup]
# ...
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
1.1.1.1.4.3.2. 网络选项2:自助网络
在计算节点上配置网络组件。
配置Linux桥接器代理:
Linux桥接器代理为实例构建第2层(桥接和交换)虚拟网络基础架构,并处理安全组。
编辑/etc/neutron/plugins/ml2/linuxbridge_agent.ini文件并完成以下操作:
在本[linux_bridge]节中,将提供商虚拟网络映射到提供商物理网络接口:
[linux_bridge]
physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME
替换PROVIDER_INTERFACE_NAME为底层提供商物理网络接口的名称。请参阅主机网络 了解更多信息。
在本[vxlan]节中,启用VXLAN覆盖网络,配置处理覆盖网络的物理网络接口的IP地址,并启用第2层群:
[vxlan]
enable_vxlan = true
local_ip = OVERLAY_INTERFACE_IP_ADDRESS
l2_population = true
替换OVERLAY_INTERFACE_IP_ADDRESS处理覆盖网络的底层物理网络接口的IP地址。示例架构使用管理接口将流量隧道传送到其他节点。因此,替换OVERLAY_INTERFACE_IP_ADDRESS计算节点的管理IP地址。
在本[securitygroup]节中,启用安全组并配置Linux桥iptables防火墙驱动程序:
[securitygroup]
# ...
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
1.1.1.1.4.4. 配置计算服务以使用网络服务
编辑/etc/nova/nova.conf文件并完成以下操作:
在本[neutron]节中,配置访问参数:
[neutron]
# ...
url = http://controller:9696
auth_url = http://controller:35357
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = NEUTRON_PASS
替换NEUTRON_PASS为neutron 身份服务中为用户选择的密码。
1.1.1.1.4.5. 完成安装
重新启动计算服务:
# systemctl restart openstack-nova-compute.service
启动Linux桥接代理并将其配置为在系统启动时启动:
# systemctl enable neutron-linuxbridge-agent.service
# systemctl start neutron-linuxbridge-agent.service