OpenStack单节点All-In-One安装与入门
0x01 介绍
本次实验是在centos7虚拟机里面安装openstack_allinone。
注意1:centos7虚拟机是在vmware esxi上创建的,需要开启二层虚拟化。(虚拟机设置 CPU开启硬件虚拟化 向客户机操作系统公开硬件辅助的虚拟化)
注意2:vmware esxi的虚拟交换机需要开启(混杂模式 mac地址更改 伪传输)这三个功能,要不然openstack路由器到物理网络不通的。
注意3:centos7 虚拟机配置为 16c 32g 300g。如果太低可能跑不起来。
大概拓扑如下:
0x02 准备工作
# yum源加速
[root@openstack-allinone ~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
[root@openstack-allinone ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@openstack-allinone ~]# yum clean all
[root@openstack-allinone ~]# yum makecache
[root@openstack-allinone ~]# yum -y update
# 关闭firewalld,selinux,networkmanager
[root@openstack-allinone ~]# systemctl disable NetworkManager
[root@openstack-allinone ~]# systemctl enable network
[root@openstack-allinone ~]# systemctl disable firewalld
[root@openstack-allinone ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
# 设置hosts
[root@openstack-allinone ~]# vi /etc/hosts
172.16.10.79 node-a node-a.localdomain
[root@openstack-allinone ~]# ping node-a
64 bytes from node-a (172.16.10.79): icmp_seq=1 ttl=64 time=0.018 ms
# 同步ntp
[root@openstack-allinone ~]# yum install -y ntp
[root@openstack-allinone ~]# systemctl start ntpd
[root@openstack-allinone ~]# ntpdate ntp1.aliyun.com
[root@openstack-allinone ~]# systemctl enable ntpd
# 重启
[root@openstack-allinone ~]# reboot
0x03 安装openstack
# 安装openstack。安装需要一小时左右,不要通过ssh安装会卡住断开连接。
[root@openstack-allinone ~]# yum -y install centos-release-openstack-train
[root@openstack-allinone ~]# yum -y install openstack-packstack
[root@openstack-allinone ~]# packstack --allinone
# 显示 successfully 就是成功了。
[root@openstack-allinone ~]# nova-manage --version
20.6.0
0x04 获取密码&登录控制台
1、安装完成后,浏览器访问http://172.16.10.79并登录
# 如果需要域名访问,在apache的配置文件中添加一行ServerName,然后重启服务即可。
[root@openstack-allinone conf.d]# vi /etc/httpd/conf.d/15-horizon_vhost.conf
<VirtualHost *:80>
ServerName openstack-allinone
ServerName openstack.itho.cn
2、获取控制台admin跟demo的密码
[root@openstack-allinone ~]# source keystonerc_admin
[root@openstack-allinone ~(keystone_admin)]# cat keystonerc_admin
unset OS_SERVICE_TOKEN
export OS_USERNAME=admin
export OS_PASSWORD='14be1048b02243e8'
export OS_REGION_NAME=RegionOne
export OS_AUTH_URL=http://172.16.10.79:5000/v3
export PS1='[\u@\h \W(keystone_admin)]\$ '
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_IDENTITY_API_VERSION=3
[root@openstack-allinone ~(keystone_admin)]# source keystonerc_demo
[root@openstack-allinone ~(keystone_demo)]# cat keystonerc_demo
unset OS_SERVICE_TOKEN
export OS_USERNAME=demo
export OS_PASSWORD='307fba62b22c4293'
export PS1='[\u@\h \W(keystone_demo)]\$ '
export OS_AUTH_URL=http://172.16.10.79:5000/v3
export OS_PROJECT_NAME=demo
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_IDENTITY_API_VERSION=3
0x05 网络配置
1、查看主机当前网络配置
[root@openstack-allinone conf.d]# ip add
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: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:50:56:a5:54:20 brd ff:ff:ff:ff:ff:ff
inet 172.16.10.79/24 brd 172.16.10.255 scope global noprefixroute ens192
valid_lft forever preferred_lft forever
inet6 fe80::250:56ff:fea5:5420/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 4e:eb:7f:b6:93:f4 brd ff:ff:ff:ff:ff:ff
# br-ex 是外部网桥
4: br-ex: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
link/ether 8a:f8:c3:ca:48:4b 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::88f8:c3ff:feca:484b/64 scope link
valid_lft forever preferred_lft forever
# br-int 是集成网桥
5: br-int: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether fa:8d:97:08:2d:41 brd ff:ff:ff:ff:ff:ff
2、新建网络配置
# 配置了物理网络接口 ens192,将其类型设置为 OVSPort,这意味着它是一个 Open vSwitch 端口。OVS_BRIDGE=br-ex 表示这个端口连接到了名为 br-ex 的 Open vSwitch 网桥上。
[root@openstack-allinone ~]# vi ifcfg-ens192
DEVICE=ens192
TYPE=OVSPort
DEVICETYPE=ovs
OVS_BRIDGE=br-ex
ONBOOT=yes
# 配置了名为 br-ex 的 Open vSwitch 网桥。DEVICETYPE=ovs 表示这是一个 Open vSwitch 类型的设备。BOOTPROTO=static 表示使用静态 IP 地址配置。
[root@openstack-allinone ~]# vi ifcfg-br-ex
DEVICE=br-ex
DEVICETYPE=ovs
TYPE=OVSBridge
BOOTPROTO=static
IPADDR=172.16.10.79
NETMASK=255.255.255.0
GATEWAY=172.16.10.1
DNS1=223.5.5.5
ONBOOT=yes
3、覆盖原来的配置文件使配置生效
[root@openstack-allinone ~]# cp ifcfg-* /etc/sysconfig/network-scripts/
cp: overwrite ‘/etc/sysconfig/network-scripts/ifcfg-ens192’? y
# 重启网络使配置生效
[root@openstack-allinone network-scripts]# systemctl restart network
4、查看当前网卡ip
网桥br-ex获得原ens192物理网卡的IP配置,而ens192作为该网桥上的一个端口后,可以没有IP地址。
[root@openstack-allinone network-scripts]# ip add
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: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master ovs-system state UP group default qlen 1000
link/ether 00:50:56:a5:54:20 brd ff:ff:ff:ff:ff:ff
inet6 fe80::250:56ff:fea5:5420/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 4e:eb:7f:b6:93:f4 brd ff:ff:ff:ff:ff:ff
5: br-int: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether fa:8d:97:08:2d:41 brd ff:ff:ff:ff:ff:ff
6: br-ex: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
link/ether 00:50:56:a5:54:20 brd ff:ff:ff:ff:ff:ff
inet 172.16.10.79/24 brd 172.16.10.255 scope global br-ex
valid_lft forever preferred_lft forever
inet6 fe80::1432:19ff:feca:7b49/64 scope link
valid_lft forever preferred_lft forever
5、 删除原来的路由与网络
路径:openstack_web_ui -> 管理员 -> 路由 -> 删除路由
路径:openstack_web_ui -> 管理员 -> 网络 -> 删除网络
6、创建外网(ext-net)
路径:openstack_web_ui -> 管理员 -> 网络 -> 创建网络
# 名称:ext-net
# 项目:admin
# 供应商网络类型:Flat
# 物理网络:ext-net
# 启用管理员状态,共享的,外部网络,创建子网
7、创建内网(int-net)
路径:openstack_web_ui -> 项目 -> 网络 -> 网络 ->创建网络
# 网络名称:int-net
# 启用管理员状态,共享的,创建子网
# 子网名称:ini-subnet
# 网络地址:10.10.10.0/24
# IP版本:IPv4
# 网关IP:10.10.10.1
8、创建路由R1
路径:openstack_web_ui -> 项目 -> 网络 -> 路由 ->新建路由
# 路由名称:R1
# 启用管理员状态
# 外部网络:ext-net
# 启动SNAT
路径:openstack_web_ui -> 项目 -> 网络 -> 路由 -> R1 -> 接口 -> 增加接口
# 子网:int-net: 10.10.10.0/24 (ini-subnet)
9、查看网络状态
路径:openstack_web_ui -> 项目 -> 网络 -> 网络拓扑
查看R1路由状态,两个接口是否正常。
0x06 运行云主机
1、下载测试镜像cirros
cirros是经常使用在云计算当中作为测试的系统镜像
wget http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img
2、cirros上传到主机
[root@openstack-allinone ~]# ls -l
-rw-r--r-- 1 root root 12716032 May 29 16:59 cirros-0.4.0-x86_64-disk.img
3、镜像上传到Glance
[root@openstack-allinone ~]# source keystonerc_admin
[root@openstack-allinone ~(keystone_admin)]# glance image-create --name cirros001 --disk-format qcow2 --container-format bare --visibility=public < cirros-0.4.0-x86_64-disk.img
+------------------+----------------------------------------------------------------------------------+
| Property | Value |
+------------------+----------------------------------------------------------------------------------+
| checksum | 443b7623e27ecf03dc9e01ee93f67afe |
| container_format | bare |
| created_at | 2024-05-29T09:06:28Z |
| disk_format | qcow2 |
| id | bd34bd52-7b14-4976-859a-78df47385164 |
| min_disk | 0 |
| min_ram | 0 |
| name | cirros001 |
| os_hash_algo | sha512 |
| os_hash_value | 6513f21e44aa3da349f248188a44bc304a3653a04122d8fb4535423c8e1d14cd6a153f735bb0982e |
| | 2161b5b5186106570c17a9e58b64dd39390617cd5a350f78 |
| os_hidden | False |
| owner | 1803d7088dd549e481fb22df2c893808 |
| protected | False |
| size | 12716032 |
| status | active |
| tags | [] |
| updated_at | 2024-05-29T09:06:28Z |
| virtual_size | Not available |
| visibility | public |
+------------------+----------------------------------------------------------------------------------+
4、查看新建的镜像
在项目的分支下,能看到刚刚新建的镜像,也可以通过路径查看:openstack_web_ui -> 项目 -> 计算 -> 镜像
[root@openstack-allinone ~(keystone_admin)]# glance image-list
+--------------------------------------+-----------+
| ID | Name |
+--------------------------------------+-----------+
| 99bea781-df04-403c-8131-223247bc4f05 | cirros |
| bd34bd52-7b14-4976-859a-78df47385164 | cirros001 |
+--------------------------------------+-----------+
5、创建实例
路径:openstack_web_ui -> 项目 -> 计算 -> 实例 -> 创建实例
# 实例名称crros_test
# 镜像源:选择刚刚上传的镜像cirros001
# 实例类型:选择最小的m1.tiny
# 网络:ini-net
# 安全组:default
6、编辑安全组规则
路径:openstack_web_ui -> 项目 -> 网络 -> 安全组 -> 管理规则 ->添加规则
(1)开启ssh
# 规则:SSH
# 方向:入向
# 远程:CIDR
# CIDR:0.0.0.0/0
(2)开启icmp
# 规则:ALL ICMP
# 方向:入向
# 远程:CIDR
# CIDR:0.0.0.0/0
7、绑定浮动IP
路径:路径:openstack_web_ui -> 项目 -> 网络 -> 浮动IP -> 分配IP给项目
# 资源池:选择外部网络的 ext-net
# 这样就可以获得一个浮动ip,我这边获取到的是172.16.10.158,然后点击关联到对应的实例即可。
8、物理网络访问openstack实例测试
# 通了就行
% ping 172.16.10.158
PING 172.16.10.158 (172.16.10.158): 56 data bytes
64 bytes from 172.16.10.158: icmp_seq=0 ttl=62 time=70.720 ms