验证是否已经部署好了 OpenStack 环境,最直接的办法就是能否正常运行一个实例。
以下命令默认都是在控制节点中执行。
普通用户和管理员用户权限
部署完成之后,默认只有 admin 超级管理员账户,在生产环境中最好不要直接使用。可以试想下,任何人(不管是管理员还是销售人员)都直接用 admin 超管账户的话,实例和分配的 IP 等等这些关键配置都可以随意删减,而且还不好查出具体是谁操作的。通过创建普通用户,划分项目归属控制权,可以更容易管理资源分配。
统一创建 whmcs 项目、用户,并加入到 member 角色。
openstack project create --domain default --description "Service Project" service
openstack project create --domain default --description "WHMCS Project" whmcs
openstack user create --domain default --password liveJQ2024 whmcs
openstack role add --project whmcs --user whmcs member
当前已经有一个 admin-openrc,新建一个 whmcs-openrc 初始化环境变量。
[root@controller ~]# cat whmcs-openrc
export OS_USERNAME=whmcs
export OS_PASSWORD=liveJQ2024
export OS_PROJECT_NAME=whmcs
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
验证新用户,加载变量并输出变量信息,然后尝试向 Keystone 申请 token:
source whmcs-openrc && export -p
openstack token issue
tail -f /var/log/keystone/keystone.log
正常会输出有效时间还有ID等信息
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| expires | 2024-09-01T22:23:49+0000 |
| id | gAAAAABotg7l4GCXVM_6gZ2zPmnfc8Xf7jS0JdmVJOvUawQ7Ko5U8gu7kht07qKlpuq-f3BpeHo2mCORVJjYEDwh8OxIIOyKBnklDEFRWbFEjV4pEBHPj4lpSVEJtKLzbsUIXSgq3mn_MyqGkeGjU7UdepFkT9p0LAbxriqnNhCczqn_A-FnV24 |
| project_id | 4a8e025310134b769b3fc75c49d6ce92 |
| user_id | e19b6a80a93149b49e0960cae7923b11 |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
[root@controller ~]#
因为我已经安装了 Horizon(Web 界面),认证时都会自动向 Keystone 申请 token,所以直接 Web 登录测试即可。
使用官方云镜像(推荐)
镜像(Image)
可以直接被 Nova 创建实例(VM)。
文件里包含操作系统和文件系统。
通常存放在 Glance(OpenStack 的镜像服务)里
模板(Template)
模板更强调“创建实例的配置组合”,而不仅仅是操作系统文件。
在 OpenStack 上,你可以把镜像 + flavor + 网络 + 安全组打包成一个 Heat 模板,然后批量创建 VM。
OpenStack 支持使用各 Linux 发行版提供的 Cloud Image,已内置 cloud-init 预配置工具。这里只需要简单测试,直接使用平台指定的 cirros-0.5.1-x86_64-disk.img 模版,下载并上传到控制器后执行:
source admin-openrc
openstack image create --file cirros-0.5.1-x86_64-disk.img --disk-format qcow2 --container-format bare --public cirros
openstack image list
若出现401错误,需要检查下 admin-openrc 里面的变量参数跟你之前给 glance 创建的参数是否吻合,否则生成的 token 是没有权限的。
正常输出
[root@controller ~]# openstack image list
+--------------------------------------+----------------------+--------+
| ID | Name | Status |
+--------------------------------------+----------------------+--------+
| bc0f03ce-52a5-46fb-aaa0-ced0c99263fe | arch-20250525-x86_64 | active |
| 09be47f9-baf3-4e88-9353-d9414415f6f0 | centos-7.4-x86_64 | active |
| 75435483-4ae6-4b50-ba36-cad92bcc65ea | centos-7.6-x86_64 | active |
| ebc6bdae-c552-4984-8d00-c036a4af72e9 | centos-7.9-x86_64 | active |
| 1cdb719a-56ad-432a-961d-558c95c838a4 | debian-11-x86_64 | active |
| 0caeac7a-33b4-4793-9112-1346f98577d1 | kali-2024.4-amd64 | active |
| 21b916d0-66bf-4b2d-883d-6bdc87108595 | rocky-8.10-x86_64 | active |
| c3f6cbcd-e2b8-4062-a7ce-324def0eabf8 | ubuntu-18.04-x86_64 | active |
| 154e5251-2f77-44da-bff2-deb6985afe99 | ubuntu-20.04-x86_64 | active |
| 7e9899db-ec6b-4ecf-9838-61935750004f | ubuntu-24.04-x86_64 | active |
+--------------------------------------+----------------------+--------+
创建网络
External provider network 官方术语
- Provider Network(提供者网络)
特点:直接映射到底层物理网络,不通过 Neutron 的租户私有网络(Tenant Network)进行 NAT/封装。
用途:通常给虚拟机分配“浮动 IP(Floating IP)”,让 VM 能直接访问外网。
- External Network(外部网络)
这是 OpenStack Dashboard / CLI 常用的叫法。一般来说,Provider Network 配置后,会标记为 external=True,供浮动 IP 使用。
创建 public1 提供者网络
source admin-openrc
openstack network create --project admin --share --external \
--availability-zone-hint nova --provider-physical-network extnet \
--provider-network-type flat public1
给 public1 创建子网 public1_subnet
openstack subnet create --network public1 \
--allocation-pool start=103.63.121.225,end=103.63.121.239 \
--dns-nameserver 8.8.8.8 --gateway 103.63.121.1 \
--subnet-range 103.63.121.0/24 public1_subnet
Tenant Network / Project Network 官方术语
由租户(项目)自己创建和管理,虚拟机默认连到这个网络,通常是私有的,内部通信正常,但外部访问需要 Floating IP + Provider Network。
创建 private1 租户网络,并创建对应的 private1_subnet 子网。
source whmcs-openrc
openstack network create private1
openstack subnet create --network private1 \
--subnet-range 172.16.1.0/24 \
--dns-nameserver 8.8.8.8 private1_subnet
创建路由器
openstack router create router1
openstack router add subnet router1 private1_subnet
openstack router set --external-gateway public1 router1
验证 qrouter 命名空间的创建
[root@controller ~]# ip netns
qdhcp-fc2a5a77-bff1-4c4f-a64d-bc26711fc00a (id: 2)
qdhcp-7b41c110-0382-4471-88c8-8fcfa5f1029f (id: 1)
qrouter-f9d66c4f-2635-4999-af93-6218599cb8d9 (id: 0)
开始创建实例
使用管理员账户创建实例规格
source admin-openrc
openstack flavor create --public vps.tiny --id 10 --vcpus 1 --ram 1024 --disk 20
openstack flavor create --public vps.small --id 11 --vcpus 2 --ram 2048 --disk 30
openstack flavor create --public vps.medium --id 12 --vcpus 4 --ram 4096 --disk 50
openstack flavor create --public vps.large --id 13 --vcpus 4 --ram 8192 --disk 100
openstack flavor create --public vps.xlarge --id 14 --vcpus 8 --ram 16384 --disk 300
为默认的安全组添加规则,以默认新创建的虚拟机都可以 ssh 和 ping 通虚拟机实例。
source admin-openrc
openstack security group rule create --proto icmp default
openstack security group rule create --proto tcp --dst-port 22 default
基于之前的租户网络创建一个虚拟机实例
openstack server create --flavor 10 --image cirros --network private1 testVM1
openstack server list
为虚拟机实例分配浮动 IP 地址以解决外部网络访问的问题
openstack floating ip create public1
openstack server add floating ip testVM1 103.63.121.225
评论区