OpenStack(T版)——身份认证(Keystone)服务介绍与安装

OpenStack(T版)——身份认证(Keystone)服务介绍与安装

Keystone介绍

Keystone官方文档介绍

OpenStack是一个云计算平台的项目,其中Keystone是一个身份认证服务组件,它提供了认证、授权和目录的服务。其他OpenStack服务组件都需要使用Keystone来验证用户的身份和权限,并且彼此之间需要相互协作。当一个OpenStack服务组件接收到用户的请求时,它会先将请求交给Keystone身份认证服务组件,以检查该用户是否有足够的权限来完成请求。因此,Keystone身份认证服务组件是整个OpenStack项目中唯一可以提供身份认证的服务组件。

Keystone身份认证服务组件包括以下几个部分

  • Server:使用一个程序接口提供用户认证和授权服务

  • Drivers:集成到服务器中,用作Openstack项目之外和已经在项目之内(SQL Database)的程序访问身份认证信息

  • Modules:运行在使用认证服务的OpenStack服务组件中,监听服务请求,提取用户凭证,发送这些信息去服务器验证并对其授权

Keystone安装

官方文档安装过程

在控制节点上安装和配置Keystone身份认证服务组件

(1)创建数据库

①在操作系统终端连接数据库

root@controller ~]# mysql -uroot -p000000

因为我们是root用户登录,所以在提升输入密码时,按回车键即可建立连接

②创建Keystone数据库

MariaDB [(none)]> CREATE DATABASE keystone;
Query OK, 1 row affected (0.001 sec)

③Keystone数据库的访问权限设置

MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY '000000';
# 将数据库"keystone"的所有权限授予用户"keystone"
# 并设置密码为"000000",允许用户从任何主机进行访问。
# GRANT [privileges] ON [database_name].[table_name] TO '[username]'@'[host]' IDENTIFIED BY '[password]';
# privileges:表示授予的权限
# database_name.table_name:表示要授权的数据库和数据表,如果是授权所有数据库和表,则使用通配符 *
# username:表示要授权的用户名。
# host:表示允许访问的主机名或 IP 地址,如果是允许所有主机,则使用通配符 %。

④退出数据库

MariaDB [(none)]> exit
Bye

(2)安装软件包

[root@controller ~]# yum install -y openstack-keystone httpd mod_wsgi

(3)修改文件/etc/keystone/keystone.conf并增加以下内容

在[database]部分,配置数据库访问:

[root@controller ~]# vim /etc/keystone/keystone.conf
#  Keystone配置文件中的数据库连接配置,用于连接MySQL数据库。
[database]
connection = mysql+pymysql://keystone:000000@controller/keystone
# connection:表示数据库连接字符串,它是一个URI格式的字符串,由以下几个部分组成:
# mysql+pymysql:表示使用MySQL数据库,并使用PyMySQL驱动程序进行访问。
# keystone:表示数据库名称。
# keystone:000000:表示数据库用户名和密码,其中用户名为 "keystone",密码为 000000。
# controller:表示MySQL数据库所在的主机名或IP地址。
# "/keystone" 表示要连接的具体数据库名称。

在[token]部分,添加如下选项

# Keystone服务的配置文件中的[token]部分
# 它指定了Keystone服务在生成和验证访问令牌时使用的令牌提供程序。
[token]
provider = fernet
# "provider = fernet" 表示Keystone服务使用fernet加密算法来加密和解密token

将Keystone身份认证服务信息同步到Keystone的数据库中

[root@controller ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone
# su:表示切换用户的命令。
# -s /bin/sh:表示切换后使用/bin/sh作为新用户的shell环境。
# -c "keystone-manage db_sync":表示执行 "keystone-manage db_sync" 命令。
# keystone:表示要切换到的用户。

测试去数据库中查看是否同步到位

[root@controller ~]# mysql -uroot -p000000
MariaDB [(none)]> use 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                     |
| 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                 |
+------------------------------------+
# 同步成功!

(4)创建令牌

# 用于生成fernet token加密所需的密钥文件和签名文件
[root@controller ~]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone

# 用于生成用于加密和签名credential的密钥文件和签名文件
[root@controller ~]# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

(5)引导身份服务

[root@controller ~]# keystone-manage bootstrap --bootstrap-password 000000  --bootstrap-admin-url http://controller:5000/v3/  --bootstrap-internal-url http://controller:5000/v3/    --bootstrap-public-url http://controller:5000/v3/   --bootstrap-region-id RegionOne



# keystone-manage:Keystone服务的管理工具。
# bootstrap:表示使用bootstrap方式来初始化Keystone服务。
# --bootstrap-password ADMIN_PASS:表示设置管理员用户 "admin" 的密码为 "000000"

# --bootstrap-admin-url http://controller:5000/v3/
# 表示设置管理员用户 "admin" 的认证地址为 "http://controller:5000/v3/"

# --bootstrap-internal-url http://controller:5000/v3/
# 表示设置Keystone服务的内部API地址为 "http://controller:5000/v3/"

# --bootstrap-public-url http://controller:5000/v3/
# 表示设置Keystone服务的公共API地址为 "http://controller:5000/v3/"。

# --bootstrap-region-id RegionOne
# 表示设置Keystone服务的region名称为 "RegionOne"。

(6)配置 Apache HTTP 服务器

  1. 编辑/etc/httpd/conf/httpd.conf文件并配置 ServerName引用controller节点的选项:
[root@controller ~]# vim /etc/httpd/conf/httpd.conf
ServerName controller:80
  1. 创建文件的链接/usr/share/keystone/wsgi-keystone.conf
[root@controller ~]# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/

(7)完成安装

启动 Apache HTTP 服务并设置开机自启

[root@controller ~]#  systemctl start httpd.service &&  systemctl enable httpd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

配置管理账号

[root@controller ~]# vim admin.sh
#!/bin/bash
export OS_USERNAME=admin
export OS_PASSWORD=000000
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
[root@controller ~]# source admin.sh 

Keystone:创建域、项目、用户和角色

(1)创建一个新的domain

[root@controller ~]# openstack domain create --description "An Example Domain" example
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | An Example Domain                |
| enabled     | True                             |
| id          | eca80f9ed6cf4c59b60d6f0f7a990a4c |
| name        | example                          |
| options     | {
    
    }                               |
| tags        | []                               |
+-------------+----------------------------------+

(2)创建service 项目

[root@controller ~]# openstack project create --domain default --description "Service Project" service
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Service Project                  |
| domain_id   | default                          |
| enabled     | True                             |
| id          | c04317f643bb4065a25d9f0dca99aa5a |
| is_domain   | False                            |
| name        | service                          |
| options     | {
    
    }                               |
| parent_id   | default                          |
| tags        | []                               |
+-------------+----------------------------------+

(3)创建一个非管理员权限project、user和role

创建项目

[root@controller ~]# openstack project create --domain default --description "Demo Project" myproject
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Demo Project                     |
| domain_id   | default                          |
| enabled     | True                             |
| id          | 8102fbf519bd4d11875c77846bca665a |
| is_domain   | False                            |
| name        | myproject                        |
| options     | {
    
    }                               |
| parent_id   | default                          |
| tags        | []                               |
+-------------+----------------------------------+

创建用户

[root@controller ~]#  openstack user create --domain default --password-prompt myuser
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | 04f0b33b14e1441882e227c8ac59d822 |
| name                | myuser                           |
| options             | {
    
    }                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+
# --password-prompt:表示使用交互式的方式来设置该user的密码。

创建角色

[root@controller ~]# openstack role create myrole
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | None                             |
| domain_id   | None                             |
| id          | 5dcb93a78f2a4d64bececbc3bd564ac5 |
| name        | myrole                           |
| options     | {
    
    }                               |
+-------------+----------------------------------+

添加myrole角色到myproject项目和myuser用户

[root@controller ~]# openstack role add --project myproject --user myuser myrole

验证操作

在安装其他服务之前验证身份服务的运行情况。

  1. 取消设置临时变量OS_AUTH_URLOS_PASSWORD 环境变量:
[root@controller ~]# unset OS_AUTH_URL OS_PASSWORD
  1. 作为admin用户,请求身份验证令牌:
[root@controller ~]# openstack --os-auth-url http://controller:5000/v3  --os-project-domain-name Default --os-user-domain-name Default  --os-project-name admin --os-username admin token issue
Password: 
Password: 
----------------------------------------------------------------------------------
| Field      | Value                                                                                                                                                                 
| expires    | 2023-06-25T16:39:58+0000                                                                                                                                                                |
| id         | gAAAAABkmF_OmgOCJFRXojWqG4eJQCJIgYX-Hlce237WCFsN5VGYd8hYARzxgalCNl7bJa3qU1cBqT3iKWVb7zSAllofUClG8T6_R-569cvdYxr1mo1qle8M_TTW9QlM1JI5J8166YD8BSl0ag-W8UvlJUBHTtfZD3xpyX5sNMmPzqVOp3d2gMU |
| project_id | 682605389bcd4a2cb2978bef7ed25f1d                                                                                                                                                        |
| user_id    | 52ba5a9d946740bb8535dcf8cd3d99d6                                           -----------------------------------------------------------------------------------               
# --os-auth-url http://controller:5000/v3
# 表示设置Keystone服务的认证地址为 "http://controller:5000/v3"。

# --os-project-domain-name Default:表示设置项目所属的domain名称为 "Default"。
# --os-user-domain-name Default表示设置用户所属的domain名称为 "Default"
# --os-project-name admin:表示设置使用的项目名称为 "admin"
# --os-username admin:表示设置使用的用户名为 "admin"
# token issue:表示使用认证Token来获取新的Token。
# Password:表示需要输入管理员用户 "admin" 的密码来进行认证。
# 执行该命令后,OpenStack客户端命令行工具将会使用给定的用户名和密码来进行认证
# 并获取管理员用户 "admin" 的认证Token。认证Token是OpenStack中的一个重要概念
# 用于验证用户的身份和授权用户访问资源和服务
  1. 作为myuser上一节中创建的用户,请求身份验证令牌:
[root@controller ~]# openstack --os-auth-url http://controller:5000/v3  --os-project-domain-name Default --os-user-domain-name Default  --os-project-name myproject --os-username myuser token issue
Password: 
Password: 
| Field      | Value                                                                                                                                                                 
| expires    | 2023-06-25T16:45:35+0000                                                                                                                                             
| id         | gAAAAABkmGEfjyFXPq3xHAanyUBec8BhL2Dz5vKPIchDmSkWJKU5nVfHoikUKZGmV0IiDMBcP3qUKPOs8keRQD0phGRbJywMzH34ZcyeJApOBhSwEwht6ZtwyGMKneMv4NesiFlzoQ5Odsl__3IkdIsCwwDpHSpt7kaCATdMYZQl4SFdCjzq6Pw          |
| project_id | 8102fbf519bd4d11875c77846bca665a                                                                                                                                     
| user_id    | 04f0b33b14e1441882e227c8ac59d822                                                                                           
# Password:表示需要输入用户 "myuser" 的密码来进行认证。
# 执行该命令后,OpenStack客户端命令行工具将会使用给定的用户名和密码来进行认证
# 并获取用户 "myuser" 在项目 "myproject" 中的认证Token。

定义OpenStack 客户端环境脚本

为了提高客户端操作的效率,OpenStack 支持简单的客户端环境脚本(也称为 OpenRC 文件)。

创建脚本

创建admin project、demo project 和用户的环境变量脚本

(1)创建并编辑admin-openrc文件并添加以下内容:

[root@controller ~]# vim admin-openrc.sh
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=000000
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
[root@controller ~]# source admin-openrc.sh 

(2)创建文件demo-openrc.sh 并添加以下内容

[root@controller ~]# vim demo-openrc.sh
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=myproject
export OS_USERNAME=myuser
export OS_PASSWORD=000000
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
[root@controller ~]# source demo-openrc.sh

验证

请求身份验证令牌:

[root@controller ~]# source admin-openrc.sh 
[root@controller ~]# openstack token issue

| Field      | Value                                                                                                                                                                                   |

| expires    | 2023-06-25T17:01:30+0000                                                                                                                                                                |
| id         | gAAAAABkmGTaGJLynJgHwYQUneKhkWQpHTJ17fAdYj9uu1RlqNyGY8b1KBzK1d18iv_2nLzb39dL9L57M4MiaDGQosauVmIR6gwyJN3Yt5F0-b9vvlNmvx0s7xQ7EPTXRX-pEdnfpOGSHt-X8JZYeEpmrPVYL2vlMOBgBu2yGOgrd_dM3Srn1A0 |
| project_id | 682605389bcd4a2cb2978bef7ed25f1d                                                                                                                                                        |
| user_id    | 52ba5a9d946740bb8535dcf8cd3d99d6                                                                                                                                     

[root@controller ~]# source demo-openrc.sh 
[root@controller ~]# openstack token issue

| Field      | Value                                                                                                                                                                                   |

| expires    | 2023-06-25T17:02:56+0000                                                                                                                                                                |
| id         | gAAAAABkmGUwoSmgAQpoJMC_T4AT9SyDM29wJDd8kcQ7b_s-_M0veGmebKoWa3cPAGlL7soq-P2yXzwmgxEmVvLvpz5eeupmkSasKpPeN7uC-NReLXzPuSDYqoWPVkaR-LaDcWfC5mQKXf2uZhQdL3tQdO3gDBJykzcqGeeRwFoYRD9tnvyCVe8 |
| project_id | 8102fbf519bd4d11875c77846bca665a                                                                                                                                                        |
| user_id    | 04f0b33b14e1441882e227c8ac59d822                                           

本文参考视频https://www.bilibili.com/video/BV1fL4y1i7NZ?p=7&vd_source=7c7cb4224e0c273f28886e581838b110

猜你喜欢

转载自blog.csdn.net/qq_52089863/article/details/131388265