👌 2021-05-08 OpenStack Wallaby 部署2 身份认证-keystone
FileInfo Filename - OpenStack Wallaby 部署简介 Version - v1.0.2105(2021/05/07 ~ 2021/05/10) Author - standuke Email - shadowdoker@gmail.com DescriptionKey - Keystone installation of OpenStack Wallaby deployment
版本修订记录:
v1.0.2105:2021-05-07:建立 OpenStack Wallaby 部署2 身份认证-keystone,修订人:standuke
[TOC]
计划
首先完成最小化安装「最小化安装清单如下」,后期逐步添加相关服务,例如 Ceph 等。
最小化安装清单
At a minimum, you need to install the following services. Install the services in the order specified below:
Identity service – keystone installation for Wallaby
Image service – glance installation for Wallaby
Placement service – placement installation for Wallaby
Compute service – nova installation for Wallaby
Networking service – neutron installation for Wallaby
We advise to also install the following components after you have installed the minimal deployment services:
Dashboard – horizon installation for Wallaby
Block Storage service – cinder installation for Wallaby
keystone 安装
概述
OpenStack 身份服务提供了一个集成点,用于管理身份验证,授权和服务目录。
身份服务通常是用户与之交互的第一项服务。身份验证后,最终用户可以使用其身份访问其他 OpenStack 服务。同样,其他 OpenStack 服务利用身份服务来确保用户是他们认可的人,并发现其他服务在部署中的位置。身份服务还可以与某些外部用户管理系统(例如LDAP)集成。
用户和服务可以使用由身份服务管理的服务目录来查找其他服务。顾名思义,服务目录是 OpenStack 部署中可用服务的集合。每个服务可以具有一个或多个端点「endpoint」,并且每个端点可以是以下三种类型之一:admin,internal 或 public。在生产环境中,出于安全原因,不同的终结点类型可能驻留在暴露给不同类型的用户的单独网络上。例如,公共 API 网络可能在 Internet 上可见,因此客户可以管理其云。 admin API 网络可能仅限于管理云基础架构的组织内的运营商。内部 API 网络可能仅限于包含 OpenStack 服务的主机。此外,OpenStack 支持多个区域以实现可伸缩性。为简单起见,本指南将管理网络用于所有端点类型和默认端点、RegionOne 区域。身份服务中创建的区域,服务和端点共同构成了部署的服务目录。部署中的每个OpenStack 服务都需要一个服务条目,并在认证服务中存储相应的端点。这可以在安装和配置了身份服务之后完成。
身份服务包含以下组件:
服务器 集中式服务器使用 RESTful 接口提供身份验证和授权服务。
驱动 驱动程序或服务后端已集成到集中式服务器。它们用于访问 OpenStack 外部存储库中的身份信息,并且可能已经存在于部署 OpenStack 的基础架构中(例如,SQL 数据库或 LDAP 服务器)。
模组 中间件模块在使用身份服务的 OpenStack 组件的地址空间中运行。这些模块拦截服务请求,提取用户凭据,然后将它们发送到集中式服务器进行授权。中间件模块和 OpenStack 组件之间的集成使用 Python Web 服务器网关接口。
MariaDB 创建用户
- 创建数据库
CREATE DATABASE keystone;
- 授予权限
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \
IDENTIFIED BY 'KEYSTONE_DBPASS';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \
IDENTIFIED BY 'KEYSTONE_DBPASS';
flush privileges;
安装 keystone
- 安装软件包
apt install keystone
- 修改配置文件
/etc/keystone/keystone.conf
添加数据库访问、token 提供者
vim /etc/keystone/keystone.conf
[database]
# ...
connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@192.168.2.11/keystone
[token]
# ...
provider = fernet
- 初始化 MariaDB 数据库
su -s /bin/sh -c "keystone-manage db_sync" keystone
进入数据库查看是否完成数据库初始化
MariaDB [keystone]> show tables;
+------------------------------------+
| Tables_in_keystone |
+------------------------------------+
| access_rule |
| access_token |
| application_credential |
| application_credential_access_rule |
| application_credential_role |
| assignment |
| config_register |
| consumer |
| credential |
| endpoint |
| endpoint_group |
| expiring_user_group_membership |
| federated_user |
| federation_protocol |
| group |
| id_mapping |
| identity_provider |
| idp_remote_ids |
| implied_role |
| limit |
| local_user |
| mapping |
| migrate_version |
| nonlocal_user |
| password |
| policy |
| policy_association |
| project |
| project_endpoint |
| project_endpoint_group |
| project_option |
| project_tag |
| region |
| registered_limit |
| request_token |
| revocation_event |
| role |
| role_option |
| sensitive_config |
| service |
| service_provider |
| system_assignment |
| token |
| trust |
| trust_role |
| user |
| user_group_membership |
| user_option |
| whitelisted_config |
+------------------------------------+
49 rows in set (0.000 sec)
- 初始化 fernet 密钥存储库
在 --keystone-user
和 --keystone-group
标志用于指定将用于运行 keystone 操作系统的用户/组。提供这些是为了允许在另一个操作系统用户/组下运行 keystone。在下面的示例中,我们称为 user&group keystone。keystone 用户和组在安装 keystone 软件包时就自动创建了。
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
- 初始化 keystone 服务
ADMIN_PASS = ADMIN
keystone-manage bootstrap --bootstrap-password ADMIN_PASS \
--bootstrap-admin-url http://192.168.2.11:5000/v3/ \
--bootstrap-internal-url http://192.168.2.11:5000/v3/ \
--bootstrap-public-url http://192.168.2.11:5000/v3/ \
--bootstrap-region-id RegionOne
- 配置 Apache HTTP 服务器
编辑 /etc/apache2/apache2.conf
文件并配置 ServerName
选项以引用控制器节点
vim /etc/apache2/apache2.conf
第 70 行 新增
ServerName 192.168.2.11
- 重启 http 服务
systemctl restart apache2.service
- 创建环境变量来配置管理帐户
这里的参数来自第 5. 初始化 keystone 服务
时配置的参数
cd ~
vim admin.profile
$ export OS_USERNAME=admin
$ export OS_PASSWORD=ADMIN
$ export OS_PROJECT_NAME=admin
$ export OS_USER_DOMAIN_NAME=Default
$ export OS_PROJECT_DOMAIN_NAME=Default
$ export OS_AUTH_URL=http://192.168.2.11:5000/v3
$ export OS_IDENTITY_API_VERSION=3
里程碑
查看已有的 keystone 信息
- 生效环境变量
source admin.profile
- 查看 初始化 keystone 时创建的 默认信息
root@node1:~# openstack domain list
+---------+---------+---------+--------------------+
| ID | Name | Enabled | Description |
+---------+---------+---------+--------------------+
| default | Default | True | The default domain |
+---------+---------+---------+--------------------+
root@node1:~# openstack user list
+----------------------------------+-------+
| ID | Name |
+----------------------------------+-------+
| 3c1af2df3a2747319e3789b0d98789b6 | admin |
+----------------------------------+-------+
root@node1:~# openstack project list
+----------------------------------+-------+
| ID | Name |
+----------------------------------+-------+
| b78ed759bf184f21bb0a1461d5d9607d | admin |
+----------------------------------+-------+
创建域,项目,用户和角色
身份服务为每个 OpenStack 服务提供身份验证服务。身份验证服务使用域,项目,用户和角色的组合。
- 创建域 「Region」
在 初始化 keystone 时已经创建了「Default」域,创建新域「example」可使用如下命令
openstack domain create --description "An Example Domain" example
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | An Example Domain |
| enabled | True |
| id | 2d949dc2d33c4c649c6cff24dccb6ff1 |
| name | example |
| options | {} |
| tags | [] |
+-------------+----------------------------------+
- 创建服务「Service」
在 OpenStack 中,组件提供的服务也是需要注册到 keystone 上的,可使用如下命令创建新的服务「service」,并将服务放置于 1. 创建域 「Region」
创建的「example」域内。
openstack project create --domain default --description "Service Project" service
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Service Project |
| domain_id | default |
| enabled | True |
| id | 76df0ebcc4e241f18e30c8ee9229e37e |
| is_domain | False |
| name | service |
| options | {} |
| parent_id | default |
| tags | [] |
+-------------+----------------------------------+
- 创建普通项目、普通用户、普通角色
openstack project create --domain default --description "Demo Project" myproject
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Demo Project |
| domain_id | default |
| enabled | True |
| id | 0b6996d9ce8d490ab7df57ff7e4180a9 |
| is_domain | False |
| name | myproject |
| options | {} |
| parent_id | default |
| tags | [] |
+-------------+----------------------------------+
openstack user create --domain default --password-prompt myuser
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | adf2c52ba7ef451db99db43a7365fcc0 |
| name | myuser |
| options | {} |
| password_expires_at | None |
+---------------------+----------------------------------+
openstack role create myrole
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | None |
| domain_id | None |
| id | 81b6d4a225fa4f7a8180595e30277747 |
| name | myrole |
| options | {} |
+-------------+----------------------------------+
- 将 角色 赋予 项目、用户
openstack role add --project myproject --user myuser myrole
该命令不提供任何输出
验证操作
- 取消设置临时变量
OS_AUTH_URL
和OS_PASSWORD
环境变量
先查看已有的环境变量
echo $OS_AUTH_URL
echo $OS_PASSWORD
取消环境变量
unset OS_AUTH_URL OS_PASSWORD
再查看环境变量是否被取消成功
echo $OS_AUTH_URL
echo $OS_PASSWORD
- 以 admin 用户身份请求身份验证令牌
openstack --os-auth-url http://192.168.2.11:5000/v3 \
--os-project-domain-name Default --os-user-domain-name Default \
--os-project-name admin --os-username admin token issue
手工输入密码 ADMIN
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| expires | 2021-05-08T04:33:29+0000 |
| id | gAAAAABglgaJne9RksPFIDM0WlpBIT_Y2Y8cKevLynELsQOr5pV2bxVVG4lu8USDydpIGmVYrP0FeDzUPkKanJUZomBJugxNdtKhguf4xPecLnETz0lSDvoQHBOK10_5NLUceMMw6SqUOe3ckARfC_9KeTQ8t9teM1cn7iUrSM5zgaNh-jpHDCY |
| project_id | b78ed759bf184f21bb0a1461d5d9607d |
| user_id | 3c1af2df3a2747319e3789b0d98789b6 |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- 以 myuser 用户身份请求身份验证令牌
openstack --os-auth-url http://node1:5000/v3 --os-project-domain-name Default --os-user-domain-name Default --os-project-name myproject --os-username myuser token issue
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| expires | 2021-05-08T04:34:47+0000 |
| id | gAAAAABglgbXPr-VXj5k5Kzt3j-ZLBYLERJfLJ1rUuNBBxykpJzXwaOBe4Lbfajif4xC2J_7_Vh7OkheX5mwF_FqPeHghgLw-35mM3t1uUreDG5YuoqGSfvnMm0JPVLX6reU_XpIELkf-zpJRcx0v8K-GDzIFdnxXo2wfdITHaZ26TvPQZk94Q4 |
| project_id | 0b6996d9ce8d490ab7df57ff7e4180a9 |
| user_id | adf2c52ba7ef451db99db43a7365fcc0 |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
创建 OpenStack 客户端环境脚本
目的,用户快速切换客户端环境,减少输用户名、密码次数
官方:前面的部分使用了环境变量和命令选项的组合,以通过openstack客户端与Identity Service进行交互。为了提高客户端操作的效率,OpenStack支持简单的客户端环境脚本,也称为OpenRC文件。这些脚本通常包含所有客户端的通用选项,但也支持唯一选项。
- admin-openrc
ADMIN_PASS = ADMIN
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
export OS_AUTH_URL=http://node1:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
- demo-openrc
DEMO_PASS = myuser
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=myproject
export OS_USERNAME=myuser
export OS_PASSWORD=DEMO_PASS
export OS_AUTH_URL=http://node1:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
使用环境变量
. admin-openrc
使用环境变量获取令牌
openstack token issue