在Controller节点
1、创建keystone数据库
这步要设置keystone数据库的密码,注意保存。keystone的密码默认设置为000000。
第1步,用下面的方法进入MariaDB数据库服务器。
[root@controller ~]# mysql -uroot -p000000
第2步,新建“keystone”数据库。
MariaDB [(none)]> CREATE DATABASE keystone;
第3步,给用户授权使用新建数据库。
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY '000000';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY '000000';
上面两条语句把“keystone”数据库的所有表(keystone.*)的所有权限(ALL PRIVILEGES)授予本地主机(’localhost’ )及任意远程主机(’%’)中名为“keystone”的用户,验证密码为“000000”。这里的“keystone”用户是安装Keystone组件时自动生成的系统用户。
MariaDB [(none)]> CREATE DATABASE keystone;
Query OK, 1 row affected (0.001 sec)
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY '000000';
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY '000000';
Query OK, 0 rows affected (0.000 sec)
MariaDB [(none)]> exit
2、安装Keystone软件包
[root@controller ~]# yum install -y openstack-keystone httpd mod_wsgi
Keystone实际是运行在Web服务器上的一款支持Web服务器网关接口(Web Server Gateway Interface, WSGI)的Web应用。因此这里安装了3个软件:“openstack-keystone”“httpd”“mod_wsgi”。其中“openstack-keystone”是Keystone的软件包;“httpd”是阿帕奇(Apache)Web服务器的软件包名;“mod_wsgi”是使Web服务器支持WSGI的插件。
3、修改Keystone配置文件
(1)打开配置文件
[root@controller ~]# vi /etc/keystone/keystone.conf
(2)编辑配置文件
第1步,修改“[database]”部分实现与数据库连接。
connection = mysql+pymysql://keystone:000000@controller/keystone
以上代码配置数据库连接信息,用“keystone”用户和密码“000000”去连接“controller”主机中的名为“keystone”的数据库。
第2步,修改“[token]”部分配置令牌的加密方式。
provider = fernet
“Fernet Token”是一种令牌加密格式。一个“Fernet Token”是一个很长的字符串,在这个字符串中存储了被加密的用户信息、权限信息、过期时间信息等。
4、初始化Keystone的数据库
Keystone安装文件提供了数据库的基础表数据,此时还没有将数据导入“keystone”数据库中,需要手动将数据同步导入数据库中。
[root@controller ~]# su keystone -s /bin/sh -c "keystone-manage db_sync"
“su keystone”:su命令用于用户切换。这里切换到“keystone”用户,该用户已经拥有对“keystone”数据库的管理权限。
“-s /bin/sh”:-s为su命令的选项,指定用什么编译器(Shell)来执行命令,“/bin/sh”就是指定的编译器。
“-c”:su命令的选项,在其后引号内的是具体执行的命令。
“keystone-manage db_sync”实现了数据同步到数据库。
keystone-manage命令是Keystone服务的管理工具。
它的基本使用方法如下:
keystone-manage [选项] <操作>
操作 | 功能说明 |
db_sync | 同步数据库 |
fernet_setup | 创建一个Fernet密钥库,用于令牌加密 |
credential_setup | 创建一个Fernet密钥库,用于凭证加密 |
bootstrap | 初始化身份认证信息,并将这些信息存入数据库 |
token_flush | 清除过期的令牌 |
5、初始化Fernet密钥库
以下命令将自动创建“/etc/keystone/fernet-keys/”目录,并在目录下生成两个Fernet密钥。这两个密钥用于加密和解密令牌。
[root@controller ~]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
以下命令将自动创建“/etc/keystone/credential-keys/”目录,并在目录下生成两个Fernet密钥。这两个密钥用于加密解密用户凭证。
[root@controller ~]# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
6、初始化用户身份认证信息
用“keystone-manage bootstrap”命令给“admin”用户初始化登录凭证,以后登录时出示凭证与此比对就可以进行认证。
[root@controller ~]# keystone-manage bootstrap --bootstrap-password 000000 --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
参数 | 功能说明 |
–bootstrap-username | 设置登录用户名,如果没有该参数则默认登录用户为“admin”用户 |
–bootstrap-password | 设置“admin”用户的密码 |
–bootstrap-admin-url | 设置“admin”用户使用的服务端点 |
–bootstrap-internal-url | 设置内部用户使用的服务端点 |
–bootstrap-public-url | 设置公共用户使用的服务端点 |
–bootstrap-region-id | 设置区域ID名称,用于配置集群服务 |
7、配置Web服务
Keystone的Web Server依托于Apache HTTP server,是httpd的虚拟主机。wsgi-keystone.conf中是VH的配置,把文件link到/etc/httpd/conf.d/才生效,关闭该虚拟主机只需删除链接。
(1)给Apache服务器增加WSGI支持
[root@controller ~]# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
该命令将“wsgi-keystone.conf”文件软链接到“/etc/httpd/conf.d/”目录。因为“/etc/httpd/conf.d/”目录下的“conf”文件都是Apache服务器的配置文件,所以这个命令让“wsgi-keystone.conf”成为Apache服务器的配置文件之一,让Apache服务器能够应用前面安装的“mod_wsgi”插件以支持WSGI协议。
(2)修改Apache服务器配置并启动Apache服务
由于Keystone本质上是一个Web应用,因此要借助Web服务器运行。Apache服务器的配置文件为“/etc/httpd/conf/httpd.conf”。
[root@controller ~]# vim /etc/httpd/conf/httpd.conf
修改“ServerName”的值为Web服务所在的域名或IP地址。
ServerName controller
(3)重启Apache服务
首先,设置开机重启Apache服务。
[root@controller ~]# systemctl enable httpd
然后,立即启动Apache服务。
[root@controller ~]# systemctl start httpd
查看apache服务器状态。
[root@controller ~]# systemctl status httpd
8、创建初始化环境变量文件
以上操作初始化了OpenStack用户“admin”的登录密码为“000000”。那么如何通过Keystone的认证登录系统呢?通过环境变量可以传送用户名及密码等凭证给Keystone,再由它进行验证。
创建初始化环境变量文件
[root@controller ~]# vim admin-login
export OS_USERNAME=admin
export OS_PASSWORD=000000
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
解释:登录OpenStack云计算平台的用户名(OS_USERNAME)是“admin”,登录密码(OS_PASSWORD)是“000000”,用户属于的域(OS_USER_DOMAIN_NAME)是“Default”,项目属于的域(OS_PROJECT_DOMAIN_NAME)是“Default”,认证地址(OS_AUTH_URL)是“http://controller:5000/v3”,Keystone版本(OS_IDENTITY_ API_VERSION)是“3”,镜像管理组件版本(OS_IMAGE_API_VERSION)是“2”。
9、导入环境变量进行验证
有了身份凭证文件后,通过如下方法将它导入环境变量中。
[root@controller ~]# source admin-login
然后可以用以下方法查看现有环境变量。
[root@controller ~]# export -p
declare -x HISTCONTROL="ignoredups"
declare -x HISTSIZE="1000"
declare -x HOME="/root"
declare -x HOSTNAME="controller"
declare -x LANG="zh_CN.UTF-8"
declare -x LESSOPEN="||/usr/bin/lesspipe.sh %s"
declare -x LOGNAME="root"
declare -x LS_COLORS="rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:"
declare -x MAIL="/var/spool/mail/root"
declare -x OLDPWD
declare -x OS_AUTH_URL="http://controller:5000/v3"
declare -x OS_IDENTITY_API_VERSION="3"
declare -x OS_IMAGE_API_VERSION="2"
declare -x OS_PASSWORD="000000"
declare -x OS_PROJECT_DOMAIN_NAME="Default"
declare -x OS_PROJECT_NAME="admin"
declare -x OS_USERNAME="admin"
declare -x OS_USER_DOMAIN_NAME="Default"
declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
declare -x PWD="/root"
declare -x SELINUX_LEVEL_REQUESTED=""
declare -x SELINUX_ROLE_REQUESTED=""
declare -x SELINUX_USE_CURRENT_RANGE=""
declare -x SHELL="/bin/bash"
declare -x SHLVL="1"
declare -x SSH_CLIENT="192.168.200.1 1534 22"
declare -x SSH_CONNECTION="192.168.200.1 1534 192.168.200.10 22"
declare -x SSH_TTY="/dev/pts/0"
declare -x TERM="xterm"
declare -x USER="root"
declare -x XDG_RUNTIME_DIR="/run/user/0"
declare -x XDG_SESSION_ID="1"
10、创建项目
OpenStack云计算平台的所有对组件的操作都需要Keystone认证后才能进行,所以如果用OpenStack的管理命令openstack能正常执行云计算平台管理操作,则说明Keystone的服务运行正常。
用以下命令在默认域中创建一个名为“project”的项目。
[root@controller ~]# openstack project create --domain default project
命令的解释:“openstack project create”:创建一个项目。“–domain default”:该项目属于ID为“default”的域。“project”:新项目的名称。
用以下代码查看所有域。
[root@controller ~]# openstack domain list
+---------+---------+---------+--------------------+
| ID | Name | Enabled | Description |
+---------+---------+---------+--------------------+
| default | Default | True | The default domain |
+---------+---------+---------+--------------------+
用以下代码查看现有的项目列表。
[root@controller ~]# openstack project list
+----------------------------------+---------+
| ID | Name |
+----------------------------------+---------+
| 569398428f8741c48b0ddd228f42770e | project |
| c80af2a6b06842c4b2f4598f97e67828 | admin |
+----------------------------------+---------+
11、创建角色
为OpenStack云计算平台创建一个名为“user”的角色。
[root@controller ~]# openstack role create user
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | None |
| domain_id | None |
| id | fa434b94ee164d3598f1bf6610017c67 |
| name | user |
| options | {} |
+-------------+----------------------------------+
查看OpenStack云计算平台现有的角色列表。
[root@controller ~]# openstack role list
+----------------------------------+--------+
| ID | Name |
+----------------------------------+--------+
| 4be27489541e45db8eb637e84cb5f9a6 | reader |
| c3c55bc9646946dc8e8dd0fae87a240f | admin |
| da8432f0c64a4045876221103cee8191 | user |
| e0eeafb633734eb7a7b01da5d7da6bc5 | member |
+----------------------------------+--------+
查看openstack用户列表。
[root@controller ~]# openstack user list
+----------------------------------+-------+
| ID | Name |
+----------------------------------+-------+
| 90beae1fcf5140dca6606c3c0bd1ccb1 | admin |
+----------------------------------+-------+
12、验证Keystone
1、使临时鉴权身份鉴权变量失效
[root@controller ~]# unset OS_AUTH_URL OS_PASSWORD
2、以admin用户身份向Keystone申请认证token,输入admin用户密码验证通过
[root@controller ~]# 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
Password:
Password:
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| expires | 2022-10-06T15:00:59+0000 |
| id | gAAAAABjPt-bt6TCjDdq0D7quht4Z5xzIftqgvqOSbY5PcG7OANiIn0hojHnA4Zo772xX9Xx7ZWUXd6reIUV7HN-DMJ024R0JarcWQVxPAnHf4QuzBQ2CH5V79GU6PqnuLjA-ho55qMaXyKy8tEfW6Uesn0JMuzh2EhVXfWbrZ8bxB7zCu6P4SQ |
| project_id | c80af2a6b06842c4b2f4598f97e67828 |
| user_id | 90beae1fcf5140dca6606c3c0bd1ccb1 |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+