这时候我们需要部署一个networking Service网络服务,来为实例来提供虚拟网络。
部署网络服务我们这里使用的是neutron来实现的,通过neutron来提供虚拟化的网络支持。
neutron网络服务的组件:
neutron-server ,提供api接受网络上的相关请求;OpenStack Networking plug-ins and agents ,OpenStack的网络插件和代理,这些插件我们可以自己往里面添加,不同厂商插件功能也是不一样的;Messaging queue ,消息队列在网络服务之间传递消息,这块就是rabbitMQ;在配置OpenStack网络(neutron)服务之前,必须创建数据库,服务凭证和API端点。
首先创建数据库,neutron也是使用到数据库的,创建库然后创建授权用户来进行访问。
mysql -u root -pXylong_000 CREATE DATABASE neutron; GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY '123'; GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY '123';接着我们创建neutron的用户、做授权,
source admin-openrc openstack user create --domain default --password-prompt neutron openstack role add --project service --user neutron admin接着创建网络服务,名字叫做neutron,
openstack service create --name neutron --description "OpenStack Networking" network创建对应的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根据官方文档中提供的网络模式一共是两种,分别是provider+self-service,
provider网络 ,他是通过我们初始添加的一块物理网络来进行通信,我那块物理网卡已经设置为NAT模式了,那么我们使用provider网络创建出来的实例就是可以连通的外网的;
self-service网络 ,他说白了就是内部网络,就像我们ipv4地址中的私有网段一样,他可以创建网络但是仅限于内部的实例来进行通信是没法连接外网的; 如果你想要通过self-service网络来连接外网的话,那么你是需要将provider网络配置好,并且创建出一个provider类型的网络,然后设置为路由绑定到你创建的self-service网络上面,这样self-service网络才可以访问外网。
我这里使用的是第二种。
接着我们到controller节点上安装neutron的软件,
yum install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables接着我们修改配置文件,neutron网络服务的配置文件可以说是OpenStack各个组件中需要修改最多的一个组件,
比如,配置数据库、验证机制,keystone、消息队列是谁、网络拓扑变更了通知谁、还有二层网络,三层网络的插件,这些我们都是需要配置的,
首先是neutron的配置文件,我们配置连接数据库,
vim /etc/neutron/neutron.conf配置数据库访问: [database]
connection = mysql+pymysql://neutron:123@controller/neutron[DEFAULT]
core_plugin = ml2 service_plugins = router allow_overlapping_ips = true transport_url = rabbit://openstack:123@controller auth_strategy = keystone notify_nova_on_port_status_changes = true notify_nova_on_port_data_changes = true 参数解释core_plugin#配置支持的插件,ml2是二层的插件,这是provider网络的service_plugins#指定self-service网络出去使用路由allow_overlapping_ipstransport_url#配置RabbitMQ 消息队列的地址auth_strategy#配置身份服务的验证方式:notify_nova_on_port_status_changes#网络拓扑变更通知notify_nova_on_port_data_changes#网络发生变化通知配置身份服务访问:
[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 = 123将网络配置为通知Compute网络拓扑更改: [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 = 123配置锁定路径: [oslo_concurrency]
lock_path = /var/lib/neutron/tmpML2插件使用Linux桥接器机制为实例构建第2层(桥接和交换)虚拟网络基础结构。 说白了就是配置二层插件,使用什么网络虚拟化的方式,二层网络怎么实现,
vim /etc/neutron/plugins/ml2/ml2_conf.ini[ml2]
type_drivers = flat,vlan,vxlan tenant_network_types = vxlan mechanism_drivers = linuxbridge,l2population extension_drivers = port_security 参数解释type_drivers#指定驱动类型tenant_network_types#指定网络类型mechanism_drivers#指定使用的驱动是Linux网桥extension_drivers#指定额外驱动,端口安全接着设置网络是provider,
[ml2_type_flat]
flat_networks = provider指定虚拟VLAN的范围,
[ml2_type_vxlan]
vni_ranges = 1:1000接着启动安全组,
[securitygroup]
enable_ipset = true接着我们配置Linux网桥配置文件,
vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini指定以哪个网卡作为桥,来实现网桥的映射,
[linux_bridge]
physical_interface_mappings = provider:eth0这里的网卡我们是事先配置好的,我们是可以查看到的,
接着启动vxlan虚拟VLAN,指定controller节点的ip地址,启动二层网络
[vxlan]
enable_vxlan = true local_ip = 192.168.144.10 l2_population = true启用安全组并配置Linux网桥iptables防火墙驱动程序:
[securitygroup]
enable_security_group = true firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver确保Linux操作系统内核支持网桥过滤器,要启用网络桥接支持,通常br_netfilter需要加载内核模块。
首先我们需要判断下模块是否加载?
lsmod | grep br_netfilter如果没有就加载模块,
modprobe br_netfilter然后执行以下操作:
vim /etc/sysctl.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 sysctl -p第3层(L3)代理为自助式虚拟网络提供路由和NAT服务。
vim /etc/neutron/l3_agent.ini指定Linux使用的是网桥,
[DEFAULT]
interface_driver = linuxbridge配置DHCP功能,可以通过网桥自动分配IP地址,
vim /etc/neutron/dhcp_agent.ini设置接口驱动为Linux网桥,指定DHCP驱动,最后开启隔离元数据,
[DEFAULT]
interface_driver = linuxbridge dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq enable_isolated_metadata = true元数据代理提供配置信息,例如实例的凭据。
vim /etc/neutron/metadata_agent.ini指定访问元数据的IP,下面这个密码需要在nova的配置文件[neutron] 的group组中被使用,也就是说必须配置一致,
[DEFAULT]
nova_metadata_host = controller metadata_proxy_shared_secret = 123接着在nova服务中配置neutron的地址, neutron服务是为nova服务创建出来的实例提供网络的,所以需要在nova的配置文件中添加上连接neutron的配置文件,里面用到的meta的密码就是在上一个配置文件中制定的,我用的都是123
vim /etc/nova/nova.conf配置访问参数,启用元数据代理,并配置机密:
[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 = 123修改好配置文件之后我们就该网数据库中同步数据了,这里我们需要先生成插件的配置路径,
ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini接着往数据库中同步数据,
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我们可以进入到数据库中查看下
mysql -uroot -pXylong_000 use neutron show tables;因为修改了nova.conf配置文件所以重新启动计算服务:
systemctl restart openstack-nova-api.service启动网络服务,并将其配置为开机启动。
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启动第3层服务:
systemctl enable neutron-l3-agent.service systemctl start neutron-l3-agent.service接着到了计算节点,它上面也会有一些网络操作,在哪个节点上执行,桥会变成什么样子,
yum install openstack-neutron-linuxbridge ebtables ipset接着在计算节点上进行身份验证机制,消息队列和插件的配置,
设置RabbitMQ 消息队列访问,配置身份服务访问
[DEFAULT]
transport_url = rabbit://openstack:123@controller 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 = 123配置锁定路径:
[oslo_concurrency]
lock_path = /var/lib/neutron/tmp因为使用了Linux网桥所以也是需要配置下的,
vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini指定Linux网桥使用的物理网卡,
[linux_bridge]
physical_interface_mappings = provider:eth0接着启动vxlan虚拟VLAN,指定compute节点的ip地址,启动二层网络
[vxlan]
enable_vxlan = true local_ip = 192.168.144.11 l2_population = true启用安全组并配置Linux网桥iptables防火墙驱动程序:
[securitygroup]
enable_security_group = true firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver验证以下所有sysctl值是否设置为确保Linux操作系统内核支持网桥过滤器,要启用网络桥接支持,通常br_netfilter需要加载内核模块。
首先我们需要判断下模块是否加载?
lsmod | grep br_netfilter如果没有就加载模块,
modprobe br_netfilter然后执行以下操作:
vim /etc/sysctl.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 sysctl -p修改下compute节点的nova服务的配置,能访问到neutron服务,
vim /etc/nova/nova.conf配置访问参数:
[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 = 123因为nova服务中添加了配置重启下服务,
systemctl restart openstack-nova-compute.service启动neutron服务并设置为开机自启,
systemctl enable neutron-linuxbridge-agent.service systemctl start neutron-linuxbridge-agent.service我们可以到controller节点上面,加载管理员环境变量,查看下我们的网络服务,
source admin-openrc openstack network agent list创建一个provider网络试下: PS:在neutron网路服务配置的这里,我们网络全部是按照self-service方式配置的但是我们还是可以创建provider网络的,因为self-service的配置是覆盖了provider网络的,这里只需要我们的外部网络支持就可以创建出provider类型的网络,
source admin-openrc openstack network create --share --external --provider-physical-network provider --provider-network-type flat provider接着指定子网的范围,
PS:因为是创建的provider类型的网络,所以这里的地址段是需要我们在Vmware软件中单独进行配置的,否则我们就是网络创建出来了但是分配给实例还是无法连接外网的,
openstack subnet create --network provider --allocation-pool start=192.168.223.10,end=192.168.223.30 --dns-nameserver 192.168.223.2 --gateway 192.168.223.2 --subnet-range 192.168.223.0/24 provider网络是可以正常创建的,
openstack network list网络创建好之后可以查看下controller节点的网络状况,作为neutron使用的网卡eth0已经没得地址了,他的IP地址到了下面这个网卡上面了, 查看Linux网桥已经创建了,
总结:
到这里为止我们的网络服务neutron就搭建完毕了,
在neutron这里我们了解到原生的OpenStack中提供的两类网络分别是provider直连式网络和self-service内部网络,
如果是使用provider直连式网络对物理网卡有需求,他是需要能够连接外网的,而且创建provider类型的网络的时候分配子网地址范围也是物理网卡上IP地址同一个地址段的,如果是self-service网络就没有那么多的要求了,他的功能就是创建内部网络,类似于私网地址,就是说我们在OpenStack环境中随便使用,但是无法连接外网,这里如果你完全按照官方文档的步骤来创建的话是创建不出provider类型的网络的,就是创建出来也没法给实例分配地址,但是self-service网络是可以正常使用的,
进行到现在我们安装了keystone身份认证、glance映像服务、nova计算服务、neutron网络服务,现在我们的OpenStack环境就已经达到了启动实例的多有条件了,如果你现在就想创建实例,那么你就可以跳转到 创建实例 进行实例的创建了。
如果安装官方文档的步骤我们接下来需要 安装dashboard