(一)OpenStack ( Train版 ) Keystone 了解与部署

一、关于Keystone

        Keystone是一个 OpenStack 的 Identity 服务,提供API客户端身份验证、服务发现、以及通过OpenStack的身份API进行分布式多租户授权。

        Identity 服务提供了管理身份验证、授权和服务目录的功能,它通常是用户与 OpenStack 交互的第一个服务。通过身份验证后,用户可以使用他们的身份访问其他 OpenStack 服务。同样,其他 OpenStack 服务利用 Identity 服务来确保用户的真实身份,并发现其他服务。Identity 服务还可以与一些外部用户管理系统(如LDAP)集成。

        用户和服务可以通过使用由 Identity 服务管理的服务目录来定位其他服务。服务目录是OpenStack 部署的可用服务的集合。每个服务可以有一个或多个端点,每个端点都可以是admin、 internal 或 public 。在生产环境中,出于安全原因,不同的端点类型可能位于暴露给不同类型用户的独立网络上。例如,公共API网络可能在互联网上可见,因此客户可以管理他们的云。管理API网络可能仅限于管理云基础设施的组织内的运营商。内部API网络可能仅限于包含OpenStack服务的主机。此外,OpenStack支持多个区域以实现可扩展性。为了简单起见,本次学习将管理网络用于所有端点类型和默认区域。在 Identity 服务中创建的区域、服务和端点共同构成了部署的服务目录。部署中的每个 OpenStack 服务都需要一个服务条目,其中相应的端点存储在 Identity 服务中。这一切都可以在安装和配置 Identity 服务后完成。

二、Keystone的结构

        Keystone被组织为一组在一个或多个端点上公开的内部服务。其中许多服务是由前端以组合的方式使用的。例如,authenticate调用将使用Identity服务验证用户/项目凭据,成功后,使用token服务创建并返回令牌。

  • Identity: Identity 服务提供身份验证凭据验证以及有关用户和组的数据。在基本情况下,此数据由Identity服务管理,使其也能够处理与此数据相关的所有CRUD操作。在更复杂的情况下,数据由权威的后端服务管理。这方面的一个例子是当Identity服务充当LDAP的前端时。在这种情况下,LDAP服务器是身份数据的来源,身份服务的作用是准确地传递信息。
  • Users:用户代表单个API使用者。用户本身必须由特定域拥有,因此所有用户名都不是全局(整个系统)唯一的,而是在其所在的域内是唯一的。
  • Groups:组是表示用户集合的容器。组本身必须由特定域拥有,因此所有组名称都不是全局唯一的,而是仅对其域唯一的。
  • Resource:资源服务提供有关项目和域的数据。
  • Projects:项目是 OpenStack 中的基本单元,因为所有 OpenStack 中的资源应该由特定项目拥有。项目本身必须由特定域拥有,因此所有项目名称不是全局唯一的,而是在其域内唯一。如果项目没有指定域,那么会自动将其添加到默认域(default)。
  • Domains:域是项目、用户和组的高级容器。每个域定义一个命名空间,其中存在 API 可见的名称属性。Keystone提供了一个默认域,恰如其名为“default”。由于其容器架构,域可以用作委派的一种方式 管理OpenStack资源。域中的用户仍可访问 另一个域中的资源(如果授予了适当的权限)。域的属性如下所示:

                域:具有全局唯一性,不能有重复的域名。

                角色:在域中独一无二,不同域中可以有相同的角色名。

                用户:在域中独一无二,不同域中可以有相同的用户名。

                项目:在域中独一无二,不同域中可以有相同的项目名。

                组:在域中独一无二,不同域中可以有相同的组名。

  • Roles:角色定义用户可以获得的授权级别。角色可以在域或项目级别授予。也可以在单个用户或组级别分配角色。
  • Token:当用户的凭据(账户、密码等)通过验证,令牌服务就会验证和管理用于验证请求的令牌。
  • Catalog:目录服务提供用于端点发现的端点注册表。

Keystone包含以下几种主要数据类型:

  • 用户:具有帐户凭据,与一个或多个项目或域相关联

  • :用户的集合,与一个或多个项目或域相关联

  • 项目:OpenStack中的所有权单位,包含一个或多个用户

  • :OpenStack中的所有权单位,包含用户,组和项目

  • 角色:与许多用户-项目对关联的第一类元数据。

  • 令牌:标识与用户或用户和项目关联的凭据

  • 附加功能:与用户-项目对关联的键值元数据桶。

  • 规则:描述执行操作的一组要求。

三、Keystone安装和配置

        本章节介绍如何在控制节点上安装和配置OpenStack 的 Identity服务:Keystone。出于可扩展性的目的,此配置部署Fernet令牌和Apache HTTP服务器来处理请求。

        * 在继续操作之前,请确保已经完成《(零)OpenStack ( Train版 ) 搭建环境 》中的步骤。

        * 本章节操作全在控制节点上。

1、先决条件

        * 在安装和配置身份服务之前,必须创建数据库(《(零)OpenStack ( Train版 ) 搭建环境 》中章节四)

①、使用root用户访问数据库

# -u root  登录的用户名
# -p123    该用户的密码(此处root密码为123)
$ mysql -u root -p123

②、创建Keystone的数据库:

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

③、对 Keystone 数据库授予正确的访问权限:

给keystone用户授权,让其可以用任何IP远程连接keystone数据库并进行相应操作

# 123 为 keystone 数据库密码,远程访问时需要用户名keystone和密码123一起使用

MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY '123';
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY '123';
Query OK, 0 rows affected (0.000 sec)

④、退出数据库

# exit

2、安装和配置组件

        * 默认配置文件因软件版本不同,内容可能有所不同,所以可能需要添加部分配置和选项,而不是去修改现有的内容,此外,配置时应仅添加或修改以下所描述的行、段,其他非注释的已有内容不应修改或删除,需要保留。

①、安装所需的软件包:

# yum install openstack-keystone http mod_wsgi -y

②、编辑配置文件: /etc/keystone/keystone.conf

  • 先对配置文件进行整理:
# 先将配置文件复制一份备份
# cp /etc/keystone/keystone.conf /etc/keystone/keystone.conf.back
#
# 将配置文件里的注释全部清除掉,方便修改配置文件  将源文件里#开头的行删除
# cat /etc/keystone/keystone.conf.back | grep "^[^#]" > /etc/keystone/keystone.conf
#
# 编辑配置文件  如需查看配置文件各项的作用,可以去备份文件里查看注释说明
# vim /etc/keystone/keystone.conf
  • 配置数据库访问:[database]
[database]

#格式:connection = mysql+pymysql://用户名:密码@主机名/数据库
connection = mysql+pymysql://keystone:123@syl-ct/keystone
  • 配置令牌的提供程序Fernet:[token]
[token]

# 这个选项设定keystone的令牌种类
provider = fernet

③、填充 keystone 数据库:

# su -s /bin/sh -c "keystone-manage db_sync" keystone
# 如果出现报错:Failed to open some config files: /etc/keystone/keystone.conf,修改配置文件的访问权限即可,此错误原因是权限不足,读取不了配置文件。

④、初始化Fernet密钥存储库:

# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
# keystone-manage credential_setup  --keystone-user keystone --keystone-group keystone

⑤、启动身份服务:

        * 记住这里的管理员密码

# 这里的123是设定admin用户密码,需要设定一个合适的管理员密码,下面url里的 syl-ct 为控制节点的主机名
# keystone-manage bootstrap --bootstrap-password 123  \
     --bootstrap-admin-url http://syl-ct:5000/v3/     \
     --bootstrap-internal-url http://syl-ct:5000/v3/  \
     --bootstrap-public-url http://syl-ct:5000/v3/    \
     --bootstrap-region-id RegionOne

3、配置 Apache HTTP 服务器

        * 安全部署时应将web服务器配置为使用SSL

①、编辑配置文件: /etc/httpd/conf/httpd.conf

# 将此项设置为控制节点主机名,一般在95行左右,且被注释了,可以在vim的普通模式使用 '?ServerName' 进行查找,如果不存在,那就自行添加一条
ServerName syl-ct

②、创建指向该文件的链接:/usr/share/keystone/wsgi-keystone.conf

# ln -s /usr/share/keystone/wsgi-keystone.conf  /etc/httpd/conf.d/

4、完成安装

①、启动Apache HTTP服务并设置为开机自启:

# systemctl enable httpd.service
# systemctl start httpd.service

②、通过设置环境变量来使用admin管理员帐户:

        * 可以创建一个txt文件,将此内容写进去,使用时用 “ .  文件名”即可快捷登录OpenStack

export OS_USERNAME=admin
export OS_PASSWORD=123         # 此处密码为 2-(5) 中设置的管理员密码
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://syl-ct:5000/v3
export OS_IDENTITY_API_VERSION=3

四、创建用户

        Identity服务为每个OpenStack服务提供身份验证服务。身份验证服务使用域、项目、用户和角色的组合。

* 域、项目、用户和角色的创建需要使用具有管理员权限的用户(三、4、②),

1、域的创建

        在之前Keystone安装步骤中,默认域 “default” 就已经创建好了,以下为创建新域的方法:

#  description: 域的介绍 , syl: 域名
# openstack domain create --description "The syl domain" syl
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | The syl domain                   |
| enabled     | True                             |
| id          | b0672c986879437aa8e6045922748b0c |
| name        | syl                              |
| options     | {}                               |
| tags        | []                               |
+-------------+----------------------------------+

2、系统项目Service

        创建一个Service 项目,在OpenStack 中部署的每一个服务拥有一个用户,把这些服务用户包含在 Service 项目中:service

# --description:项目介绍,--domain:所属域 ,service:项目名
# openstack project create --description "Service Project" --domain default service
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Service Project                  |
| domain_id   | default                          |
| enabled     | True                             |
| id          | 28e9baae8004480cbde07888fd7a95a3 |
| is_domain   | False                            |
| name        | service                          |
| options     | {}                               |
| parent_id   | default                          |
| tags        | []                               |
+-------------+----------------------------------+

3、普通用户

        * 常规(非管理员)任务应该使用非特权项目和用户

  • 创建项目:sylProject

        * 当再次为此项目创建其他用户时,无需在重复此步骤,因为项目已经创建好,只需用后续步骤将用户加入项目即可

# openstack project create  --description "This is syl's Project" --domain default sylProject
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | This is syl's Project            |
| domain_id   | default                          |
| enabled     | True                             |
| id          | 0a4dec7a0a7f4fdc8187fa274299e0e2 |
| is_domain   | False                            |
| name        | sylProject                       |
| options     | {}                               |
| parent_id   | default                          |
| tags        | []                               |
+-------------+----------------------------------+
  • 用户:syl
# 注 --description不是必需的,--domain 和 --password 是必需的,123为用户密码,syl为用户名
# 用户密码有两张设置方法:
#     一、--password  xx密码, 密码明文显示并包含在命令中,直接设置,如下
# openstack user create --description "This is syl." --domain default --password 123 syl
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| description         | This is syl.                     |
| domain_id           | default                          |
| enabled             | True                             |
| id                  | 0145a9b4bc3e46b192bfb3f7aab8f46a |
| name                | syl                              |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+
#     二、--password-prompt, 在命令回车后执行时输入密码,密码并不显示
# openstack user create --description "This is syl." --domain default --password-prompt syl
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| description         | This is syl.                     |
| domain_id           | default                          |
| enabled             | True                             |
| id                  | 0145a9b4bc3e46b192bfb3f7aab8f46a |
| name                | syl                              |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+
  • 角色:sylrole
# openstack role create sylrole
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | None                             |
| domain_id   | None                             |
| id          | e0e6198ef5ce43439bde593c477cc7fe |
| name        | sylrole                          |
| options     | {}                               |
+-------------+----------------------------------+
  • 加入角色
# 注 此条命令没有输出
# openstack role add --project sylProject --user syl sylrole

* 重复以上步骤以创建其他项目和用户

五、验证

1、取消用户环境变量

# unset OS_AUTH_URL OS_PASSWORD

2、使用admin用户请求身份令牌:

# 此处的密码为 admin 用户的密码
# openstack --os-auth-url http://syl-ct: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-07-30T10:30:33+0000                                                                                                                                                                |
| id         | gAAAAABkxi25YGUhcifWFKBl3Xwzvw3K_RtTIuN6Rdec6fv1nUvmLuKvZuFBOCPxcwdv-2cf_wkNEu3qC12th7lYxmQbJa_nJGhHUn_FaedKjcdpa663NHEfdt94pqjb7_IpHp7wrlaaUu6SFAYqHnynbn7qUSugAyJSauz3HyToKBCWhs7nbsQ |
| project_id | d9132d41e61b49138d7528631164fe80                                                                                                                                                        |
| user_id    | 859caca6a4d44b67b174312ecafe50b8                                                                                                                                                        |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

3、使用第四章节创建的用户来请求身份令牌:

# openstack --os-auth-url http://syl-ct:5000/v3 --os-project-domain-name Default --os-user-domain-name Default --os-project-name sylProject --os-username syl token issue
Password: 
Password: 
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field      | Value                                                                                                                                                                                   |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| expires    | 2023-07-30T10:35:17+0000                                                                                                                                                                |
| id         | gAAAAABkxi7Vu4MoxQfIUgf_m3QD53NxzB7l8o_IxFFKO2LYlK3AKPi90SytFAK3QGZ02a7lYfaCBdHl9Td9mIa6F4uAEoXKwAkc6cZDh6Zh5UyPbFnmXICmCcRwJAsneobw4BwYZG9B6bfY3SSfnzFIzeBE4Ma7D4t0S1tZZ1Me7eFeyqVPgcI |
| project_id | 0a4dec7a0a7f4fdc8187fa274299e0e2                                                                                                                                                        |
| user_id    | 0145a9b4bc3e46b192bfb3f7aab8f46a                                                                                                                                                        |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

六、用户脚本

        前面的部分使用了环境变量和命令选项,用于通过客户端与标识服务交互。为了提高使用效率, OpenStack 支持简单的客户端环境脚本,也称为 OpenRC 文件。

1、创建脚本

        * 客户端环境脚本的路径不受限制,为方便起见,可以将脚本放置在任何位置, 但是,请确保它们是可访问的并且位于安全的环境中,因为它们包含用户、密码等敏感凭据。

①、创建管理员脚本:admin-openrc

# vim admin-openrc

export OS_USERNAME=admin                      # 用户名
export OS_PASSWORD=123                        # 用户密码
export OS_PROJECT_NAME=admin                  # 用户项目
export OS_USER_DOMAIN_NAME=Default            # 用户所属域
export OS_PROJECT_DOMAIN_NAME=Default         # 用户项目所属域
export OS_AUTH_URL=http://syl-ct:5000/v3      # 身份认证服务的端点
export OS_IDENTITY_API_VERSION=3              # 身份认证服务的版本

②、创建普通用户脚本: syl-openrc

# vim syl-openrc

export OS_USERNAME=syl                        # 用户名
export OS_PASSWORD=123                        # 用户密码
export OS_PROJECT_NAME=sylProject             # 用户项目
export OS_USER_DOMAIN_NAME=Default            # 用户所属域
export OS_PROJECT_DOMAIN_NAME=Default         # 用户项目所属域
export OS_AUTH_URL=http://syl-ct:5000/v3      # 身份认证服务的端点
export OS_IDENTITY_API_VERSION=3              # 身份认证服务的版本

2、使用脚本

        要以特定项目和用户身份登录OpenStack平台,只需运行它们的客户端环境脚本即可。

①、加载用户客户端环境脚本(用户凭据):

# 注: .和admin-openrc之间需要保留空格
# . admin-openrc

②、请求身份验证令牌

[root@syl-ct ~]# openstack token issue
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field      | Value                                                                                                                                                                                   |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| expires    | 2023-07-30T10:50:15+0000                                                                                                                                                                |
| id         | gAAAAABkxjJXu3Pwh_bRPsz-S4LvHSvjf6hBgMfgVlUdbjCmGPQK-Cs2ZPLajbUmPDunByiD8PFvjToumndAXrBQpREJ1SiZRCEGTHCobpdJKPTlBpaovInXvWhTS64h-kOkS0ll4kYALc0M4daNvGv-typy3BVgcZj0Q_25x4ZES34Px6lQRys |
| project_id | d9132d41e61b49138d7528631164fe80                                                                                                                                                        |
| user_id    | 859caca6a4d44b67b174312ecafe50b8                                                                                                                                                        |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

七、OpenStack基本命令及使用

1、OpenStack一般命令格式如下:

# 需要使用相应的权限执行命令,执行超出登录用户权限的命令时会报错 403 权限不足
# openstack (项目选项) (动作选项)  --参数 

2、用户操作的常用命令包括以下:

# 项目选项:
user
role
project
domain

# 动作选项,以下列出部分选项,不同项目的动作选项不同
create       # 创建一个指定名的该项
delete       # 删除指定名的该项
list         # 查看该项的所有内容
set          # 修改该项指定名的属性
show         # 查看该项指定名的详细属性

# 例:
# openstack user list    #查看所有用户(需管理员权限的用户)
+----------------------------------+-------+
| ID                               | Name  |
+----------------------------------+-------+
| 859caca6a4d44b67b174312ecafe50b8 | admin |
| 0145a9b4bc3e46b192bfb3f7aab8f46a | syl   |
+----------------------------------+-------+
# openstack user set --disable syl  # 修改用户syl的状态属性(禁用)
# openstack user show syl           # 查看用户syl的详细属性
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| description         | This is syl.                     |
| domain_id           | default                          |
| enabled             | False                            | #(已禁用)
| id                  | 0145a9b4bc3e46b192bfb3f7aab8f46a |
| name                | syl                              |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+

3、其他命令一般格式如上一致,在后续相关服务部署后提供使用。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值