OpenStack Wallaby 部署2 身份认证 Keystone

👌 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 创建用户

  1. 创建数据库
CREATE DATABASE keystone;
  1. 授予权限
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

  1. 安装软件包
apt install keystone
  1. 修改配置文件 /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
  1. 初始化 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)
  1. 初始化 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
  1. 初始化 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
  1. 配置 Apache HTTP 服务器

编辑 /etc/apache2/apache2.conf 文件并配置 ServerName 选项以引用控制器节点

vim /etc/apache2/apache2.conf

第 70 行 新增
ServerName 192.168.2.11
  1. 重启 http 服务
systemctl restart apache2.service
  1. 创建环境变量来配置管理帐户

这里的参数来自第 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 信息

  1. 生效环境变量
source admin.profile
  1. 查看 初始化 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 服务提供身份验证服务。身份验证服务使用域,项目,用户和角色的组合。

  1. 创建域 「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        | []                               |
+-------------+----------------------------------+
  1. 创建服务「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        | []                               |
+-------------+----------------------------------+
  1. 创建普通项目、普通用户、普通角色
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     | {}                               |
+-------------+----------------------------------+

  1. 将 角色 赋予 项目、用户
openstack role add --project myproject --user myuser myrole

该命令不提供任何输出

验证操作

  1. 取消设置临时变量 OS_AUTH_URLOS_PASSWORD 环境变量
先查看已有的环境变量
echo $OS_AUTH_URL
echo $OS_PASSWORD
取消环境变量
unset OS_AUTH_URL OS_PASSWORD
再查看环境变量是否被取消成功
echo $OS_AUTH_URL
echo $OS_PASSWORD
  1. 以 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                                                                                                                                                        |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  1. 以 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