这里写目录标题
- 材料准备
- 为什么选择packstack
- 安装
- 静态ip
- 系统配置
- 使用阿里云yum源
- 安装packstack
- 部署openstack
- 安装成功和后续使用
- all in one模式下虚拟机外网和浮动ip原理讲解
- nat网桥的创建方法
材料准备
- ecs云服务器8核心16g内存一台,系统盘100GB,系统CentOS7.9
- vpc网段:192.168.0.1/24
- eip一个,带宽5M以上
为什么选择packstack
对openstack兼容性最好,每年给openstack社区提交代码最多的依然是红帽公司。所以做openstack虚拟化,用红帽系列linux系统最合适,华为的openeuler系统兼容CentOS的原因就在此。packstack适合在一台主机上部署全部openstack,只需要一个网口。
安装
静态ip
yum -y update
systemctl enable network.service --now
# 禁用NetworkManager
systemctl disable NetworkManager --now
# 查看网口设备名,默认网卡名称是eth0
ip a
# 修改为静态ip
vim /etc/sysconfig/network-scripts/ifcfg-eth0
---------------------------------------------------
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=eui64
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.0.11
PREFIX=24
GATEWAY=192.168.0.1
# hosts文件
echo "192.168.0.11 openstack" >> /etc/hosts
系统配置
# 设置主机名为openstack
hostnamectl set-hostname openstack
# 生成密钥
ssh-keygen -t rsa
# 拷贝公钥到本机
ssh-copy-id root@127.0.0.1
# 关闭防火墙
systemctl disable firewalld --now
# 关闭selinux
setenforce 0
vim /etc/selinux/config
-----------------------------------------
SELINUX=disabled
使用阿里云yum源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
wget http://mirrors.aliyun.com/repo/Centos-7.repo -O /etc/yum.repos.d/CentOS-Base.repo
yum clean all
yum makecache
yum -y update
# 安装一些包
yum -y install vim bash-completion yum-utils
# 安装openstack源码包
yum search openstack
yum -y install centos-release-openstack-train
# 修改openstack的repo文件地址,把mirrorlist替换成阿里云baseurl
cp -a /etc/yum.repos.d/CentOS-OpenStack-train.repo /etc/yum.repos.d/CentOS-OpenStack-train.repo.bak
vim /etc/yum.repos.d/CentOS-OpenStack-train.repo
-----------------------------------------------------
# 把[centos-openstack-train]中mirrorlist一行注释掉,然后放开baseurl
# 修改baseurl如下
baseurl=http://mirrors.aliyun.com/$contentdir/$releasever/cloud/$basearch/openstack-train/
# 更新缓存
yum clean all && yum makecache
安装packstack
yum install -y openstack-packstack
部署openstack
一键式部署
packstack --allinone
安装过程中缺少leatherman_curl.so文件需要自行解决
应答文件式部署
# 生产部署文件
packstack --gen-answer-file /root/openstack-answer.ini
# 修改文件中的几个参数
CONFIG_HEAT_INSTALL=y #安装heat模板服务
CONFIG_PROVISION_DEMO=n #我们不要提供的demo项目
CONFIG_KEYSTONE_ADMIN_PW=123456 #设置登陆密码
CONFIG_NEUTRON_OVN_BRIDGE_IFACES=br-ex:eth0 # 设置openstack外网br-ex桥接到哪个网卡
# 最后根据每个服务器上的应答文件部署openstack
packstack --answer-file /root/openstack-answer.ini
安装成功和后续使用
安装成功后的提示
**** Installation completed successfully ******
Additional information:
* Parameter CONFIG_NEUTRON_L2_AGENT: You have chosen OVN Neutron backend. Note that this backend does not support the VPNaaS or FWaaS services. Geneve will be used as the encapsulation method for tenant networks
* A new answerfile was created in: /root/packstack-answers-20231008-074746.txt
* Time synchronization installation was skipped. Please note that unsynchronized time on server instances might be problem for some OpenStack components.
* File /root/keystonerc_admin has been created on OpenStack client host 192.168.0.11. To use the command line tools you need to source the file.
* To access the OpenStack Dashboard browse to http://192.168.0.11/dashboard .
Please, find your login credentials stored in the keystonerc_admin in your home directory.
* The installation log file is available at: /var/tmp/packstack/20231008-074746-bd2HY5/openstack-setup.log
* The generated manifests are available at: /var/tmp/packstack/20231008-074746-bd2HY5/manifests
You have new mail in /var/spool/mail/root
查看宿主机网卡设备
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:81:f8:5a brd ff:ff:ff:ff:ff:ff
inet 192.168.0.11/23 brd 192.168.1.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe81:f85a/64 scope link
valid_lft forever preferred_lft forever
3: ovs-system: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether d6:a8:67:b2:86:c8 brd ff:ff:ff:ff:ff:ff
4: br-ex: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
link/ether 0a:55:ae:7a:da:44 brd ff:ff:ff:ff:ff:ff
inet 172.24.4.1/24 scope global br-ex
valid_lft forever preferred_lft forever
inet6 fe80::855:aeff:fe7a:da44/64 scope link
valid_lft forever preferred_lft forever
5: br-int: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether ce:72:1e:24:dc:44 brd ff:ff:ff:ff:ff:ff
all in one模式下虚拟机外网和浮动ip原理讲解
用过virt-manager的同学应该熟悉,在图形界面上可以创建NAT网络,然后虚拟机网卡存在于这个网络中。而NAT网络是通过iptables转发给所有物理网卡的。
从上面的配置可以看出,br-ex并没有直接绑定到eth0,而是一个NAT虚拟网络设备。网段区别于eth0,是172.24.4.1/24。
所有网络设备中,只有eth0可以直接访问外网,所以为了得知br-ex和eth0的关系,需要查看转发规则。
- packstack自动创建了public网络
查看br-ex和eth0之间的转发关系
[root@openstack yum.repos.d]# ip route show
default via 192.168.0.1 dev eth0
169.254.0.0/16 dev eth0 scope link metric 1002
172.24.4.0/24 dev br-ex proto kernel scope link src 172.24.4.1
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.11
[root@openstack yum.repos.d]# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 172.24.4.0/24 anywhere /* 000 nat */
# 也可以查看防火墙规则
iptables -L -n -v
总结:
packstack在宿主机上创建了一个虚拟网桥,网段是172.24.4.0/24,此时网桥形成一个内网,还不能访问公网,这一步是在openstack内部完成。
紧接着设置iptables转发规则,将br-ex附加nat功能。此时br-ex相当于一个路由器。这是在宿主机上完成,openstack无法直接操控宿主机物理网络设备。
将br-ex注册成物理网络extnet,这一步是在openstack内部完成。即使你不小心将public删除,你也可以根据extnet重新创建public网络。
最后packstack根据extnet,创建flat外部网络并添加子网172.24.4.0/24
新的实验:给public网络创建新的子网172.100.0.0/16,看看br-ex会怎样?
结果会报错。说明public的子网需要与网桥nat网段保持一致。
公有云厂商的公网ip实现:
服务器上会有个eth2,这个网口连接公网交换机,然后br-ex直接桥接到eth2上,由上游硬件分配公网ip,随后br-ex注册成extnet并创建vxlan模式的public网络。
物理网卡 — br-ex — extnet — 子网 — 浮动ip — 虚拟机
物理网卡到br-ex可以使桥接模式,也可以是nat模式,as you like。
nat网桥的创建方法
要在Linux上创建一个名为 br-ex 的NAT网桥,拥有自己的网段,并将所有流量转发到所有物理网口上,你可以按照以下步骤操作:
# 创建 br-ex 网桥: 使用以下命令创建 br-ex 网桥:
sudo brctl addbr br-ex
# 为 br-ex 分配IP地址: 分配一个IP地址给 br-ex,这个IP地址将充当网关地址。假设你要为 br-ex 分配IP地址为 192.168.1.1/24,可以使用以下命令:
sudo ip addr add 192.168.1.1/24 dev br-ex
# 启用IP转发: 启用Linux内核的IP转发功能,以便将流量转发到所有物理网口。编辑 /etc/sysctl.conf 文件,取消注释或添加以下行:
net.ipv4.ip_forward=1
# 然后,应用新的sysctl设置:
sudo sysctl -p
# 创建iptables规则: 创建iptables规则以实现NAT和流量转发。以下是一些示例规则:
# 清除已有规则
sudo iptables -F
sudo iptables -t nat -F
# 允许所有流量通过
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
# 设置NAT规则
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
这些规则将对从 br-ex 发出的流量执行源地址NAT,并将其转发到所有物理网口。
# 启动 br-ex 网桥: 启动 br-ex 网桥以使其生效:
sudo ifconfig br-ex up
现在,br-ex 网桥已经创建,拥有自己的IP地址范围,并且设置了NAT规则以将流量转发到所有物理网口。