OpenStack管理

OpenStack管理-keystone

OpenStack认证管理-Keystone

keystone基本概念

bash 复制代码
#查看domain
[root@controller ~]# source keystonerc_admin
[root@controller ~(keystone_admin)]# openstack domain list
+----------------------------------+---------+---------+--------------------+
| ID                               
| Name    
| default                          
| Enabled | Description        
|
+----------------------------------+---------+---------+--------------------+
| 2c99588e109d427abb530cbb9aada74a | heat    
| True    
| Default | True    
|                    
|
| The default domain |
+----------------------------------+---------+---------+--------------------+

#创建domain
# 创建新的domain叫domain-test
[root@controller ~(keystone_admin)]# openstack domain create domain-test
+-------------+----------------------------------+
| Field       
| Value                            
|
+-------------+----------------------------------+
| description |                                  
|
| enabled     
| id          
| name        
| options     
| tags        
| True                             
|
| c70009318d0141c7a84b26ff427ff9d6 |
| domain-test                      
| {}                               
| []                               
|
|
+-------------+----------------------------------+
| default                          
|
#再次验证确实多了一个domain-test
[root@controller ~(keystone_admin)]# openstack domain list
+----------------------------------+-------------+---------+--------------------+
| ID                               
| Name        
| Enabled | Description        
|
+----------------------------------+-------------+---------+--------------------+
| 2c99588e109d427abb530cbb9aada74a | heat        
| True    
| c70009318d0141c7a84b26ff427ff9d6 | domain-test | True    
| Default     
| True    
|                    
|                    
|
|
| The default domain |
+----------------------------------+-------------+---------+--------------------+

#删除domain
[root@controller ~(keystone_admin)]# openstack domain set --disable domain-test  
#设置domain禁用
[root@controller ~(keystone_admin)]# openstack domain delete domain-test
[root@controller ~(keystone_admin)]# openstack domain list
+----------------------------------+---------+---------+--------------------+
| ID                               
| default                          
| Name    
| Enabled | Description        
|
+----------------------------------+---------+---------+--------------------+
| 2c99588e109d427abb530cbb9aada74a | heat    
| True    
| Default | True    
|                    
|
| The default domain |
+----------------------------------+---------+---------+--------------------+

#开启多域登录界面
[root@controller ~(keystone_admin)]# cd /etc/openstack-dashboard/
[root@controller openstack-dashboard(keystone_admin)]# ls
cinder_policy.json  glance_policy.json  keystone_policy.json  local_settings  
local_settings.d  neutron_policy.json  nova_policy.d  nova_policy.json
[root@controller openstack-dashboard(keystone_admin)]# vim local_settings
#修改配置文件83行如下,开启keystone支持多域
83 OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
[root@controller openstack-dashboard(keystone_admin)]# systemctl restart httpd   

测试多域登录效果:

bash 复制代码
#列出所有用户
[root@controller ~(keystone_admin)]# openstack user list
+----------------------------------+------------+
| ID                               
| Name       
|
+----------------------------------+------------+
| 7ef9147a8abe485889ece90dce340ab1 | admin      
|
| 8624a4e61d6c4b589814c369af26cb5f | heat_admin |
| 8770fb183087426eb29543f3d629b66f | glance     
| c3eba4bb5577404285b333e4de5c1909 | cinder     
|
|
| c286b069d5064a2b8050b3438f31ef7f | nova       
|
| 66fbd238901143d1a2b9e1e848117aff | placement  |
| 7e1d63925490464c897f75275c7364e6 | neutron    
|
| 1dd2bd1d566a4f4091e99441bb1da9b5 | swift      
| 9368227a55f44dba85e10bc7c696813c | heat       
|
|
| be5dc0149ba4402db25045a17a3d7a59 | heat-cfn   |
| e1ddffa452504776bc845f6f4114cd14 | gnocchi    
|
| fda949b4ff944336bb3206d6f7e6bc4c | ceilometer |
| 10286ba1e9974e6994fe9908ab0db617 | aodh       
|
+----------------------------------+------------+

#创建新用户
#创建用户user1密码HUAWEI
[root@controller ~(keystone_admin)]# openstack user create --password HUAWEI 
user1   
+---------------------+----------------------------------+
| Field               
| Value                            
|
+---------------------+----------------------------------+
| domain_id           
| default                          
| enabled             
| id                  
| name                
| options             
| True                             
| 77ae3f5b216749ef8663c3bdb5679d36 |
| user1                            
| {}                               
| password_expires_at | None                             
|
+---------------------+----------------------------------+
#查看用户列表有没有新创建的用户user1,user1在最下面
[root@controller ~(keystone_admin)]# openstack user list
+----------------------------------+------------+
| ID                               
| Name       
|
+----------------------------------+------------+
| 7ef9147a8abe485889ece90dce340ab1 | admin      
|
| 8624a4e61d6c4b589814c369af26cb5f | heat_admin |
| 8770fb183087426eb29543f3d629b66f | glance     
| c3eba4bb5577404285b333e4de5c1909 | cinder     
| c286b069d5064a2b8050b3438f31ef7f | nova       
|
| 66fbd238901143d1a2b9e1e848117aff | placement  |
| 7e1d63925490464c897f75275c7364e6 | neutron    
| 1dd2bd1d566a4f4091e99441bb1da9b5 | swift      
| 9368227a55f44dba85e10bc7c696813c | heat       
| id                  
|
|
|
|
|
| be5dc0149ba4402db25045a17a3d7a59 | heat-cfn   |
| e1ddffa452504776bc845f6f4114cd14 | gnocchi    
|
| fda949b4ff944336bb3206d6f7e6bc4c | ceilometer |
| 10286ba1e9974e6994fe9908ab0db617 | aodh       
|
| 77ae3f5b216749ef8663c3bdb5679d36 | user1      
|
+----------------------------------+------------+
|
|
|
|
#查看user1用户详细信息
[root@controller ~(keystone_admin)]# openstack user show user1
+---------------------+----------------------------------+
| Field               
| Value                            
|
+---------------------+----------------------------------+
| domain_id           
| default                          
| enabled             
| True                             
|
|
| 77ae3f5b216749ef8663c3bdb5679d36 |
| name                
| options             
| user1                            
| {}                               
|
|
| password_expires_at | None                             
|
+---------------------+----------------------------------+

#创建组group1,并将user1加入group1:
#创建组group1
[root@controller ~(keystone_admin)]# openstack group create group1
+-------------+----------------------------------+
| Field       
| Value                            
|
+-------------+----------------------------------+
| description |                                  
|
| domain_id   | default                          
| id          
|
| f259902c4c0242d3b392d951494e747f |
| name        
| group1                           
|
+-------------+----------------------------------+
#列出所有的组
[root@controller ~(keystone_admin)]# openstack group list
+----------------------------------+--------+
| ID                               
| Name   |
+----------------------------------+--------+
| f259902c4c0242d3b392d951494e747f | group1 |
+----------------------------------+--------+
#查看group1组详细信息
[root@controller ~(keystone_admin)]# openstack group show group1
+-------------+----------------------------------+
| Field       
| Value                            
|
+-------------+----------------------------------+
| description |                                  
| domain_id   | default                          
| id          
| name        
| group1                           
|
|
| f259902c4c0242d3b392d951494e747f |
|
+-------------+----------------------------------+
#将user1加入group1
[root@controller ~(keystone_admin)]# openstack group add user group1 user1
#查看user1是否隶属于group1
[root@controller ~(keystone_admin)]# openstack group contains user group1 user1
user1 in group group1

#查看角色role
[root@controller ~(keystone_admin)]# openstack role list
+----------------------------------+------------------+
| ID                               
| Name             
|
+----------------------------------+------------------+
| 030b4ca553dc41349168eaca4fd43f42 | ResellerAdmin    
| 461321ea6a284081b692a469a15d7938 | SwiftOperator    
| 4ef39ef24f694c9aa6c1101622da0e92 | admin            
| 8b24d8bef4004573a8f3cb1f5a1517a8 | _member_         
| 973e0706bc66471a90d09f177bfb6a1d | member           
|
|
|
|
|
| a3af83fe8bf84014b01feae786f83b8b | heat_stack_owner |
| ce4a3e671d9040359d6f6f55555bf429 | reader           
|
| e9cd36ba1b8744878cc15a05709ab1fd | heat_stack_user  |
+----------------------------------+------------------+

#给group1赋予角色admin:
[root@controller ~(keystone_admin)]# openstack role add --project admin --group 
group1 admin

#验证group1角色:
[root@controller ~(keystone_admin)]# openstack role assignment list --names --
group group1
+-------+------+----------------+---------------+--------+--------+-----------+
| Role  | User | Group          
| Project       
| Domain | System | Inherited |
+-------+------+----------------+---------------+--------+--------+-----------+
| admin |      
| group1@Default | admin@Default |        
|        
|
+-------+------+----------------+---------------+--------+--------+-----------+
bash 复制代码
#创建ProjectA
#创建项目ProjectA
[root@controller ~(keystone_admin)]# openstack project create ProjectA
+-------------+----------------------------------+
| Field       
| Value                            
|
+-------------+----------------------------------+
| description |                                  
| domain_id   | default                          
| enabled     
| id          
| name        
| True                             
|
|
|
| a6aa11ee311a46889ac34e49b8da47d1 |
| is_domain   | False                            
|
| ProjectA                         
|
| options     
| {}                               
| parent_id   | default                          
| tags        
| []                               
|
|
|
+-------------+----------------------------------+
#查看验证命令
[root@controller ~(keystone_admin)]# openstack project list
[root@controller ~(keystone_admin)]# openstack project show projectA
#ProjeectA分配给用户user1
[root@controller ~(keystone_admin)]# openstack user set --project ProjectA user1
#给项目ProjectA里的用户user1赋予角色admin
[root@controller ~(keystone_admin)]# openstack role add --user user1 --project 
ProjectA admin

查看ProjectA现象:

修改ProjectA配额:

bash 复制代码
#将Project配额设置为实例3,vcpu 5,内存5000MB
[root@controller ~(keystone_admin)]# openstack quota set --instance 3 --cores 5 --ram 5000 ProjectA
#修改配额实验现象:
#使用user1登录,切换到ProjectA


bash 复制代码
#看OpenStack有哪些服务:
[root@controller ~(keystone_admin)]# openstack service list
+----------------------------------+------------+----------------+
| ID                               
| Name       
| Type           
|
+----------------------------------+------------+----------------+
| 006d8f9e6a054e238a1093fe5af715bf | swift      
| object-store   |
| 1abf3641147f40368f8d1c7e8b5677e1 | heat       
| 2e6919aa53eb48cb99bc992b506a0e3e | glance     
| image          
| 5dfb29073cf140199cc78b2d84fac299 | keystone   | identity       
| 5ed901220a18430f8d423f9a95d43477 | ceilometer | metering       
|
| 8ec4ba00f67448ad8acedc744dce2d87 | heat-cfn   | cloudformation |
| 9a6c3edee4ba431db7d1cac840b91dcb | neutron    
| a747c0c45e544fa9b20538474ac579d1 | nova       
| orchestration  |
| network        
| compute        
| c4e445f741a943ff897eb494cca6df6e | cinderv2   | volumev2       
| d06744c3ad6343988bb0ab60b291ffeb | placement  | placement      
| db9e425f65ac4808ab62dc1659f58916 | cinderv3   | volumev3       
| e11ec9b570254141bdac2ff3ec75179d | aodh       
| e3a0ba8fe0f844249bfa3a90ec6a6fea | gnocchi    
| alarming       
| metric         
|
|
|
|
|
|
|
|
|
+----------------------------------+------------+----------------+

#查看OpenStack endpoint:

查看catalog:

理解Keystone核心概念

作为 OpenStack 的基础支持服务,Keystone 做下面这几件事情:

  1. 管理用户及其权限
  2. 维护 OpenStack Services 的 Endpoint
  3. Authentication(认证)和 Authorization(鉴权)
    学习 Keystone,得理解下面这些概念:
    User
    User 指代任何使用 OpenStack 的实体,可以是真正的用户,其他系统或者服务。

当 User 请求访问 OpenStack 时,Keystone 会对其进行验证。Horizon 在身份管理>用户 管理 User

除了 admin,OpenStack 也为 nova、cinder、glance、neutron 服务创建了相应的 User。 admin 也

可以管理这些 User。

Credentials

Credentials 是 User 用来证明自己身份的信息,可以是:

  1. 用户名/密码
  2. Token
  3. API Key
  4. 其他高级方式

Authentication

Authentication 是 Keystone 验证 User 身份的过程。User 访问 OpenStack 时向 Keystone 提交用户名

和密码形式的 Credentials,Keystone 验证通过后会给 User 签发一个 Token 作为后续访问的

Credential。

Token

Token 是由数字和字母组成的字符串,User 成功 Authentication 后 Keystone 生成 Token 并分配给

User。

  1. Token 用做访问 Service 的 Credential
  2. Service 会通过 Keystone 验证 Token 的有效性
  3. Token 的有效期默认是 24 小时

Project

Project 用于将 OpenStack 的资源(计算、存储和网络)进行分组和隔离。

根据 OpenStack 服务的对象不同,Project 可以是一个客户(公有云,也叫租户)、部门或者项目组

(私有云)。

这里请注意:

  1. 资源的所有权是属于 Project 的,而不是 User。
  2. 在 OpenStack 的界面和文档中,Tenant / Project / Account 这几个术语是通用的,但长期看会倾
    向使用 Project
  3. 每个 User(包括 admin)必须挂在 Project 里才能访问该 Project 的资源。 一个User可以属于多
    个 Project。
  4. admin 相当于 root 用户,具有最高权限

Horizon 在 身份管理>项目 中管理 Project



Role

安全包含两部分:Authentication(认证)和 Authorization(鉴权)

Authentication 解决的是"你是谁?"的问题

Authorization 解决的是"你能干什么?"的问题

Keystone 借助 Role 实现 Authorization:

  1. Keystone定义Role
  1. 可以为 User 分配一个或多个 Role,Horizon 的菜单为 Identity->Project->Manage Members
  1. Service 决定每个 Role 能做什么事情 Service 通过各自的 policy.json 文件对 Role 进行访问控制。
    下面是 Nova 服务 /etc/nova/policy.json 中的示例
    访问策略规则以JSON格式指定,文件名为policy.json
    策略文件的路径是/etc/SERVICE_NAME/policy.json,例如/etc/keystone/policy.json
    packstack安装策略文件路径是/etc/openstack-dashboard/SERVICE_NAME_policy.json

OpenStack 默认配置只区分 admin 和非 admin Role。 如果需要对特定的 Role 进行授权,可以修

改 policy.json(一般不要改)。下一节我们将通过例子加深对这些概念的理解。

Troubleshoot

OpenStack 排查问题的方法主要是通过日志。

每个 Service 都有自己的日志文件。

Keystone 主要有一个日志: keystone.log 保存在 /var/log/keystone/ 目录里。

bash 复制代码
[root@controller nova(keystone_admin)]# cd /var/log/keystone/
[root@controller keystone(keystone_admin)]# ls
keystone.log

如果需要得到最详细的日志信息,可以在 /etc/keystone/keystone.conf 中打开 debug 选项

bash 复制代码
[root@controller keystone(keystone_admin)]# cd /etc/keystone/
[root@controller keystone(keystone_admin)]# ls
default_catalog.templates  fernet-keys  keystone.conf  logging.conf  policy.d  
policy.json  puppet.conf  sso_callback_template.html
[root@controller keystone(keystone_admin)]# vim keystone.conf
# 修改配置文件第94行
94 debug=True

•我们以创建VM为例,站在整个OpenStack角度来看一下,整个认证流程是怎样的。

•首先用户需要使用OpenStack,第一步就要向Keystone提供用户名密码来获取Token。当用户获取

Token后,需要向Nova发送创建虚拟机请求,Nova负责调用计算资源并管理虚拟机的生命周期,所以这

个创建请求要发送到Nova。请求的Head中会携带Token,当Nova-api接收到请求后,会将Token传递到

Keystone进行验证是否有效合法。当验证成功后返回信息给Nova,Nova才开始进行创建VM操作。这边

不具体介绍Nova如何操作,但是我们知道创建一台虚拟机,不仅需要准备CPU、内存等计算资源,还要

有相应的网络、存储等资源,这里以网络资源为例,Nova-api将token透传给Nova-compute,Nova

compute会向Neutron-server发送与网络相关操作请求,请求Head中也携带Token,Neutron收到请求

后也会将Token传递到Keystone验证,验证成功才执行相应操作。

配置文件第94行

94 debug=True

复制代码
[外链图片转存中...(img-q0zNOvQr-1774246010895)] 

•我们以创建VM为例,站在整个OpenStack角度来看一下,整个认证流程是怎样的。
•首先用户需要使用OpenStack,第一步就要向Keystone提供用户名密码来获取Token。当用户获取
Token后,需要向Nova发送创建虚拟机请求,Nova负责调用计算资源并管理虚拟机的生命周期,所以这
个创建请求要发送到Nova。请求的Head中会携带Token,当Nova-api接收到请求后,会将Token传递到
Keystone进行验证是否有效合法。当验证成功后返回信息给Nova,Nova才开始进行创建VM操作。这边
不具体介绍Nova如何操作,但是我们知道创建一台虚拟机,不仅需要准备CPU、内存等计算资源,还要
有相应的网络、存储等资源,这里以网络资源为例,Nova-api将token透传给Nova-compute,Nova
compute会向Neutron-server发送与网络相关操作请求,请求Head中也携带Token,Neutron收到请求
后也会将Token传递到Keystone验证,验证成功才执行相应操作。

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/0bbee6927622473b86137707439c6df8.png)
相关推荐
做咩啊~3 小时前
4.镜像服务glance迁移
openstack
lwx9148522 天前
openstack命令详解
openstack
哈里谢顿7 天前
某云平台开发面试总结
openstack
xy1230622 天前
OpenStack Train 部署实战(三)控制节点--keystone服务
centos·openstack
哈里谢顿24 天前
云计算基础架构工程师面试终极准备指南(OpenStack 背景专属)
openstack
哈里谢顿24 天前
云计算基础架构工程师”面试通关 Checklist
openstack
yenggd1 个月前
openstack一键安装及原理网络原理
网络·openstack
哈里谢顿1 个月前
Ironic 心跳机制深度解析:裸金属节点状态同步的生命线(2026 实战指南)
openstack
哈里谢顿1 个月前
Ironic Python Agent(IPA)深度解析:裸金属部署的“大脑”(2026 实战指南)
openstack