OpenStack核心组件管理:Keystone与Glance重点总结

一、Keystone 认证管理

1. 核心概念

概念 说明
Domain(域) 一组 User、Group 或 Project 的容器,全局唯一,可对应一个大机构或数据中心
User(用户) 通过 Credential(用户名/密码等)验证后获得 Token,只需在域内唯一
Group(用户组) 一组 User 的容器,给 Group 分配角色后,组内所有用户继承该角色权限
Project(项目) 各服务中可访问的资源集合,不必全局唯一,只需域内唯一(Tenant/Project/Account 通用)
Role(角色) 定义一组权限,用户被赋予某个角色后才能访问相应资源;角色必须全局唯一,可被继承
Service(服务) 如 Nova、Glance、Cinder 等,每个服务暴露多个 Endpoint
Endpoint(端点) 访问具体服务的网络地址(URL),分为 admin/public/internal
Token(令牌) 允许访问特定资源的凭证,默认有效期 24 小时
Credential(凭证) 确认用户身份的数据(用户名+密码等)

2. 常用命令

# 查看 domain
openstack domain list

# 创建 domain
openstack domain create <domain_name>

# 删除 domain
openstack domain delete <domain_name>

# 列出所有用户
openstack user list

# 创建用户(指定密码)
openstack user create --password <password> <user_name>

# 创建组
openstack group create <group_name>

# 列出组
openstack group list

# 查看组详情
openstack group show <group_name>

# 将用户加入组
openstack group add user <group_name> <user_name>

# 查看用户是否在组中
openstack group contains user <group_name> <user_name>

# 给组/用户赋予角色(项目内)
openstack role add --project <project_name> --group <group_name> <role_name>
openstack role add --user <user_name> --project <project_name> <role_name>

# 查看角色分配
openstack role assignment list --names --group <group_name>

# 创建项目
openstack project create <project_name>

# 将用户关联到项目
openstack user set --project <project_name> <user_name>

# 修改项目配额(实例数、vcpu、内存)
openstack quota set --instance <num> --cores <num> --ram <MB> <project_name>

# 查看服务列表
openstack service list

# 查看 endpoint 列表
openstack endpoint list
openstack catalog list

3. Keystone 工作原理

  • Authentication(认证):验证用户身份,成功后签发 Token。
  • Authorization(鉴权):通过 Role 实现,各服务通过 policy.json 控制权限。
  • 典型流程
    1. 用户向 Keystone 提交用户名/密码 → 获取 Token。
    2. 用户携带 Token 请求 Nova 创建虚拟机。
    3. Nova 将 Token 发回 Keystone 验证有效性。
    4. 验证通过后,Nova 调用 Glance、Neutron 等服务,同样需要 Token 验证。
    5. 各服务通过自身的 policy.json 判断角色权限。

4. 故障排查

  • 日志位置:/var/log/keystone/keystone.log
  • 开启 debug:编辑 /etc/keystone/keystone.conf,设置 debug = True,重启服务。

二、Glance 镜像管理

1. Glance 架构要点

  • Newton 及之前:Glance-API + Glance-Registry(V1/V2)。

  • Stein 开始:废弃 Glance-Registry,由 Glance-API 直接操作数据库,通过 Store 模块对接多种后端(Amazon S3、Cinder/Swift、Ceph、Sheepdog 等)。

  • 配置文件/etc/glance/glance-api.conf

  • 数据库连接配置示例

    connection = mysql+pymysql://glance:password@192.168.108.10/glance
    

2. 镜像、实例、规格的关系

  • 镜像:操作系统模板,可启动任意数量的实例。
  • 实例:基于镜像的副本,修改不影响原镜像。
  • 规格:定义实例使用的 CPU、内存、磁盘等资源。

3. 镜像磁盘格式

格式 描述
vhd Xen、Microsoft、VirtualBox 常见格式
vhdx vhd 增强版,支持更大容量
vmdk VMware 常见格式
vdi VirtualBox 和 QEMU 支持
iso 光盘存档格式
ploop Virtuozzo 使用,用于 OS Containers
qcow2 QEMU 支持,支持动态扩展和写时复制(推荐)
aki / ari / ami Amazon 内核/内存盘/机器镜像
raw 非结构化磁盘镜像格式

4. 镜像状态机

状态 说明
queued 元数据已保留,镜像数据未上传
saving 原始数据正在上传中
uploading 调用了 import data-put 请求
importing 导入中,尚未就绪
active 创建完成,可用
deactivated 禁止非管理员访问
killed 上传出错,不可用
deleted 已删除,信息保留待自动清理
pending_delete 类似 deleted,但数据未清理,可恢复

5. 上传镜像操作

通过 Web 界面
  • 指定镜像名称、描述、源类型(本地文件或 URL)、磁盘格式、容器格式、可见性、是否受保护等。
通过命令行(推荐大文件)
# 带进度条上传
glance image-create --name <image_name> --file <file_path> --disk-format <format> --container bare --progress

# 例如上传 ISO
glance image-create --name image-centos --file CentOS-7-x86_64-Minimal-1810.iso --disk-format raw --container bare --progress
镜像存储位置
  • 默认文件后端:/var/lib/glance/images/

  • 查看镜像物理文件:

    find / -name <image_uuid>
    
  • 数据库记录(glance 库):

    use glance;
    select id,value from image_locations;
    

6. 使用 Swift 作为 Glance 后端存储

修改 /etc/glance/glance-api.conf

[glance_store]
default_store = swift
swift_store_region = RegionOne
swift_store_container = <container_name>
swift_store_large_object_size = 5120
swift_store_create_container_on_put = true
swift_store_multi_tenant = true
swift_store_admin_tenants = services
swift_store_auth_address = http://<controller_ip>:5000/v3
swift_store_user = swift
swift_store_key = <swift_hash_from_answers.txt>

重启 glance 服务:

systemctl restart openstack-glance*

7. Glance 镜像制作(手动)

以 Ubuntu 18.04 为例:

  1. 使用 virt-manager 创建 Ubuntu 18.04 虚拟机并安装系统。

  2. 登录虚拟机安装 cloud-init:

    sudo apt install cloud-init
    sudo shutdown -h now
    
  3. 预清理虚拟机:

    sudo virt-sysprep -d <VM_ID>
    
  4. 释放虚拟机定义:

    virsh undefine <VM_ID>
    
  5. 制作镜像文件(qemu-img create)。

  6. 上传镜像至 Glance:

    openstack image create ...
    

官方预构建镜像下载参考:https://docs.openstack.org/image-guide/obtain-images.html

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐