标签(空测试用例格分隔):OpenStack Train 系列


一:keystone 组件

1.1. keystone 概述

keystone 是 OpenStack 的身份认证服务(Identity Service),OpenStack 中的认证、鉴权、角色管理都是由 keystone 来完成,同时还提供服务目录注册功
能。keystone 是一个关键服务,同时也是安装 Openstack 时第一个要安装的服务。
配置 keystone 时,需要为用户创建合适的角色、服务、租户、用户账号和服务 API 端点。
keystone 里有相关概念需要了解。比如,租户、角色、用户。

1、租户对应项目,它有一些资源,包括用户、镜像、实例,还有仅对该项目可见的网络(如果创建网络时没有勾选“共享”) 
2、一个用户可隶属于一个或多个项目(租户),并且可以在这些项目间进行切换,部署 Openstack 至少要创建 admin 和 service 二个项目。

3、service 项目是一个特殊的项目,Openstack 自身服务都配置在 service 项目中,这样做的目的是提高安全性。

4、一个用户可以被指定成多种角色,即一个用户可能会有多个项目,在不同项目中角色不同。例如,user1 同时在 project1 和 project2 中,在 project1
的角色是 admin,在 project2 的角色是 user。 

5、openstack 中默认只有 4 种角色,包括 admin(管理云环境)、member(云环境普通用户角色)、reader、user

6、OpenStack keystone 服务托管在 httpd 上,修改配置后需要重启 httpd

1.2 安装keystone

1、登录数据库创建 keystone 数据库
MariaDB [(none)]> CREATE DATABASE keystone default character set utf8;
创建并授予 keystone 用户完全操作 keystone 权限
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'openstack';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'openstack';

/*
说明:
openstack 的账户密码设置中,不支持部分特殊符号,如“#”;openstack 本身对密码的复杂度也没有要求,可以设置为不带特殊字符的密码;若在设置
密码时,一定要包含特殊符号,openstack 仅支持如下如下特殊字符:& = $ - _ . + ! * ( )
也可以对照官方文档做实验验证,https://docs.openstack.org/install-guide/environment-security.html
*/

2、安装 Keystone 软件包并修改配置文件

# yum -y install openstack-keystone httpd mod_wsgi

/*
说明:
配置文件中能写成主机名的就改成主机名,增强配置文件通用性,便于快速部署。
*/

# cd /etc/keystone/ && mv keystone.conf keystone.conf.source && cat keystone.conf.source |grep -Ev "^#|^$" > keystone.conf && chown root:keystone keystone.conf 
# vim /etc/keystone/keystone.conf

在[database]部分添加如下内容:
connection = mysql+pymysql://keystone:openstack@controller/keystone

在[token]部分添加如下内容:
expiration = 86400

# 令牌提供者为 fernet,即生成令牌方式
provider = fernet

配置可直接参考 keystone.conf

3、同步 Identity 服务的初始数据到 keystone 库
# su -s /bin/sh -c "keystone-manage db_sync" keystone

4、初始化 Fernet 密钥存储库

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

5、执行身份引导服务(会创建 endpoint)。
# keystone-manage bootstrap --bootstrap-password openstack2022 \
--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

/*
说明:
i、OpenStack 中每一个服务都运行在一个特定的 URL 和端口上,即有一个 API 地址,通常称之为 API 服务端点,当一个客户端访问 openstack 时,keystone
身份认证服务负责向其返回 openstack 环境中各个服务的 API 地址,以便客户端使用这些服务。所以配置每一个服务时都需要向 keystone 注册其 API 地
址。Openstack 中可以定义多个区域,可以把不同的区域理解成不同的数据中心,它们有各自同不的 URL 或 IP 地址,在 Openstack 身份认证服务里,可
以为每一个区域分别定义 API。默认只有一个区域,且标识为 RegionOne。 

ii、修改--bootstrap-password 后为用户 admin 的密码,此处设置为 openstack2022

iii、执行身份引导服务后,就不需要再手功创建 identity 的 API,即以下 3 条命令不需要执行
openstack endpoint create --region RegionOne identity public http://controller:5000/v3

openstack endpoint create --region RegionOne identity internal http://controller:5000/v3

openstack endpoint create --region RegionOne identity admin http://controller:5000/v3

每个服务的 API 都会有 3 个 API 地址,公共(面向终端用户)、内部(仅在本地局域网内)、管理员(可以被有管理员权限的用户使用),通过配置在
不同的 IP 段上来实现适当隔离。
*/

image.png
image.png
image.png

image.png

1.3 修改httpd 服务的主机名

1、修改 apache 配置文件
# vi /etc/httpd/conf/httpd.conf
在 96 行增加如下内容
ServerName controller:80

image.png

2、创建软链接。
# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/

3、启动 Apache HTTP 服务并配置其随系统启动。

# systemctl enable httpd.service
# systemctl restart httpd.service
# netstat -nultp |grep 5000

4、配置管理员帐户,并创建项目、域、用户、角色

cat > /etc/keystone/admin-openrc.sh <<EOF
export OS_USERNAME=admin
export OS_PASSWORD=openstack2022
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
export OS_IMAGE_API_VERSION=2
EOF

说明:admin-openrc.sh 用来定义相关环境变量

# source admin-openrc.sh

image.png
image.png

image.png

5、创建 service 项目、user 角色、域,default 域默认已经存在
 openstack domain list

 /*
创建新域 example,(仅用于测试,可以不创建)。
# openstack domain create --description "An Example Domain" example
# openstack domain list
创建普通项目 myproject(仅用于测试,可以不创建)。
# openstack project create --domain default --description "Demo Project" myproject
创建普通用户 myuser(仅用于测试,可以不创建),密码为 myuser。 # openstack user create --domain default --password-prompt myuser
创建角色(仅用于测试,可以不创建)
# openstack role create myrole
将 myrole 角色添加到 myproject 项目和 myuser 用户(仅用于测试,可以不创建)。
# openstack role add --project myproject --user myuser myrole
# openstack role list
*/

image.png

一个租户在 OpenStack 里就是一个项目,创建用户时必须先要有租户(项目),同时还需要一个能分配给该用户的角色,这样创建的用户才有意义。
创建 service 项目(租户),service 项目将作为 OpenStack 的系统项目,所有系统服务都要加入到 service 项目中。
# openstack project create --domain default --description "Service Project" service
# openstack project list

image.png

创建 user 角色
# openstack role create user
# openstack role list

image.png

6、验证 Keystone
# source /etc/keystone/admin-openrc.sh
# openstack token issue

image.png

取消环境变量,验证

# unset OS_AUTH_URL OS_PASSWORD

使用 admin 用户,请求身份验证令牌。

# 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

输入 admin 的密码:openstack2022

image.png