---
title: 安装Keystone
description: "Keystone为OpenStack项目中的其他服务组件提供了身份认证和授权功能。请在控制节点安装Keystone。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengcpfs/ecosystemEnable/OpenStack/kunpengopenstacktrain_04_014.html
sourcePath: /source/zh/kunpengcpfs/ecosystemEnable/OpenStack/kunpengopenstacktrain_04_014.html
indexId: d0d0050f7ceb014f05629ad92f04af6af80440d870b7149013e83118ede91a4782
---
# 安装Keystone

Keystone为OpenStack项目中的其他服务组件提供了身份认证和授权功能。请在控制节点安装Keystone。

1. 创建Keystone数据库并授权。

  a. 以root用户登录数据库。

```
mysql -u root -p
```


  b. 在数据库中，创建Keystone数据库并授权。

```
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
';
```


    将KEYSTONE_DBPASS替换为Keystone数据库用户的密码，请根据实际需求进行设置。密码中请勿包含字符“#@$”，支持特殊字符“&=- _ . + ! * ()”。

  c. 退出数据库。

```
exit
```


2. 安装软件包。

```
yum install openstack-keystone httpd mod_wsgi
```


3. 配置Keystone配置文件。

  a. 打开“/etc/keystone/keystone.conf”文件。

```
vi /etc/keystone/keystone.conf
```


  b. 按“i”进入编辑模式，添加如下内容。

```
[database]
connection = mysql+pymysql://keystone:
KEYSTONE_DBPASS
@controller/keystone
[token]
provider = fernet
```


    [database]字段的内容用于配置数据库参数。 [token]字段的内容用于配置token provider。 将KEYSTONE_DBPASS替换为Keystone数据库密码，请根据实际需求进行设置。


  c. 按“Esc”键退出编辑模式，输入:wq!，按“Enter”键保存并退出文件。
4. 同步数据库。

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


5. 初始化Fernet密钥仓库。

```
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
```


6. 启动服务。

```
keystone-manage bootstrap --bootstrap-password
ADMIN_PASSWORD
--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
```


  将ADMIN_PASSWORD替换为admin用户设置密码，请根据实际需求设置。注意该密码需和9“OS_PASSWORD=ADMIN_PASSWORD”中的ADMIN_PASSWORD密码保持一致。 密码中请勿包含字符“#@$”，支持特殊字符“&=- _ . + ! * ()”

7. 配置Apache HTTP server。

  a. 编辑“httpd.conf”文件。

```
vi /etc/httpd/conf/httpd.conf
```


  b. 按“i”进入编辑模式，添加如下内容。

```
ServerName controller
```


    配置ServerName项引用控制节点。 如果ServerName项不存在则需要创建。


  c. 按“Esc”键退出编辑模式，输入:wq!，按“Enter”键保存并退出文件。
  d. 建立软链接。

```
ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
```


8. 启动Apache HTTP服务。

```
systemctl enable httpd.service
systemctl start httpd.service
```


9. 创建环境变量的配置文件。
  1 2 3 4 5 6 7 8 9 10 cat << EOF >> ~/.admin-openrc export OS_PROJECT_DOMAIN_NAME=Default export OS_USER_DOMAIN_NAME=Default export OS_PROJECT_NAME=admin export OS_USERNAME=admin export OS_PASSWORD=ADMIN_PASSWORD export OS_AUTH_URL=http://controller:5000/v3 export OS_IDENTITY_API_VERSION=3 export OS_IMAGE_API_VERSION=2 EOF

  将ADMIN_PASSWORD替换为admin用户密码，请根据实际需求进行设置。

10. 安装OpenStack Client。

```
yum install python3-openstackclient
```


11. 依次创建domain、projects、users和roles。

  a. 导入环境变量。

```
source
~
/.admin-openrc
```


  b. 创建project service，其中domain default在keystone-manage bootstrap时已创建。

```
openstack domain create --description "An Example Domain" example
openstack project create --domain default --description "Service Project" service
```


  c. 创建（non-admin）project myproject，user myuser和role myrole，为myproject和myuser添加角色myrole。

```
openstack project create --domain default --description "Demo Project" myproject
openstack user create --domain default --password-prompt myuser
openstack role create myrole
openstack role add --project myproject --user myuser myrole
```


12. 验证Keystone是否安装成功。

  a. 取消临时环境变量OS_AUTH_URL和OS_PASSWORD。

```
source
~
/.admin-openrc
unset OS_AUTH_URL OS_PASSWORD
```


  b. 为admin用户请求token。

```
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
```


  c. 为myuser用户请求token。

```
openstack --os-auth-url http://controller:5000/v3 --os-project-domain-name Default --os-user-domain-name Default --os-project-name myproject --os-username myuser token issue
```
