openstack keystone部署
https://blog.csdn.net/andrew6_success/article/details/85250480#commentBox
https://www.cnblogs.com/yaohong/p/7601470.html
keystone 工作原理 https://www.cnblogs.com/charles1ee/p/6293387.html
keystone 的认证方式 https://www.cnblogs.com/dhplxf/p/7966890.html
keystone认证方式:UUID、PKI、Fernet;
官网安装教程 https://docs.openstack.org/keystone/latest/install/index.html
openstack命令手册 https://blog.csdn.net/weixin_41711331/article/details/83992164
官网 keystone v3 api https://docs.openstack.org/keystone/latest/api_curl_examples.html#unscoped
(1.获取无范围的令牌
2.获取项目范围的令牌
3.获取域范围的令牌(请注意,您首先需要在域上进行角色分配!)
4.从令牌获取令牌
5.撤消令牌
6.列表域名
7.创建域名
8.列出项目
9.禁用项目
10.列出服务
11.列出端点
12.列出用户
13.创建用户
14.显示用户的详细信息
15.更改密码(使用默认策略,这可以作为用户完成)
16.重置密码(使用默认策略,这需要管理员)
17.在项目上创建组角色分配
18.建立信任)
github软件包 https://github.com/openstack/keystone
配置环境:centos 7
[root@dk ~]# uname -a
Linux dk 3.10.0-957.27.2.el7.x86_64 #1 SMP Mon Jul 29 17:46:05 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
关闭防火墙
systemctl disable firewalld.service
systemctl stop firewalld.service
关闭SElinux
sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/config
setenforce 0
安装mysql
yum install ‐y mysql mariadb‐server.x86_64
systemctl enable mariadb.service
systemctl start mariadb.service
mysql ‐u root ‐p
CREATE DATABASE keystone;
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY
'KEYSTONE_DBPASS';
允许本地keystone用户登录 进行所有操作
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'KEYSTONE_DBPASS';
允许远端设备登录 进行所有操作,设定口令为 KEYSTONE_DBPASS
select,insert,update,delete,create,drop,index,alter,grant,references,reload,shutdown,process,file等14个权限。
ps: KEYSTONE_DBPASS可以换成自己的密码
编辑/etc/keystone/keystone.conf
文件并完成以下操作:
[root@dk ~]# cat /etc/keystone/keystone.conf
[database]
connection = mysql+pymysql://keystone:000000@localhost/keystone
[token]
# ...
provider = fernet
su -s /bin/sh -c "keystone-manage db_sync" keystone
useradd -M -s /sbin/nologin keystone
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
keystone-manage bootstrap --bootstrap-password ADMIN_PASS --bootstrap-admin-url http://localhost:5000/v3/ --bootstrap-internal-url http://localhost:5000/v3/ --bootstrap-public-url http://localhost:5000/v3/ --bootstrap-region-id RegionOne
keystone-manage bootstrap --bootstrap-password ADMIN_PASS \
--bootstrap-admin-url http://localhost:5000/v3/ \
--bootstrap-internal-url http://localhost:5000/v3/ \
--bootstrap-public-url http://localhost:5000/v3/ \
--bootstrap-region-id RegionOne
[root@dk ~]# curl -i -H "Content-Type: application/json" -d '{"auth":{"identity":{"methods":["password"],"password":{"user":{"name":"admin","domain":{"id":"default"},"password":"ADMIN_PASS"}}}}}' "http://localhost:5000/v3/auth/tokens" ;echo
成功 RESPONSE:
HTTP/1.1 201 CREATED
Date: Tue, 20 Aug 2019 06:13:14 GMT
Server: Apache/2.4.6 (CentOS) mod_wsgi/3.4 Python/2.7.5
X-Subject-Token: gAAAAABdW497qlbm9YOCG6e9HgX1qHHwXewZ4MYOxv0XtKlxq4qFIWys0F56pXA_yaxTMf6pbW-oAZXbf3pM44D2Hufa97kPBFCEM4xnOA0yI57pMY0G9C-4RL3dMmeBQoIzaa6xTI3sdWRyVS_i_I-NgkgJjs3lSA
Vary: X-Auth-Token
x-openstack-request-id: req-30c496b0-d4f9-4558-8db5-b91d9098cdf5
Content-Length: 312
Content-Type: application/json
{"token": {"issued_at": "2019-08-20T06:13:15.000000Z", "audit_ids": ["j6twxtk6Q0u11mbHMKMBhA"], "methods": ["password"], "expires_at": "2019-08-20T07:13:15.000000Z", "user": {"password_expires_at": null, "domain": {"id": "default", "name": "Default"}, "id": "22511e2e94384a6da027e215a5df269c", "name": "admin"}}}
keystone-manage is the command line tool which interacts with the Keystone service to 初始化 and 更新 数据 within Keystone. Generally, keystone-manage is only used for operations that cannot be accomplished with the HTTP API, such 数据的导入导出 and 数据库迁移.
keystone-status是一个命令行工具,可帮助运营商升级其部署。
Keystone在openstack中提供身份认证、服务目录功能。openstack中的所有其他服务必须向keystone注册其API服务端点endponit,keystone还维护着一个策略引擎,该引擎提供基于规则的访问和服务授权,keystone服务自身由多个提供者组成,它们包括:Identify(身份)、Resource(资源)、Authorizaition(认证)、Token(令牌)、Catalog(目录)、Policy(策略)。keystone有几种主要数据类型:
用户:拥有帐户凭据,与一个或多个项目或域相关联
组:用户集合,与一个或多个项目或域相关联
项目:OpenStack中的所有权单位,包含一个或多个用户
域:OpenStack中的所有权单位,包含用户,组和项目
角色:与许多用户 - 项目对相关联的一流元数据。一个3元组,有一个Role,一个Resource和一个Identity
令牌:识别与用户或用户和项目相关联的凭证,一旦用户的凭证已经过验证,令牌服务就会验证和管理用于验证请求的令牌
附加:与用户 - 项目对关联的一桶键值元数据。
规则:描述执行操作的一组要求。给定要检查的匹配列表,只需验证凭据是否包含匹配项。
通用数据模型允许用户和组之间的多对多关系到项目和域;
项目
Projects代表ownershipOpenStack 的基本单元,因为OpenStack中的所有资源都应归特定项目所有。项目本身必须由特定域拥有,因此所有项目名称不是 全局唯一的,但对于其域是唯一的。如果未指定项目的域,则将其添加到默认域。
域
Domains是项目,用户和组的高级容器。每个都归一个域所有。每个域定义一个名称空间,其中存在API可见的名称属性。Keystone提供了一个默认域名,名称为“默认”。
在Identity v3 API中,属性的唯一性如下:
域名。所有领域的全球独特性。
角色名称。在拥有的域内独一无二。
用户名。在拥有的域内独一无二。
项目名。在拥有的域内独一无二。
团队名字。在拥有的域内独一无二。
由于其容器体系结构,域可以用作委派OpenStack资源管理的方式。如果授予适当的分配,则域中的用户仍可以访问另一个域中的资源。
学习keystone主要需要理解下面的图,用户使用自己的用户名、密码从keystone获取身份令牌,然后再拿获取的身份令牌通过openstack的api接口找openstack其它各个组件申请资源,各个组件拿到用户申请后会拿着收到的用户令牌去找keystone进行验证,防止伪造令牌或令牌过期。
从Kilo版本开始,keystone已经引入了Fernet来加强加密身份验证令牌的方法,有助于解决UUID和PKI令牌引起的系统性能问题,从Mitaka版本开始完全支持Fernet,建议配置keystone时启用Fernet令牌。令牌默认一小时失效,具体配置在/etc/keystone/keystone.conf中的【token】中配置。
Keystone 主要有两个日志:
keystone.log 和 keystone_access.log
保存在 /var/log/apache2/ 目录里。
如果需要得到最详细的日志信息,可以在 /etc/keystone/keystone.conf 中打开 debug 选项
https://github.com/openstack/python-openstackclient
pip install python-openstackclient
配置环境变量:
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://localhost:5000/v3
export OS_IDENTITY_API_VERSION=3
openstack --help
<
租户操作命令:
展示租户 : 项目列表
Openstack project list
创建租户 : 项目创建描述名称
Openstack project create --description 'Demo Project' myDemoProject
禁用租户: 项目设置项目id 禁用
Openstack project set 7cc7482e8d734d6690d6e7ab3270afc0 --disable
启用租户: 项目设置项目id 启用
openstack project set 7cc7482e8d734d6690d6e7ab3270afc0 --enable
更新租户名称: 项目设置项目id名称
openstack project set 7cc7482e8d734d6690d6e7ab3270afc0 --name newProject
显示租户信息: 项目显示项目id
openstack project show 7cc7482e8d734d6690d6e7ab3270afc0
删除租户: 项目删除 项目id
openstack project delete 7cc7482e8d734d6690d6e7ab3270afc0
用户操作命令
展示所有用户: 用户列表
openstack userlist
创建用户:用户创建 密码提示 用户名称
说明:创建用户必须制定名称,可选项包括租户id和密码,建议创建用户指定可选信息,否则无法dashboard登录。
openstack usercreate --password-prompt myDemoUser
然后输入密码即可
禁用用户: 用户设置 用户名 禁用
openstack userset myDemoUser --disable
启用用户: 用户设置 用户名 启用
openstack userset myDemoUser --enable
更新用户名称: 用户设置 用户名 新名字
openstack userset myDemoUser --name newMyDemoUser
删除用户: 用户删除 用户名
openstack userdelete newMyDemoUser
角色操作命令
展示所有角色: 角色列表
openstack rolelist
创建角色: 角色创建 角色名
openstack rolecreate newMyRole
分配角色: 角色添加 用户名 租户id 角色名
说明:需要查看用户,租户,角色三个信息。实际上是分配角色给用户的同时,指定用户对应的租户信息
openstack rolelist
openstack userlist
openstack project list
openstack roleadd --user myuser --project fd3064ffb1b347a1a321a1474ea4768a myrole
确认操作结果:
角色列表 用户名 项目名
openstack rolelist --user myuser --project demo
删除角色: 角色删除 用户名 项目id 角色名
openstack roleremove --user myuser --project fd3064ffb1b347a1a321a1474ea4768a myrole
主机硬件配置模板命令
显示所有硬件配置模板: 计算组件 模板列表
nova flavor-list
创建主机类型: 计算组件 模板创建 模板名称 id 内存(MB) 硬盘(GB) cpu个数
novaflavor-create minFlavor 1000 512 5 1
说明: id参数为auto会自动生成
nova flavor-createmin auto 1024 10 1
说明: --is-public 定义模板是否共享, -rxtx-factor 定义虚拟网卡带宽
novaflavor-create --is-public true min2 auto 512 1 1 -rxtx-factor .1
命令执行失败
创建主机类型,分配给租户,时期称为私有主机类型
说明: 计算组件 模板获取添加 模板租户id
novaflavor-create --is-public false auto min2 512 5 1
novaflavor-access-add min fd3064ffb1b347a1a321a1474ea4768a
说明:通过extra_spec参数可以为已有的主机类型设置更多的限制。
查看具体信息: nova help flavor-key
删除主机类型: 计算组件 模板删除 模板id
novaflavor-delete 1000
管理安全组
作用:安全组是IP过滤规则的集合,控制对虚拟机实例的访问。可用于租户内的所有虚拟机实例。
默认:所有租户有默认安全组,可以指定其他安全组。默认安全组会拒绝对虚拟机实例内的访问,允许虚拟机向外访问
同一网络的主机节点,可以在/etc/nova/nova.conf文件中定义allow_same_net_traffic参数共享相同
安全组规则。
查看安全组:
加载环境变量
source openrcadmin admin
显示所有安全组: 计算组件 安全组列表
novasecgroup-list
显示安全组内所有规则: 计算组件 安全组列表规则 默认
novasecgroup-list-rules default
创建安全组: 计算组件 安全组创建 组名描述
novasecgroup-create AllGranted "Allow All Visited"
添加安全组规则: 计算组件 安全组添加规则 安全组名称 ip协议 源端口 目的端口 CIDR
novasecgroup-add-rule AllGranted tcp 80 80 0.0.0.0/24
查看规则是否设置成功: 计算组件 安全组列表规则 安全组名称
novasecgroup-list-rules AllGranted
删除安全组:计算组件 安全组删除 组名
novasecgroup-delete AllGranted
资源使用率统计
展示主机节点及其nova服务: 计算组件 主机列表
nova host-list
主机节点资源使用率统计信息:计算组件 主机描述 主机名称
novahost-describe localhost.localdomain
实例使用率统计
显示所有实例信息: 计算组件 列表
nova list
实例诊断信息: 计算组件 诊断 实例名称
nova diagnosticsmyinstance
查询每个租户下的资源统计信息:计算组件 使用列表
nova usage-list