【版本】
当前版本号v20240314
版本 | 修改说明 |
---|---|
v20240314 | 新增日志查看说明和命令结果展示 |
v20240310 | 新增参考配置 |
v20230701 | 文档基于 RockyLinux8 和 Openstack Yoga 开发 |
任务3 - 控制节点安装 Keystone 认证服务
【实验目的】
- 掌握搭建 Openstack Keystone 组件
- 熟练掌握 Linux 常用命令
【实验环境】
- 内存:至少4G
- 硬盘:至少空余40G
- 操作系统: 64位 Windows系统。
【实验资源】
- FinalShell
- RockyLinux 8 系统镜像
- VirtualBox
【实验步骤】
- 使用 root 用户登录控制节点(Controller)。输出 Hostname ,确认所在节点是控制节点。
hostname
结果:
controller+你的学号后3位
注意以下步骤在控制节点(Controller)上执行!
创建 Keystone 数据库
- 连接 MariaDB,进入数据库命令行,输入密码
123456
。
mysql -u root -p
- 【数据库命令行】创建一个名为
keystone
的库。
CREATE DATABASE keystone;
- 【数据库命令行】创建名为 keystone,密码为
KEYSTONE_DBPASS
的数据库用户,并授权访问 keystone 库。
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \
IDENTIFIED BY 'KEYSTONE_DBPASS';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \
IDENTIFIED BY 'KEYSTONE_DBPASS';
- 查看
keystone
库,此时库中没有任何表(Table)。
use keystone;
show tables;
- 【数据库命令行】输入
exit;
退出数据库命令行。
exit;
Keystone 安装和配置
- 安装 Keystone 相关软件包。
dnf install /opt/repo/openstack-yoga/python3-sqlalchemy-1.4.31-1.el8.x86_64.rpm -y
dnf install openstack-keystone httpd python3-mod_wsgi -y
- 备份 Keystone 的配置文件keystone.conf 为 keystone.conf.bak。注意这个命令不要重复执行,否则会覆盖原有备份配置文件。
cp -n /etc/keystone/keystone.conf{,.bak}
- 清除 Keystone 配置文件的注释。
grep -Ev '^$|#' /etc/keystone/keystone.conf.bak >/etc/keystone/keystone.conf
- 安装
openstack-utils
dnf install openstack-utils -y
- 配置 Keystone 的admin_token,数据库连接,token provider。注意替换你的学号。
openstack-config --set /etc/keystone/keystone.conf DEFAULT admin_token ADMIN_TOKEN
openstack-config --set /etc/keystone/keystone.conf database connection mysql+pymysql://keystone:KEYSTONE_DBPASS@controller+你学号后3位/keystone
openstack-config --set /etc/keystone/keystone.conf token provider fernet
可以用vim 打开
/etc/keystone/keystone.conf
配置文件与/etc/keystone/keystone.conf 参考配置进行比对确认。
openstack-config --set
命令可以帮助我们快速写入一行配置值到指定的配置文件。他的命令用法是
openstack-config --set 配置文件 分组 参数 值
例如执行完上面的命令,我们打开
/etc/keystone/keystone.conf
文件可以看到第一句命令执行完写入的配置如下。
- 执行同步数据库
cd /etc/keystone/
su -s /bin/sh -c "keystone-manage db_sync" keystone
cd /etc/keystone/
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
- 创建 keystone 认证服务(Identify Service),和 API 端点(endpoint),请注意替换为你的学号。
keystone-manage bootstrap --bootstrap-password ADMIN_PASS \
--bootstrap-admin-url http://controller+你的学号后3位:5000/v3/ \
--bootstrap-internal-url http://controller+你的学号后3位:5000/v3/ \
--bootstrap-public-url http://controller+你的学号后3位:5000/v3/ \
--bootstrap-region-id RegionOne
- 追加 Apache (httpd)的配置,注意替换你的学号。这里主要是增加ServerName的配置。
echo "ServerName controller+你学号后3位" >>/etc/httpd/conf/httpd.conf
- 把keystone的配置链接到httpd的配置目录下,让keystone API 生效。
ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
- 启动Apache(httpd),并设置为开机启动。
systemctl enable httpd.service
systemctl start httpd.service
- 查看服务的状态是否为
active
。
systemctl status httpd.service
如果不是active请检查
/etc/httpd/conf/httpd.conf
配置是否有误。
Keystone 环境变量设置
- 设置 Keystone 的相关环境变量。注意替换为你的学号。
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://controller+你的学号后3位:5000/v3
export OS_IDENTITY_API_VERSION=3
- 查询刚创建的用户的ID
openstack user list
正常会返回类似以下内容
+----------------------------------+-------+
| ID | Name |
+----------------------------------+-------+
| 用户ID | admin |
+----------------------------------+-------+
- 复制上文的用户ID,关联项目
admin
,用户admin
,角色admin
。
openstack role add --project admin --user 替换为用户ID admin
控制节点验证步骤
- 移除上面步骤19设置的部分环境变量。
unset OS_AUTH_URL
unset OS_PASSWORD
- 创建一个设置环境变量的脚本,输入以下内容,注意替换为你的学号。这个环境变量脚本主要方便我们预设一些全局设置,用来测试 keystone 能否正常运行。
vim /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://controller+你的学号后3位:5000/v3
export OS_IDENTITY_API_VERSION=3
- 执行脚本,设置环境变量。
source /etc/keystone/admin-openrc
- 查看token,可以多运行几次,查看 token id 是否更新。
openstack token issue
类似结果:
+------------+-------------------------------------------------+
| Field | Value |
+------------+-------------------------------------------------+
| expires | 2021-03-24T08:27:30.000000Z |
| id | gAAAAABgWunifA_DeD3mcJMerIIFLqXy7tajYuAmAVvM1pM |
| | 9yTeRaM5gXVDImlqbrivC1IwtpxtJR2Gq6EHMJ1iSZ10iRa |
| | dJzqZWYjoWLha-bSlbqb3y0Iyzo- |
| | liAC02tVsiv6ZPge4KXndvwxTk79_dkw-- |
| | zvXUlKmM5SY68n2eQZttddTcPSQ |
| project_id | 70667e2a19c640b796c9e2de6571a33c |
| user_id | 5b74a6845f264ae9912b78d4a32f5f73 |
+------------+-------------------------------------------------+
- 清除环境变量,使用 openstack 命令验证是否能够获取 Token。注意替换学号。
unset OS_PROJECT_DOMAIN_NAME
unset OS_USER_DOMAIN_NAME
unset OS_PROJECT_NAME
unset OS_USERNAME
unset OS_PASSWORD
unset OS_AUTH_URL
unset OS_IDENTITY_API_VERSION
unset OS_IMAGE_API_VERSION
openstack --os-auth-url http://controller+你的学号后3位:5000/v3 \
--os-project-domain-name default --os-user-domain-name default \
--os-project-name admin --os-username admin --os-auth-type password \
--os-password ADMIN_PASS token issue
类似结果:
+------------+-------------------------------------------------+
| Field | Value |
+------------+-------------------------------------------------+
| expires | 2021-03-24T08:27:30.000000Z |
| id | gAAAAABgWunifA_DeD3mcJMerIIFLqXy7tajYuAmAVvM1pM |
| | 9yTeRaM5gXVDImlqbrivC1IwtpxtJR2Gq6EHMJ1iSZ10iRa |
| | dJzqZWYjoWLha-bSlbqb3y0Iyzo- |
| | liAC02tVsiv6ZPge4KXndvwxTk79_dkw-- |
| | zvXUlKmM5SY68n2eQZttddTcPSQ |
| project_id | 70667e2a19c640b796c9e2de6571a33c |
| user_id | 5b74a6845f264ae9912b78d4a32f5f73 |
+------------+-------------------------------------------------+
- 把常用 OpenStack 环境变量写入每次登录自动执行脚本。注意替换学号。
echo '#!/usr/bin/env bash
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://controller+你的学号后3位:5000/v3
export OS_IDENTITY_API_VERSION=3'>>/etc/profile.d/admin-openrc.sh
注意:在实际生产环境中,不要把敏感信息(用户名、密码等)写入脚本,容易导致泄露。
- 查询 keystone identity service,表里应该只有一行记录。
source /etc/keystone/admin-openrc
openstack service list |grep -E "ID|keystone"
类似结果:
| ID | Name | Type |
| 27c6ff83af90458dabf2fc19ab02efda | keystone | identity |
- 查询 keystone endpoint,表里应该有3行记录。
source /etc/keystone/admin-openrc
openstack endpoint list |grep -E "ID|keystone"
类似结果:
| ID | Region | Service Name | Service Type | Enabled | Interface | URL |
| 3b4738ec31644bdb90bf8f8515eac596 | RegionOne | keystone | identity | True | internal | http://controller999:5000/v3 |
| 82fae374b1b34d08bf70c9e13695b03e | RegionOne | keystone | identity | True | public | http://controller999:5000/v3 |
| c471090d01e9471cbd2afd57fe71e7fb | RegionOne | keystone | identity | True | admin | http://controller999:5000/v3
- 在
控制节点
上查看 OpenStack 相关服务是否是 active 的状态。正常应该出现6个服务 active。
opst-proc-show.sh
- 正常应该返回以下类似结果,状态应该都是active
UNIT LOAD ACTIVE SUB DESCRIPTION
chronyd.service loaded active running NTP client/server
etcd.service loaded active running Etcd Server
httpd.service loaded active running The Apache HTTP Server
mariadb.service loaded active running MariaDB 10.3 database server
memcached.service loaded active running memcached daemon
rabbitmq-server.service loaded active running RabbitMQ broker
- 如果 Keystone 出现问题,可以点击下载此 /etc/keystone/keystone.conf 参考配置 进行对比。
【常见问题FAQ】
【后台进程(服务)说明】
如果某个后台进程(服务)无法启动,需要查看日志,可以使用以下命令,日志文件路径在下表有描述。
tail -100 日志文件
服务名称 | 日志目录 | 说明 |
---|---|---|
chronyd | /var/log/chrony | chrony是网络时间协议(NTP)的实现。它可以替代ntpd,实现服务器 |
rabbitmq-server | /var/log/rabbitmq | RabbitMQ 是高级消息队列协议(AMQP)开放标准的实现,常用于服务器之间的消息通讯,Openstack 使用 RabbitMQ 作为底层组件来实现不同模块之间的远程调用(RPC)。 |
mariadb | /var/log/mariadb | MariaDB 是非常流行的开源关系型数据库,它能够兼容MySQL |
memcached | /var/log/messages | Memcached 是一个基于内存的,开源的分布式对象缓存系统。 Openstack 会使用 Memcached 存储一些短期的对象,例如令牌等。 |
httpd | /var/log/httpd | Apache Web 服务器,对外提供 HTTP 等协议的 Web 访问服务 |
思考和探索
- Keystone 在 OpenStack 当中主要承担什么作用?