侧边栏壁纸
博主头像
liveJQ博主等级

沒有乐趣,何来开始

  • 累计撰写 191 篇文章
  • 累计创建 70 个标签
  • 累计收到 4 条评论

OpenStack 运行一个实例

liveJQ
2025-01-11 / 0 评论 / 0 点赞 / 3 阅读 / 5,533 字

验证是否已经部署好了 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

相关资料

  1. 南京大学 CentOS 7 镜像源
  2. Rocky 8
  3. CentOS Cloud Images
  4. Ubuntu
  5. Debian 11
  6. Kali
  7. Arch
  8. archlinux aliyun
  9. Alpine
  10. Rocky Linux
  11. cirros
0

评论区