openstack系列Minimal deployment for Rocky
neutron部分需要一块桥接网络的网卡,所以前提准备需要你自己去做
脚本已测试,如需使用,修改脚本所有controller-ZJB为你的主机名,修改所有1790600080为你的密码
win的编码与unix的编码有区别,如果你直接粘贴使用,最好安装dos2unix将脚本文件转码!


controller节点脚本:
#!/bin/bash
#This is a script for editing controller's neutron
# 如果你需要使用此脚本,将主机名controller-ZJB修改为你的主机名
# 所有1790600080处修改为自己的密码
readonly create_domain_pass=1790600080
echo " 这是一个修改neutron配置文件的脚本:"
echo " -------------------------------"
echo " 1、下面开始创建数据库并赋予相应权限"
mysql -u root -p1790600080 <<EOF
CREATE DATABASE neutron;
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY '1790600080';
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY '1790600080';
EOF
echo " --------------------------------"
echo " 数据库已创建成功并赋予了相应权限"
echo " --------------------------------"
echo " 2、创建服务凭证:"
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=1790600080
export OS_AUTH_URL=http://controller-ZJB:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
openstack user create --domain default --password $create_domain_pass neutron
openstack role add --project service --user neutron admin
openstack service create --name neutron --description "OpenStack Networking" network
openstack endpoint create --region RegionOne network public http://controller-ZJB:9696
openstack endpoint create --region RegionOne network internal http://controller-ZJB:9696
openstack endpoint create --region RegionOne network admin http://controller-ZJB:9696
echo " --------------------------------"
echo " 服务凭证已创建完成!"
echo " --------------------------------"
echo " 选择第一种网络类型:Provider networks"
echo " 3、安装网络组件"
yum -y install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables
echo " --------------------------------"
if [ $? == 0 ];then
echo " 软件已成功安装!"
else
echo " 软件安装出错,请手动查看问题!"
fi
echo " --------------------------------"
echo " 4、修改Neutron配置文件:"
echo " "
read -p " 选择是否一键修改neutron配置文件(y/n)" answer
#判断/etc/neutron/neutron.conf文件是否存在,不存在直接输出错误
if [ $answer == "y" ];then
ls /etc/neutron/neutron.conf &> /dev/null
if [ $? == 0 ];then
echo " --------------------------------"
echo " 下面开始修改/etc/neutron/neutron.conf配置文件"
database_line=`cat -n /etc/neutron/neutron.conf | grep "\[database\]$" | awk '{print $1}'`
sed -i $database_line'a\connection = mysql+pymysql://neutron:1790600080@controller-ZJB/neutron' /etc/neutron/neutron.conf
Default_line=`cat -n /etc/neutron/neutron.conf | grep "\[DEFAULT\]$" | awk '{print $1}'`
sed -i $Default_line'a\core_plugin = ml2' /etc/neutron/neutron.conf
sed -i `expr $Default_line + 1`'a\service_plugins =' /etc/neutron/neutron.conf
sed -i `expr $Default_line + 2`'a\transport_url = rabbit://ZJB:1790600080@controller-ZJB' /etc/neutron/neutron.conf
sed -i `expr $Default_line + 3`'a\auth_strategy = keystone' /etc/neutron/neutron.conf
sed -i `expr $Default_line + 4`'a\notify_nova_on_port_status_changes = true' /etc/neutron/neutron.conf
sed -i `expr $Default_line + 5`'a\notify_nova_on_port_data_changes = true' /etc/neutron/neutron.conf
keystone_authtoken_line=`cat -n /etc/neutron/neutron.conf | grep "\[keystone_authtoken\]$" | awk '{print $1}'`
sed -i $keystone_authtoken_line'a\www_authenticate_uri = http://controller-ZJB:5000' /etc/neutron/neutron.conf
sed -i `expr $keystone_authtoken_line + 1`'a\auth_url = http://controller-ZJB:5000' /etc/neutron/neutron.conf
sed -i `expr $keystone_authtoken_line + 2`'a\memcached_servers = controller-ZJB:11211' /etc/neutron/neutron.conf
sed -i `expr $keystone_authtoken_line + 3`'a\auth_type = password' /etc/neutron/neutron.conf
sed -i `expr $keystone_authtoken_line + 4`'a\project_domain_name = default' /etc/neutron/neutron.conf
sed -i `expr $keystone_authtoken_line + 5`'a\user_domain_name = default' /etc/neutron/neutron.conf
sed -i `expr $keystone_authtoken_line + 6`'a\project_name = service' /etc/neutron/neutron.conf
sed -i `expr $keystone_authtoken_line + 7`'a\username = neutron' /etc/neutron/neutron.conf
sed -i `expr $keystone_authtoken_line + 8`'a\password = 1790600080' /etc/neutron/neutron.conf
nova_line=`cat -n /etc/neutron/neutron.conf | grep "\[nova\]$" | awk '{print $1}'`
sed -i $nova_line'a\auth_url = http://controller-ZJB:5000' /etc/neutron/neutron.conf
sed -i `expr $nova_line + 1`'a\auth_type = password' /etc/neutron/neutron.conf
sed -i `expr $nova_line + 2`'a\project_domain_name = default' /etc/neutron/neutron.conf
sed -i `expr $nova_line + 3`'a\user_domain_name = default' /etc/neutron/neutron.conf
sed -i `expr $nova_line + 4`'a\region_name = RegionOne' /etc/neutron/neutron.conf
sed -i `expr $nova_line + 5`'a\project_name = service' /etc/neutron/neutron.conf
sed -i `expr $nova_line + 6`'a\username = nova' /etc/neutron/neutron.conf
sed -i `expr $nova_line + 7`'a\password = 1790600080' /etc/neutron/neutron.conf
oslo_concurrency_line=`cat -n /etc/neutron/neutron.conf | grep "\[oslo_concurrency\]$" | awk '{print $1}'`
sed -i $oslo_concurrency_line'a\lock_path = /var/lib/neutron/tmp' /etc/neutron/neutron.conf
else
echo " etc/neutron/neutron.conf文件不存在!"
fi
#修改/etc/neutron/plugins/ml2/ml2_conf.ini配置文件
ls /etc/neutron/plugins/ml2/ml2_conf.ini &>/dev/null
if [ $? == 0 ]; then
echo " --------------------------------"
echo " 下面开始修改/etc/neutron/plugins/ml2/ml2_conf.ini配置文件"
ml2_line=`cat -n /etc/neutron/plugins/ml2/ml2_conf.ini | grep "\[ml2\]$" | awk '{print $1}'`
sed -i $ml2_line'a\type_drivers = flat,vlan' /etc/neutron/plugins/ml2/ml2_conf.ini
sed -i `expr $ml2_line + 1`'a\tenant_network_types =' /etc/neutron/plugins/ml2/ml2_conf.ini
sed -i `expr $ml2_line + 2`'a\mechanism_drivers = linuxbridge' /etc/neutron/plugins/ml2/ml2_conf.ini
sed -i `expr $ml2_line + 3`'a\extension_drivers = port_security' /etc/neutron/plugins/ml2/ml2_conf.ini
ml2_type_flat_line=`cat -n /etc/neutron/plugins/ml2/ml2_conf.ini | grep "\[ml2_type_flat\]$" | awk '{print $1}'`
sed -i $ml2_type_flat_line'a\flat_networks = provider' /etc/neutron/plugins/ml2/ml2_conf.ini
securitygroup_line=`cat -n /etc/neutron/plugins/ml2/ml2_conf.ini | grep "\[securitygroup\]$" | awk '{print $1}'`
sed -i $securitygroup_line'a\enable_ipset = true' /etc/neutron/plugins/ml2/ml2_conf.ini
else
echo "/etc/neutron/plugins/ml2/ml2_conf.ini配置文件不存在"
fi
#修改/etc/neutron/plugins/ml2/linuxbridge_agent.ini配置文件
ls /etc/neutron/plugins/ml2/linuxbridge_agent.ini &>/dev/null
if [ $? == 0 ]; then
echo " --------------------------------"
echo " 下面开始修改/etc/neutron/plugins/ml2/linuxbridge_agent.ini配置文件"
linux_bridge_line=`cat -n /etc/neutron/plugins/ml2/linuxbridge_agent.ini | grep "\[linux_bridge\]$" | awk '{print $1}'`
sed -i $linux_bridge_line'a\physical_interface_mappings = provider:ens37' /etc/neutron/plugins/ml2/linuxbridge_agent.ini
vxlan_line=`cat -n /etc/neutron/plugins/ml2/linuxbridge_agent.ini | grep "\[vxlan\]$" | awk '{print $1}'`
sed -i $vxlan_line'a\enable_vxlan = false' /etc/neutron/plugins/ml2/linuxbridge_agent.ini
securitygroup_line=`cat -n /etc/neutron/plugins/ml2/linuxbridge_agent.ini | grep "\[securitygroup\]$" | awk '{print $1}'`
sed -i $securitygroup_line'a\enable_security_group = true' /etc/neutron/plugins/ml2/linuxbridge_agent.ini
sed -i `expr $securitygroup_line + 1`'a\firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver' /etc/neutron/plugins/ml2/linuxbridge_agent.ini
else
echo "/etc/neutron/plugins/ml2/linuxbridge_agent.ini配置文件不存在"
fi
#编辑/etc/sysctl.conf文件,确保Linux操作系统内核支持网桥过滤器
#sed 匹配到文件末尾,随后使用a\在其后追加
echo " --------------------------------"
echo " 下面开始修改/etc/sysctl.conf文件"
sed -i '$a\net.bridge.bridge-nf-call-iptables = 1' /etc/sysctl.conf
sed -i '$a\net.bridge.bridge-nf-call-ip6tables = 1' /etc/sysctl.conf
modprobe br_netfilter
sysctl -p
#编辑/etc/neutron/dhcp_agent.ini文件,在本[DEFAULT]部分,配置Linux桥接口驱动程序Dnsmasq DHCP驱动程序,并启用隔离的元数据,以便提供商网络上的实例可以通过网络访问元数据:
echo " --------------------------------"
echo " 下面开始修改/etc/neutron/dhcp_agent.ini文件"
Default_line1=`cat -n /etc/neutron/dhcp_agent.ini | grep "\[DEFAULT\]$" | awk '{print $1}'`
sed -i $Default_line1'a\interface_driver = linuxbridge' /etc/neutron/dhcp_agent.ini
sed -i `expr $Default_line1 + 1`'a\dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq' /etc/neutron/dhcp_agent.ini
sed -i `expr $Default_line1 + 2`'a\enable_isolated_metadata = true' /etc/neutron/dhcp_agent.ini
#编辑/etc/neutron/metadata_agent.ini文件
echo " --------------------------------"
echo " 下面开始修改/etc/neutron/metadata_agent.ini文件"
Default_line2=`cat -n /etc/neutron/metadata_agent.ini | grep "\[DEFAULT\]$" | awk '{print $1}'`
sed -i $Default_line2'a\nova_metadata_host = controller-ZJB' /etc/neutron/metadata_agent.ini
sed -i `expr $Default_line2 + 1`'a\metadata_proxy_shared_secret = 1790600080' /etc/neutron/metadata_agent.ini
#编辑/etc/nova/nova.conf配置文件
echo " --------------------------------"
echo " 下面开始修改/etc/nova/nova.conf文件"
neutron_line=`cat -n /etc/nova/nova.conf | grep "[^ ]\[neutron\]$" | awk '{print $1}'`
sed -i $neutron_line'a\url = http://controller-ZJB:9696' /etc/nova/nova.conf
sed -i `expr $neutron_line + 1`'a\auth_url = http://controller-ZJB:5000' /etc/nova/nova.conf
sed -i `expr $neutron_line + 2`'a\auth_type = password' /etc/nova/nova.conf
sed -i `expr $neutron_line + 3`'a\project_domain_name = default' /etc/nova/nova.conf
sed -i `expr $neutron_line + 4`'a\user_domain_name = default' /etc/nova/nova.conf
sed -i `expr $neutron_line + 5`'a\region_name = RegionOne' /etc/nova/nova.conf
sed -i `expr $neutron_line + 6`'a\project_name = service' /etc/nova/nova.conf
sed -i `expr $neutron_line + 7`'a\username = neutron' /etc/nova/nova.conf
sed -i `expr $neutron_line + 8`'a\password = 1790600080' /etc/nova/nova.conf
sed -i `expr $neutron_line + 9`'a\service_metadata_proxy = true' /etc/nova/nova.conf
sed -i `expr $neutron_line + 10`'a\metadata_proxy_shared_secret = 1790600080' /etc/nova/nova.conf
echo " --------------------------------"
echo " 5、创建网络服务初始化脚本所需要的软链接/etc/neutron/plugin.ini指向ML2插件的配置文件/etc/neutron/plugins/ml2/ml2_conf.ini:"
echo " "
ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
echo " --------------------------------"
echo " 6、填充数据库"
echo " "
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
echo " --------------------------------"
echo " 7、重启Compute API 服务"
echo " "
systemctl restart openstack-nova-api
echo " --------------------------------"
echo " 8、启动网络服务并配置其为开机自启动"
echo " "
systemctl enable neutron-server neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent
systemctl start neutron-server neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent
elif [ $answer == "n" ]; then
echo " "
echo " 已退出此脚本"
fi
compute节点脚本:
#!/bin/bash
#This is a script for editing compute's neutron
echo " 这是一个修改neutron配置文件的脚本:"
echo " -------------------------------"
echo " 1、安装软件包"
yum -y install openstack-neutron-linuxbridge ebtables ipset
echo " --------------------------------"
echo " 2、修改Neutron配置文件:"
echo " "
read -p " 选择是否一键修改neutron配置文件(y/n)" answer
#判断/etc/neutron/neutron.conf文件是否存在,不存在直接输出错误
if [ $answer == "y" ];then
ls /etc/neutron/neutron.conf &> /dev/null
if [ $? == 0 ];then
echo " --------------------------------"
echo " 下面开始修改/etc/neutron/neutron.conf配置文件"
Default_line=`cat -n /etc/neutron/neutron.conf | grep "\[DEFAULT\]$" | awk '{print $1}'`
sed -i $Default_line'a\transport_url = rabbit://ZJB:1790600080@controller-ZJB' /etc/neutron/neutron.conf
sed -i `expr $Default_line + 1`'a\auth_strategy = keystone' /etc/neutron/neutron.conf
else
echo " etc/neutron/neutron.conf文件不存在!"
fi
keystone_authtoken_line=`cat -n /etc/neutron/neutron.conf | grep "\[keystone_authtoken\]$" | awk '{print $1}'`
sed -i $keystone_authtoken_line'a\www_authenticate_uri = http://controller-ZJB:5000' /etc/neutron/neutron.conf
sed -i `expr $keystone_authtoken_line + 1`'a\auth_url = http://controller-ZJB:5000' /etc/neutron/neutron.conf
sed -i `expr $keystone_authtoken_line + 2`'a\memcached_servers = controller-ZJB:11211' /etc/neutron/neutron.conf
sed -i `expr $keystone_authtoken_line + 3`'a\auth_type = password' /etc/neutron/neutron.conf
sed -i `expr $keystone_authtoken_line + 4`'a\project_domain_name = default' /etc/neutron/neutron.conf
sed -i `expr $keystone_authtoken_line + 5`'a\user_domain_name = default' /etc/neutron/neutron.conf
sed -i `expr $keystone_authtoken_line + 6`'a\project_name = service' /etc/neutron/neutron.conf
sed -i `expr $keystone_authtoken_line + 7`'a\username = neutron' /etc/neutron/neutron.conf
sed -i `expr $keystone_authtoken_line + 8`'a\password = 1790600080' /etc/neutron/neutron.conf
oslo_concurrency_line=`cat -n /etc/neutron/neutron.conf | grep "\[oslo_concurrency\]$" | awk '{print $1}'`
sed -i $oslo_concurrency_line'a\lock_path = /var/lib/neutron/tmp' /etc/neutron/neutron.conf
echo " --------------------------------"
echo " 下面开始修改/etc/neutron/plugins/ml2/linuxbridge_agent.ini配置文件"
linux_bridge_line=`cat -n /etc/neutron/plugins/ml2/linuxbridge_agent.ini | grep "\[linux_bridge\]$" | awk '{print $1}'`
sed -i $linux_bridge_line'a\physical_interface_mappings = provider:ens37' /etc/neutron/plugins/ml2/linuxbridge_agent.ini
vxlan_line=`cat -n /etc/neutron/plugins/ml2/linuxbridge_agent.ini | grep "\[vxlan\]$" | awk '{print $1}'`
sed -i $vxlan_line'a\enable_vxlan = false' /etc/neutron/plugins/ml2/linuxbridge_agent.ini
securitygroup_line=`cat -n /etc/neutron/plugins/ml2/linuxbridge_agent.ini | grep "\[securitygroup\]$" | awk '{print $1}'`
sed -i $securitygroup_line'a\enable_security_group = true' /etc/neutron/plugins/ml2/linuxbridge_agent.ini
sed -i `expr $securitygroup_line + 1`'a\firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver' /etc/neutron/plugins/ml2/linuxbridge_agent.ini
#编辑/etc/sysctl.conf文件,确保Linux操作系统内核支持网桥过滤器
#sed 匹配到文件末尾,随后使用a\在其后追加
echo " --------------------------------"
echo " 下面开始修改/etc/sysctl.conf文件"
sed -i '$a\net.bridge.bridge-nf-call-iptables = 1' /etc/sysctl.conf
sed -i '$a\net.bridge.bridge-nf-call-ip6tables = 1' /etc/sysctl.conf
modprobe br_netfilter
sysctl -p
#编辑/etc/nova/nova.conf配置文件
echo " --------------------------------"
echo " 下面开始修改/etc/nova/nova.conf文件"
neutron_line=`cat -n /etc/nova/nova.conf | grep "[^ ]\[neutron\]$" | awk '{print $1}'`
sed -i $neutron_line'a\url = http://controller-ZJB:9696' /etc/nova/nova.conf
sed -i `expr $neutron_line + 1`'a\auth_url = http://controller-ZJB:5000' /etc/nova/nova.conf
sed -i `expr $neutron_line + 2`'a\auth_type = password' /etc/nova/nova.conf
sed -i `expr $neutron_line + 3`'a\project_domain_name = default' /etc/nova/nova.conf
sed -i `expr $neutron_line + 4`'a\user_domain_name = default' /etc/nova/nova.conf
sed -i `expr $neutron_line + 5`'a\region_name = RegionOne' /etc/nova/nova.conf
sed -i `expr $neutron_line + 6`'a\project_name = service' /etc/nova/nova.conf
sed -i `expr $neutron_line + 7`'a\username = neutron' /etc/nova/nova.conf
sed -i `expr $neutron_line + 8`'a\password = 1790600080' /etc/nova/nova.conf
echo " --------------------------------"
echo " 3、重启 Compute 服务"
echo " "
systemctl restart openstack-nova-compute
echo " --------------------------------"
echo " 4、开启Linxu网桥代理并配置开机自启动"
systemctl enable neutron-linuxbridge-agent.service
systemctl start neutron-linuxbridge-agent.service
elif [ $answer == "n" ]; then
echo " "
echo " 已退出此脚本"
fi