目录:
0 实验环境
1 概述
2 控制节点配置
2.1 先决条件
2.2 安装和配置组件
2.3 配置数据代理
2.4 配置网络服务
2.5 完成安装
3 创建网络
4 计算节点配置
4.1 服务配置
4.2 网络配置
4.3 配置计算服务使用网络服务
4.4 配置服务状态
5 验证
0 实验环境
openstack版本:train
实验平台:vmware workstation 15.1
实验虚拟机:控制节点(centos 7.6,2核,4G内存),计算节点(centos 7.6,2核,2G内存)
虚拟机网络:
网络地址范围:管理网络192.168.223.0/24,营运商网络192.168.0.0/24
控制节点
网卡1:ens33,管理网络,192.168.223.11/24
网卡2:ens37,营运商网络
计算节点
网卡1:ens33,管理网络,192.168.223.31/24
网卡2:ens37,营运商网络
操作节点:控制节点和计算节点
本文涉及的帐号密码:
mysql数据库管理员:root:samplepass
neutron数据库用户:neutron:dbpass
nova服务用户:nova:npass
元数据metadata共享密码:msecret
1 概述
Openstack的网络服务neutron,可以适应不同的网络设备和软件,为OpenStack架构和部署提供灵活性。
网络服务主要与OpenStack计算服务交互,为其实例提供网络和连接。
网络服务是一种虚拟化的网络,通过各种插件(plugin),提供网络基础设施(VNI)的方方面面(如子网,交换路由等),并提供各种高级功能(如防火墙、vpn等)。
2 控制节点配置
Openstack的网络服务提供两种架构,一种是虚拟机的网络通过通过与节点网络接口桥接,直接访问外部网络,不能提供如虚拟防火墙等高级功能;另一种是虚拟机使用网络服务提供的网络,访问外部网络需要经过NAT地址转换。
2.1 先决条件
a)数据库配置
# mysql -u root -p //使用root用户登录 MariaDB [(none)]> CREATE DATABASE neutron; //创建数据库neutron
MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO \'neutron\'@\'localhost\' IDENTIFIED BY \'dbpass\'; //设置neutron用户的本地登录权限和密码
MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO \'neutron\'@\'%\' IDENTIFIED BY \'dbpass\'; //设置neutron用户的远程登录权限和密码
MariaDB [(none)]> quit;
b)用户和权限配置
# . admin-openrc # openstack user create --domain default --password-prompt neutron //新建用户neutron,并设置密码,我设置的是npass # openstack role add --project g_service --user neutron admin //设置用户neutron在项目g_service中,角色为admin # openstack service create --name neutron --description "OpenStack Networking" network //为openstack创建网络服务
c)服务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
2.2 安装和配置组件
网络结构的不同,安装和配置方式有区别,本文演示第一种,直接桥接到外部网络的方式。
外部网络为:192.168.0.0/24,网关:192.168.0.1,dns:61.139.2.69
a) 安装软件包
# yum install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables
b)编辑配置文件/etc/neutron/neutron.conf:
在[DEFAULT]节点:
[DEFAULT] # ... core_plugin = ml2 service_plugins = transport_url = rabbit://openstack:rabbitpass@controller auth_strategy = keystone notify_nova_on_port_status_changes = true notify_nova_on_port_data_changes = true
在[database]节点:
[database] #配置数据库连接字符串,用户名neutron,密码dbpass connection = mysql+pymysql://neutron:dbpass@controller/neutron
在[keystone_authtoken]节点:
[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 = g_service username = neutron password = npass
在[nova]节点:
[nova] # 该节点在配置文件中没有,手动添加到最后 auth_url = http://controller:5000 auth_type = password project_domain_name = default user_domain_name = default region_name = RegionOne project_name = g_service username = nova password = npass
在[oslo_concurrency]节点:
[oslo_concurrency]
# ...
lock_path = /var/lib/neutron/tmp
c)配置2层模块插件(ML2 plugin)
编辑配置文件/etc/neutron/plugins/ml2/ml2_conf.ini,写入如下内容
[ml2] #文件里没有该节点,手工增加 type_drivers = flat,vlan tenant_network_types = mechanism_drivers = linuxbridge extension_drivers = port_security [ml2_type_flat] #文件里没有该节点,手工增加 flat_networks = provider [securitygroup] #文件里没有该节点,手工增加 enable_ipset = true
d)配置linux桥接代理
编辑配置文件/etc/neutron/plugins/ml2/linuxbridge_agent.ini:
[linux_bridge] #配置桥接的物理网卡,在这里我的第二个网卡是ens37,第一个网卡用于管理网络 physical_interface_mappings = provider:ens37 [vxlan] #禁止xvxlan模式 enable_vxlan = false [securitygroup] # 开启安全组,配置防火墙驱动 enable_security_group = true firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
e)检查桥接包过滤模块:
# sysctl net.bridge.bridge-nf-call-iptables //如果系统不支持就会出现下面的提示 sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables: No such file or directory # sysctl net.bridge.bridge-nf-call-iptables //正常会如下显示值为1 net.bridge.bridge-nf-call-iptables = 1
正常情况下,安装过程会自动配置该模块,但是如果重启系统后,还是没有正常,可以做如下配置:
# modprobe br_netfilter //临时启用 # echo br_netfilter > /etc/modules-load.d/openstack.conf //在/etc/modules-load.d目录下创建文件,写入开机自动加载的模块名
f)配置dhcp代理
dhcp代理为虚拟网络提供dhcp服务。
编辑/etc/neutron/dhcp_agent.ini:
[DEFAULT] # 使用dnsmasq来提供dhcp服务 interface_driver = linuxbridge dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq enable_isolated_metadata = true
2.3 配置数据代理
编辑配置文件/etc/neutron/metadata_agent.ini的[DEFAULT]节点:
[DEFAULT] # 配置元数据主机和共享密码 nova_metadata_host = controller metadata_proxy_shared_secret = msecret
2.4 配置网络服务
编辑配置文件/etc/nova/nova.conf,在[neutron]节点设置相应参数:
[neutron] # 注意neutron的密码和metadata的共享密码使用之前的操作中设置的密码 auth_url = http://controller:5000 auth_type = password project_domain_name = default user_domain_name = default region_name = RegionOne project_name = g_service username = neutron password = npass service_metadata_proxy = true metadata_proxy_shared_secret = msecret
2.5 完成安装
a)创建配置文件/etc/neutron/plugins/ml2/ml2_conf.ini的符号链接:
# ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
b)初始化数据:
# 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
c)重启nova-api服务
# systemctl restart openstack-nova-api.service
d)配置网络服务状态
# systemctl enable --now neutron-server neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent
3 创建网络
# . admin-openrc # openstack network create --share --external --provider-physical-network provider --provider-network-type flat provider //--share允许所有项目使用,--external设置网络为外部网络,默认值为内部网络
创建子网(根据实际情况调整地址等参数,我在本文最前面列出了外部网络地址等信息):
# openstack subnet create --network provider --allocation-pool start=192.168.0.10,end=192.168.0.50 --dns-nameserver 61.139.2.69 --gateway 192.168.0.1 --subnet-range 192.168.0.0/24 provider
4 计算节点配置
4.1 服务配置
a) 安装软件包
# yum install openstack-neutron-linuxbridge ebtables ipsec
b)编辑网络服务配置文件/etc/neutron/neutron.conf:
在[DEFAULT]节点:
[DEFAULT]
# ...
transport_url = rabbit://openstack:rabbitpass@controller
auth_strategy = keystone
在[keystone_authtoken]节点:
[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 = g_service
username = neutron
password = npass
在[oslo_concurrency]节点:
[oslo_concurrency]
# ...
lock_path = /var/lib/neutron/tmp
4.2 网络配置
a)配置linux桥接代理
编辑配置文件/etc/neutron/plugins/ml2/linuxbridge_agent.ini:
[linux_bridge] #配置桥接的物理网卡,在这里我的第二个网卡是ens37,第一个网卡用于管理网络 physical_interface_mappings = provider:ens37 [vxlan] #禁止xvxlan模式 enable_vxlan = false [securitygroup] # 开启安全组,配置防火墙驱动 enable_security_group = true firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
b)完成配置后,需要像之前2.2 e)节点一样检查br_netfilter模块是否正常。
4.3 配置计算服务使用网络服务
编辑计算服务配置文件/etc/nova/nova.conf:
在[neutron]节点:
[neutron] # ... auth_url = http://controller:5000 auth_type = password project_domain_name = default user_domain_name = default region_name = RegionOne project_name = g_service username = neutron password = npass
4.4 配置服务状态
# systemctl restart openstack-nova-compute //重启nova服务 # systemctl enable --now neutron-linuxbridge-agent //设置网桥代理服务状态
5 验证
列出网络代理,应该有3个控制节点上的代理,一个计算节点的代理(在控制节点运行该命令):
# openstack network agent list