前一篇: 构建基于openEuler2209的OpenStack云平台(一)
2 安装和配置Identity服务
OpenStack Identity(代码为keystone)服务为管理身份验证、授权和服务目录提供了单点集成。通过Identity API,提供API客户端身份验证、服务发现和分布式多租户授权。
出于可扩展性的目的,还需要同时配置部署Fernet令牌和Apache HTTP服务器来处理请求。
Identity服务通常是用户与OpenStack交互的第一个服务。一旦经过认证,用户就可以使用其身份访问其他OpenStack服务。同样,其他OpenStack服务利用Identity服务来确保用户是他们所说的人,并发现其他服务在部署中的位置。
2.1 创建keystone数据库并授予权限
在控制节点,使用root账号连接到mariadb数据库,创建keystone 数据库,然后授权用户keystone访问。其中的KEYSTONE_DBPASS为keystone用户访问keystone数据库的密码。
[root@xgk-ctl ~]# mysql -u root -p
Enter password: #此处输入前面设置的数据库root用户密码
CREATE DATABASE keystone;
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;
exit;
2.2 安装软件包
[root@xgk-ctl ~]# dnf -y install openstack-keystone httpd mod_wsgi
2.3 配置/etc/keystone/keystone.conf文件
[root@xgk-ctl ~]# cp -a /etc/keystone/keystone.conf{,.bak}
[root@xgk-ctl ~]# grep -Ev '^$|#' /etc/keystone/keystone.conf.bak > /etc/keystone/keystone.conf
[root@xgk-ctl ~]# vim /etc/keystone/keystone.conf
[database]
……此处省略文件原有内容……
connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@xgk-ctl/keystone
#pymysql://后面的内容依次表示数据库用户名:密码@主机名/数据库名
……此处省略文件原有内容……
[token]
provider = fernet
……此处省略文件原有内容……
2.4 同步数据库
[root@xgk-ctl ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone
2.5 初始化Fernet密钥存储库
[root@xgk-ctl ~]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
[root@xgk-ctl ~]# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
注:--keystone-user和keystone --keystone-group标志用于指定运行keystone的用户/组。
2.6 启动服务
[root@xgk-ctl ~]# keystone-manage bootstrap --bootstrap-password ADMIN_PASS \
--bootstrap-admin-url http://xgk-ctl:5000/v3/ \
--bootstrap-internal-url http://xgk-ctl:5000/v3/ \
--bootstrap-public-url http://xgk-ctl:5000/v3/ \
--bootstrap-region-id RegionOne
注:ADMIN_PASS为管理员admin的密码
2.7 配置Apache服务器
2.7.1 配置/etc/httpd/conf/httpd.conf 文件
在配置文件末尾追加一行内容:ServerName xgk-ctl
或者找到ServerName选项,删除前面的注释,并将后面的值改为控制节点的主机名。
[root@xgk-ctl ~]# echo "ServerName xgk-ctl" >> /etc/httpd/conf/httpd.conf
2.7.2 创建软链接
创建一个指向/usr/share/keystone/wsgi-keystone.conf的软链接
[root@xgk-ctl ~]# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
2.7.3 启动httpd服务,并设置为开机自启动
[root@xgk-ctl ~]# systemctl enable httpd.service
[root@xgk-ctl ~]# systemctl start httpd.service
2.8 创建domain, projects, users和roles
Identity服务为每个OpenStack服务提供身份验证服务。身份验证服务使用域(domain)、项目(project)、用户(user)和角色(role)的组合。
2.8.1 创建环境变量配置
[root@xgk-ctl ~]# cat << EOF >> /etc/keystone/admin-openrc
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://xgk-ctl:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
EOF
2.8.2 安装软件包
创建domain, projects, users和roles必须首先安装python3-openstackclient软件包
[root@xgk-ctl ~]# dnf -y install python3-openstackclient
2.8.3 创建域
实际上,在启动Identity服务时已创建了一个default域,这里以创建一个example域为例演示创建域的正式方法。
[root@xgk-ctl ~]# source /etc/keystone/admin-openrc
[root@xgk-ctl ~]# openstack domain create --description "An Example Domain" example
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | An Example Domain |
| enabled | True |
| id | a0f1abb3c02448719c1079323d3ac64e |
| name | example |
| options | {} |
| tags | [] |
+-------------+----------------------------------+
2.8.4 创建项目
在default域中创建一个名为service的project。
[root@xgk-ctl ~]# openstack project create --domain default --description "Service Project" service
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Service Project |
| domain_id | default |
| enabled | True |
| id | c4d39aaab32243ca80974bab6bf711e7 |
| is_domain | False |
| name | service |
| options | {} |
| parent_id | default |
| tags | [] |
+-------------+----------------------------------+
下面创建一个非管理员项目myproject、用户myuser和角色myrole,并将角色myrol添加到myproject和myuser中。
1、Create the myproject project
[root@xgk-ctl ~]# openstack project create --domain default --description "Demo Project" myproject
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Demo Project |
| domain_id | default |
| enabled | True |
| id | a9a1630648c34468be5d540e7fd65523 |
| is_domain | False |
| name | myproject |
| options | {} |
| parent_id | default |
| tags | [] |
+-------------+----------------------------------+
2、Create the myuser user
[root@xgk-ctl ~]# openstack user create --domain default --password-prompt myuser
User Password:#此处设置myuser的密码,比如DEMO_PASS,请记住该密码,后面要用到
Repeat User Password:#重新输入密码
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | f8472742c25a43319ebbd5e0732f8214 |
| name | myuser |
| options | {} |
| password_expires_at | None |
+---------------------+----------------------------------+
3、Create the myrole role
[root@xgk-ctl ~]# openstack role create myrole
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | None |
| domain_id | None |
| id | 0c3111c9e8e848b3b60373fd8c33d0c9 |
| name | myrole |
| options | {} |
+-------------+----------------------------------+
4、将myrole角色添加到myproject项目和myuser用户
[root@xgk-ctl ~]# openstack role add --project myproject --user myuser myrole
2.9 验证操作
在安装其他服务之前,建议验证Identity服务。
在验证之前,可取消环境变量OS_AUTH_URL和OS_PASSWORD的设置值,然后请求身份验证。
[root@xgk-ctl ~]# source /etc/keystone/admin-openrc
[root@xgk-ctl ~]# unset OS_AUTH_URL OS_PASSWORD
2.9.1 管理员用户请求身份验证
[root@xgk-ctl ~]# openstack --os-auth-url http://xgk-ctl:5000/v3 \
--os-project-domain-name Default --os-user-domain-name Default \
--os-project-name admin --os-username admin token issue
Password: #此处输入管理员admin的密码
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| expires | 2022-12-16T03:12:08+0000 |
| id | gAAAAABjm9P4rqSNKf4jJRj6MNdhVr43F05doACVGkjAe2PbG-t4lKhBtb7DM-fFFftx3jfQHrZAOxhvKBUv1V_39SCntT07lwmbl1EgrDyYdf9TFxfdeiKeRWtLgqFhVf3GFZeKOYlYjZpFXnAzyVebCpl5yeoUBXKzImRJ_sL022lxP1uz2Yw |
| project_id | 83c34dc70d18476097211c384d2e435c |
| user_id | 028ab68c29e64c5f8911ee36d3d2a497 |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
2.9.2 普通用户myuser请求身份验证
[root@xgk-ctl ~]# openstack --os-auth-url http://xgk-ctl:5000/v3 \
--os-project-domain-name Default --os-user-domain-name Default \
--os-project-name myproject --os-username myuser token issue
Password: #此处输入前面创建myuser时设置的密码
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| expires | 2022-12-16T03:15:39+0000 |
| id | gAAAAABjm9TLQMfwd115ZBCVDdIFhXb7nnj2aisRcOhVhoSw0NTV58EeDJVtrsAq4q_pYyuUVIcDyJt8Q9Bmd3949drapGPtdA0MWFXaAJAjq_GeChtS2__3WWCBWBdlUhruTHgarEEtJUPoEKEh_5GJT_EZnXPj4vaGxOzK6XELkaCOYWjfcGA |
| project_id | a9a1630648c34468be5d540e7fd65523 |
| user_id | f8472742c25a43319ebbd5e0732f8214 |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
2.9.3 为非管理员用户myuser创建环境变量配置文件
[root@xgk-ctl ~]# cat << EOF >> /etc/keystone/demo-openrc
export OS_USERNAME=myuser
export OS_PASSWORD=DEMO_PASS
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=myproject
export OS_AUTH_URL=http://xgk-ctl:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
EOF