nova服务之后就是neutron网络服务了,他是为OpenStack环境中创建的实例提供网络,就是二层网络和三层网络,根据官方文档中的内容是提供了两种网络:provider和self-service网络,
——》provider网络是依赖于自己的外部网络的,你想让创建出来的实例联网那么你的外部网络就需要可以连通外网,这个比较依赖于你的网络环境;
——》self-service网络是私有网络,就是可以自己将私有网络进行规划,你可以随便进行设置网络访问进行配置,但是他是不支持连接外网的,就是使用内部的自己创建的私有网络的,
如果想连接外网根据官方文档的操作还是得先创建出来provider网络,然后创建出来self-service网络,接着创建路由,将分配的地址绑定到self-service网络创建自己的实例上,这个实例才可以进行上网了。
我这里就是按照官方文档中self-service网络来部署,
但是为了可以让里面的实例可以访问外网,那么可以将neutron网络服务使用的那个网卡,网卡模式设置外NAT模式,然后外部自己的网络可以连接外网,
根据官方文档中的设置是单独拿出来一个网卡,网络模式设置为none,然后静态地址也不配置,等着neutron网络服务来进行配置,但是我试验过,首先没法连通外网,使用这个网卡创建出来的网络分配给实例是没法连通外网的,接着没法自动分配地址,这个可以自己尝试下,我是没有创建成功。
所以我直接将网卡设置为NAT模式,Vmware的NAT模式启动DHCP功能,接着网卡的网络模式设置为DHCP让他自动获取地址,最后外部环境要保证可以联网,就是说操作系统能够正常联网,
我的规划是eth0网卡就是设置的NAT模式可以连接外网,而且neutron服务使用的也是这块网卡,
Vmware虚机外部网络这么配置的,
接着查看下Vmware的网络编辑器中NAT网络的配置,这里注意地址池的范围,我们后期创建网络的时候分配地址的时候会从NAT网络的地址池范围外拿一部分地址来给provider网络来使用,这个是可以看到的,
注意,上面的网络配置是controller节点上面的,在compute节点上也是需要这样配置的,如果你有很多的compute计算节点,那么配置多少个,
下面是compute节点的配置,和controller差不多,
接着验证下,看看两台机器能够互相ping通且能够连通外网,
注意,下面ping的时候使用的是主机名,所以本地的DNS解析文件中要设置好,这里在基础配置的时候设置过,我在查看下,两台机器这个文件内容相同。
PS:我这里主机名有有固定的规划的,为了做个试验修改主机名就比较麻烦了,所以我只是在主机解析文件中进行了修改,你可以直接修改主机名,也可以像我这样进行修改,都可以效果一样,没得影响。
在controller控制节点上可以ping通外网并且可以通过主机名ping通compute节点,
在compute节点可以ping通外网并且可以ping通controller节点,
# mysql -uroot -pXylong_000
MariaDB [(none)]> CREATE DATABASE neutron;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY '123';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY '123';
MariaDB [(none)]> exit
接着创建用户然后赋予admin角色
# source admin-openrc
# openstack user create --domain default --password-prompt neutron
# openstack role add --project service --user neutron admin
接着创建service服务,
# openstack service create --name neutron --description "OpenStack Networking" network
接着创建出三类endpoint访问端点,
# 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
# yum install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables
# vim /etc/neutron/neutron.conf
配置数据库访问
[database]
connection = mysql+pymysql://neutron:123@controller/neutron
[DEFAULT]
core_plugin = ml2 # 启用模块层2 (ML2)插件
service_plugins = router #路由器服务
allow_overlapping_ips = true #重叠IP地址
transport_url = rabbit://openstack:123@controller #配置RabbitMQ消息队列访问
auth_strategy = keystone #配置keystone访问
notify_nova_on_port_status_changes = true #配置网络以通知计算的网络拓扑变化
notify_nova_on_port_data_changes = true #配置网络以通知计算的网络拓扑变化
配置keystone服务访问
[keystone_authtoken]
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = 123
配置网络以通知计算的网络拓扑变化
[nova]
auth_url = http://controller:5000
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/tmp
# vim /etc/neutron/plugins/ml2/ml2_conf.ini
这里注意,在U版的配置文件中,这些都是需要自己来进行手写的,
[ml2]
type_drivers = flat,vlan,vxlan #启用flat、VLAN和VXLAN网络
tenant_network_types = vxlan #启用VXLAN self-service网络
mechanism_drivers = linuxbridge,l2population #启用Linux桥接和二层填充机制:
extension_drivers = port_security #启用端口安全扩展驱动程序
[ml2_type_flat]
flat_networks = provider #将provider虚拟网络配置为flat网络
[ml2_type_vxlan]
vni_ranges = 1:1000 #为self-service网络配置VXLAN网络标识符范围
[securitygroup]
enable_ipset = true #使ipset提高安全组规则的效率
# vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini
[linux_bridge]
physical_interface_mappings = provider:eth0 #将provider虚拟网络映射到provider物理网络接口
[vxlan]
enable_vxlan = true #启用VXLAN覆盖网络
local_ip = 192.168.144.20 #配置处理覆盖网络的物理网络接口的IP地址
l2_population = true #并启用层-2填充
[securitygroup]
enable_security_group = true #启用安全组
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver #配置Linux桥iptables防火墙驱动程序
接着还要确保Linux操作系统内核支持网桥过滤器,通过验证所有以下sysctl值设置为1:
# vim /etc/sysctl.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
# sysctl -p
报错:
sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables: No such file or directory
sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-ip6tables: No such file or directory
根据官方文档中想让Linux操作系统支持网桥过滤是需要加载br_netfilter模块的,
先查看下模块是否加载——》没得
加载下be_netfilter模块,
# modprobe br_netfilter
# lsmod | grep br_netfilter
这时候再执行就没有问题了,
# vim /etc/neutron/l3_agent.ini
配置Linux桥接接口驱动程序
[DEFAULT]
interface_driver = linuxbridge
# vim /etc/neutron/dhcp_agent.ini
配置Linux桥接接口驱动程序,Dnsmasq DHCP驱动程序,并启用隔离的元数据,这样在provider网络上的实例可以通过网络访问元数据:
[DEFAULT]
interface_driver = linuxbridge
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = true
# vim /etc/neutron/metadata_agent.ini
这里使用的controller就是我们本地解析中设置的主机名,
[DEFAULT]
nova_metadata_host = controller
metadata_proxy_shared_secret = 123
# vim /etc/nova/nova.conf
[neutron]
auth_url = http://controller:5000
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
网络服务初始化脚本期望一个符号链接/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
同步数据库
# 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 -uneutron -p123
MariaDB [(none)]> show databases;
MariaDB [(none)]> use neutron
MariaDB [neutron]> show tables;
# 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
# systemctl enable neutron-l3-agent.service
# systemctl start neutron-l3-agent.service
# systemctl restart neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service neutron-l3-agent.service
# yum install openstack-neutron-linuxbridge ebtables ipset
# vim /etc/neutron/neutron.conf
[DEFAULT]
transport_url = rabbit://openstack:123@controller
auth_strategy = keystone
[keystone_authtoken]
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
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
# vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini
[linux_bridge]
physical_interface_mappings = provider:eth0 #将provider虚拟网络映射到provider物理网络接口:
[vxlan]
enable_vxlan = true #启用VXLAN覆盖网络
local_ip = 192.168.144.21 #配置处理覆盖网络的物理网络接口的IP地址
l2_population = true #启用2层填充
[securitygroup]
enable_security_group = true #启用安全组
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver #配置Linux桥iptables防火墙驱动程序
确保您的Linux操作系统内核支持网桥过滤器,通过验证所有以下sysctl值设置为1:
# vim /etc/sysctl.conf
# vim /etc/sysctl.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
# sysctl -p
果然还是没有添加br_netfilter模块,加载下重新查看
# modprobe br_netfilter
# lsmod | grep br_netfilter
# sysctl -p
# vim /etc/nova/nova.conf
[neutron]
auth_url = http://controller:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = 123
# systemctl restart openstack-nova-compute.service
# systemctl enable neutron-linuxbridge-agent.service
# systemctl start neutron-linuxbridge-agent.service
# systemctl restart neutron-linuxbridge-agent.service
输出应该指出控制器节点上有四个代理,每个计算节点上有一个代理。
# openstack network agent list
创建provider网络试一试
# source admin-openrc
# openstack network create --share --external --provider-physical-network provider --provider-network-type flat provider
接着创建子网,
# 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
注意,这里的网段必须是你的外网网段,我的是NAT模式,所以这里使用的就是NAT网络同一个网段的地址,并且是不在DHCP地址池中的地址,这里的网关你可以route -n查看,DNS地址你可以查看/etc/resolv.conf文件,
现在一个provider类型的网络就创建好了,
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pck43Vpp-1605080725930)(C:\Users\asus\AppData\Roaming\Typora\typora-user-images\1604294804452.png)]
在上面创建好子网之后我们可以在controller节点上查看下网络状态,我们eth0网卡上面的IP状态已经没得了,而是到了一个网桥上面了,查看下面网桥就可以看到之前eth0网卡上的IP地址了,
还有就是我们创建了一个provider类型的网络,那么这里就可以看到一个网桥,这就是创建网络在controller节点上多出来的,
接着还可以查看下网桥信息,可以更简洁的看到,