3.2 KeyStone服务部署

系列 - OpenStack云平台部署
摘要
在 OpenStack 的各个服务中,KeyStone 扮演着核心的身份认证角色。本节我们将部署 KeyStone 服务,为整个云平台建立起统一的“通行证”机制。

  • 虚拟机1:控制节点
    • 操作系统: CentOS 7.9
    • 配置: 4 CPU,40GB+ 硬盘,8GB 内存
    • 角色: 控制节点、网络节点和对象存储节点
  • 虚拟机2:计算节点
    • 操作系统: CentOS 7.9
    • 配置: 2 CPU,40GB+ 硬盘,4GB 内存
    • 角色: 计算节点、网络节点、对象存储和块存储节点

假如名为 Alice 的用户想要在 OpenStack 平台上创建虚拟机,她需要先向 KeyStone 发送账号和密码进行 身份验证。KeyStone 通过验证后,会给用户 Alice 返回 证书(令牌/Token) 和访问具体服务的 端点(Endpoint),接下来用户携带证书通过端点去访问目标服务……

提示:什么是 Endpoint?
端点(Endpoint)本质上就是一个网络访问地址(URL)。在 OpenStack 中,不同的服务(如计算、镜像等)都会在 KeyStone 中注册自己的 Endpoint,方便其他组件或用户找到并调用它们。

在安装配置 KeyStone 前,需要先在 MariaDB 中为其创建专属数据库,并进行相应的权限配置。

连接到数据库服务器:

以 root 用户身份连接,输入在环境准备阶段设置的 MariaDB 密码。

bash

mysql -u root -p

创建 keystone 数据库:

sql

CREATE DATABASE keystone;

为 keystone 数据库授权:

执行以下命令,授予 keystone 用户相关权限:

sql

GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'keystone';

命令解释
  1. GRANT ALL PRIVILEGES

    • 意思是:授予所有权限。
    • 也就是赋予增、删、改、查、建表、删表等几乎所有的操作能力。
  2. ON keystone.*

    • 意思是:把权限作用在哪个地方?
    • 第一个 keystone:代表是名为 keystone数据库
    • .*:代表这个数据库里的所有表
  3. TO 'keystone'@'%'

    • 意思是:把权限给谁?
    • 第二个 'keystone':代表数据库系统的用户名
    • @'%':这是一个安全限制,意思是“该用户能从所有网络位置访问”。
  4. IDENTIFIED BY 'keystone'

    • 意思是:验证身份的密码是什么?
    • 第三个 'keystone':代表这个用户的密码。(在实验环境中,为了好记,通常把密码设置得和组件名字一样;在企业生产环境,这里会是一串复杂的乱码密码)。
    • 特殊动作:在 MariaDB 中,如果这个用户之前不存在,加上这条 IDENTIFIED BY 语句,系统会自动创建这个用户并同时设置好密码

退出数据库:

sql

exit

安装 keystone 相关软件包:

bash

yum install openstack-keystone httpd mod_wsgi -y

修改配置文件 /etc/keystone/keystone.conf

编辑配置文件,在相应的段落中添加或修改内容以完成配置。

[database] 标签下,配置数据库访问路径:

ini

[database]
# ...
connection = mysql+pymysql://keystone:keystone@controller/keystone

[token] 标签下,配置 Fernet 认证的令牌提供者:

ini

[token]
# ...
provider = fernet

同步认证服务数据库:

初始化 KeyStone 数据库表结构:

bash

su -s /bin/sh -c "keystone-manage db_sync" keystone

验证数据库表:

检查同步是否成功,如果在返回的结果中看到了相应的表,则说明同步完成。

bash

mysql -u keystone -p keystone -e "use keystone; show tables;"

相关内容