Openstack Keystone安装(二)

上一篇中我们已经将Keystone的组件安装在了计算机上。

本篇我们将会对Keystone进行一些基本配置和基本使用。

准备

接下来我们暂时不需要使用root账户了,返回普通用户继续下面的操作。

我们首先在home目录下建立一个方便我们未来使用命令行的文件。

touch ~/admin-openrc.sh
chmod +x ~/admin-openrc.sh

在其中添加下面的内容:

export OS_TOKEN=49f9e01220a3a7f0c41e
export OS_URL=http://10.20.0.2:35357/v3
export OS_IDENTITY_API_VERSION=3

这里需要把TOKEN换成上一步我们生成的那个随机值。

然后保存退出,接下来运行:

. ~/admin-openrc.sh

这样这些环境变量就被导入到当前环境了。

建立服务实体和API终结点

1) 首先通过下面的命令来生成一个服务实体

openstack service create --name keystone --description \"OpenStack Identity\" identity

2) 下面我们来建立三个API终结点(Endpoint)

为什么要建三个呢,因为Openstack的API Endpoint有三种类型:public、internal和admin。

注意它们的区别,public的url使用Public IP,另外两种使用Management IP。并且admin使用35357端口,另外两种使用5000端口。

openstack endpoint create --region RegionOne identity public http://192.168.203.100:5000/v2.0
openstack endpoint create --region RegionOne identity internal http://10.20.0.2:5000/v2.0
openstack endpoint create --region RegionOne identity admin http://10.20.0.2:35357/v2.0

建立项目、用户和角色

1) 首先建立一个管理员项目以及管理员用户来进行环境设置。

我们简单的使用default这个domain。

建立admin项目

openstack project create --domain default --description \"Admin Project\" admin

接下来我们建立admin用户和admin role

openstack user create --domain default --password-prompt admin
openstack role create admin

建立过程中会要求输入密码,记住这个密码哦。

然后我们把project admin和用户admin添加进admin角色

openstack role add --project admin --user admin admin

注意:上面这个命令是没有任何输出的。

我们创建一个service project给下面的服务用:

openstack project create --domain default --description \"Service Project\" service

之后,你可以重复上面类似的过程来创建更多需要的项目、用户和角色。

2) 验证用户

我们来检查下用户设置。首先去掉我们上面导入到环境变量中的OS_TOKEN和OS_URL

unset OS_TOKEN OS_URL

然后用下面的命令尝试登录:

openstack --os-auth-url http://10.20.0.2:35357/v3 \\
  --os-project-domain-id default --os-user-domain-id default \\
  --os-project-name admin --os-username admin --os-auth-type password \\
  token issue
  

在输入密码后,如果登录成功,会打印出expires、id、project_id 和 user_id

创建Openstack客户端环境脚本

再次打开~/admin-openrc.sh文件,将里面的内容替换为刚才建立的用户

export OS_PROJECT_DOMAIN_ID=default
export OS_USER_DOMAIN_ID=default
export OS_PROJECT_NAME=admin
export OS_TENANT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=123456
export OS_AUTH_URL=http://10.20.0.2:35357/v3
export OS_IDENTITY_API_VERSION=3

同样是使用

. ~/admin-openrc.sh

命令来导入。

我们这次不像上面测试那样用那么参数来测试,直接用

openstack token issue

和前面同样打印出了结果即可。

完成安装

这样Keystone就安装完成了。

我们来建立个测试用户测试一下。

openstack project create --domain default --description \"Demo Project\" demo
openstack user create --domain default --password-prompt demo
openstack role create user
openstack role add --project demo --user demo user

这样我们就有了一个用户名为 demo ,身处 user 用户组的测试用户了。

来稍微使用一下吧

首先我们尝试用admin/123456这对用户名和密码登录。

我们需要登录成管理员模式,于是需要在scope里设置登录的scope为admin project

scope只有project或者domain两种,而且不可同时出现。这里我们domain固定为default就不存在换domain的问题了。

POST /v3/auth/tokens
Content-Type: application/json

{
    "auth": {
        "identity": {
            "methods": ["password"],
            "password": {
                "user": {
                    "name": "admin",
                    "domain": {
                        "id": "default"
                    },
                    "password": "123456"
                }
            }
        },
        "scope": {
            "project": {
                "name": "admin",
                "domain": { 
                    "id": "default"
                }
            }
        }
    }
}

在响应的Header里会有

X-Subject-Token: 5d3122af4b8549e986ce1415d2d1940f

然后我们用这个Token继续请求

GET /v3/users
X-Auth-Token: 5d3122af4b8549e986ce1415d2d1940f

这里的X-Auth-Token就是上一步获得的X-Subject-Token

这个响应如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{
"users": [
{
"name": "admin",
"links": {
"self": "http://192.168.203.100:5000/v3/users/4192b00794724d1189307441929285aa"
},
"enabled": true,
"id": "4192b00794724d1189307441929285aa",
"domain_id": "default"
},
{
"name": "demo",
"links": {
"self": "http://192.168.203.100:5000/v3/users/ffcf9a3f9a8e4e828212d3cad04034a0"
},
"enabled": true,
"id": "ffcf9a3f9a8e4e828212d3cad04034a0",
"domain_id": "default"
}
],
"links": {
"self": "http://192.168.203.100:5000/v3/users",
"previous": null,
"next": null
}
}

很明显已经拿到了Admin权限。接下来可以为所欲为了。

顺便说一下,官方文档写的真是烂,我写这个“来稍微使用一下吧”这个段落居然花掉了我4个小时。

各种400、401、403。。。然后终于看到200 OK了。。。

光是推测json格式就很累。。。。

接下来的内容在:Openstack Swift安装(一)