今天上午刚把Keystone装利索了,做了几个简单实验,因为实验室虚拟机紧张,也没拿别的机器去做测试,然后跑虚拟机的服务器又是个Windows Server,用起来不爽,自己机器和虚拟机不是一个网段的,ping都ping不同所以只能放弃别的实验了。

安装Keystone基本上很正常,按着官方的 OpenStack Installation Guide for Red Hat Enterprise Linux, CentOS, and Fedora – havana 在 CentOS6.5 上装没有遇到什么问题,唯一的问题就是设置了hostname为controller后,有几个设置操作涉及到这个controller,比如:
openstack-config --set /etc/keystone/keystone.conf \
sql connection mysql://keystone:KEYSTONE_DBPASS@controller/keystone

还有:
export OS_SERVICE_ENDPOINT=http://controller:35357/v2.0
请各位看官们注意,如果你没有设置hosts的话,这里是必然会有问题的,我开始不知道怎么图样图森破居然丧心病狂的以为OpenStack是不是如此牛X,居然能用hostname直接访问,就像loaclhost?后来才想起来localhost也是在hostname里定义的……所以不要忘了在hosts文件里加这么一行:
192.168.0.1 controller
这样后面的操作才能正常啊。当然,你也可以在操作时都用127.0.0.1,不过用controller显然更加赏心悦目啊。

然后,每跑完命令都可以在MySQL里看一看,正常的来说,走完Manual的整个keystone部分后 table status 应该是这样的:

你可以把表里面的值都翻出来看一看,与 kestone user-list 、 keystone tenant-list 什么的做个对比,可以看到 keystone 确实就是一直在搞数据库。然后假设你退出了(Verify 那一页的两个 unset),再登陆可以这样:
keystone --os-username=admin --os-password=ADMIN_PASS \
--os-auth-url=http://controller:35357/v2.0 token-get

或者:
keystone --os-username=admin --os-password=ADMIN_PASS \
--os-tenant-name=admin --os-auth-url=http://controller:35357/v2.0 token-get

不过最简单的:建立一个keystonerc,里面设置好:
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
export OS_TENANT_NAME=admin
export OS_AUTH_URL=http://controller:35357/v2.0

这样再登入只需要 source keystonerc 即可。

这时候可以说keystone已经装好了,我们可以拿keystone做些实验了,这里用curl调用API做些例子。
主要参考 http://docs.openstack.org/developer/keystone/api_curl_examples.html 。
比如看下API版本信息什么的:
curl http://controller:5000/ | python -mjson.tool

这里5000是业务端口号(默认),把结果传给 python -mjson.tool 因为返回结果是个json,用mjson.tool处理下可以让结果更好看。比如我的刚装完的机器返回结果是这样的:

再比如我们可以看看API扩展:curl http://controller:5000/v2.0/extensions | python -mjson.tool,结果很长,大家可以自己试试看。
之前的操作都不需要登陆,很简单,下面试个复杂的,需要传入数据的,比如登陆:
curl -d '{"auth":{"passwordCredentials":{"username": "admin", "password": "ADMIN_PASS"}}}' -H "Content-type: application/json" http://controller:35357/v2.0/tokens | python -mjson.tool

可以将上面的admin换成你想要登录的用户名,ADMIN_PASS换成登陆需要的密码。
返回结果:

官方的文档生成的Token都很短用的是 UUID,很短,我们出来的这么长。是不是有问题?做个试验就知道了,下面的命令可以用来测试Token是否有效:
curl -H "X-Auth-Token:6c294e19cf461ffd5d0e" http://controller:35357/v2.0/tokens/MIIC8QYJKoZIhvcNAQcCoIIC4jCCAt4CAQExCTAHBgUrDgMCGjCCAUcGCSqGSIb3DQEHAaCCATgEggE0eyJhY2Nlc3MiOiB7InRva2VuIjogeyJpc3N1ZWRfYXQiOiAiMjAxNC0wMS0xNFQwNzowOTowNi41Mjc4NzMiLCAiZXhwaXJlcyI6ICIyMDE0LTAxLTE1VDA3OjA5OjA2WiIsICJpZCI6ICJwbGFjZWhvbGRlciJ9LCAic2VydmljZUNhdGFsb2ciOiBbXSwgInVzZXIiOiB7InVzZXJuYW1lIjogImFkbWluIiwgInJvbGVzX2xpbmtzIjogW10sICJpZCI6ICI5MzY4ZTUzMWZmZTA0YzNiOWYxNmYyNGE3MmFkMDdkYiIsICJyb2xlcyI6IFtdLCAibmFtZSI6ICJhZG1pbiJ9LCAibWV0YWRhdGEiOiB7ImlzX2FkbWluIjogMCwgInJvbGVzIjogW119fX0xggGBMIIBfQIBATBcMFcxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVVbnNldDEOMAwGA1UEBwwFVW5zZXQxDjAMBgNVBAoMBVVuc2V0MRgwFgYDVQQDDA93d3cuZXhhbXBsZS5jb20CAQEwBwYFKw4DAhowDQYJKoZIhvcNAQEBBQAEggEAkKi2MGtOXFkn15RxRCb6keWBkvluTWSNNl0C5wrmdLMRU2t3VOLgQOONXvq2iRrASmkBB7P5t5fBC--efg2wGX4xGOwbzVSniPI2rhmbDp+DVOjBI2MIfmFSZMIMDHE8FizH9yW6seFl+yTgz0S0TOWlQ9USqKH+9+pQFrsNPyDCQAj+QzbYric4wPRA8E-agfIPduPQc8xODBgIZU80B0Vs7CoTxfw8pKY+u8iPEgWYwpr1y2mokB7EinVHdxTDM377FVRcUtFWC2FXykY8FxuoiK0uwMehEl45GUlD71kLng3-tpVFgXv-mBw5ByoaZYx1oYNQfBDZftGjeep7eA== | python -mjson.tool

这里有同学可能已经懵了,后边那个是刚才取出来的token,那前边的6c294e19cf461ffd5d0e是神马?官方文档里为什么是个999888777666?我已开始也有这个疑问,就Google了下,在StackOverFlow上也有这个问题,问这是个神马Magic Number?回复非常好,其实这个是之前我们用openssl随机生成的(如果你完全按文档走的话),记得在3.2节里运行过一句 ADMIN_TOKEN=$(openssl rand -hex 10) 么?就是这个ADMIN_TOKEN,你可以在 /etc/keystone/keystone.conf 里看到这个数值:

如果token是有效的话应该可以返回这个:

不过你也可以试试别的方法比如:
curl -I -H "X-Auth-Token:YOUR_ADMIN_TOKEN" http://localhost:35357/v2.0/tokens/YOUR_LONG_LONG_TOKEN

成功的话效果理论上是返回200,但是我测试了两次都是204,效果如下:

网上有人说返回码是20X即表示成功。但是根据我看launchpad上的bug928045报告指出,过去是20x或204,但现在已经修复成200了——“As part of bug 933587 (adding support for a HEAD call), all null content bodies will now be accompanied by a ’204 No Content’ instead of ’200 OK’”。而且还是很久以前就修复过了……

拿到taken后我们就可以做一些事情了,比如查看下endpoints什么的,不过貌似大多数操作还是不需要token的,具体可以看官方的 Service API Examples Using Curl

关于keystone的概念的理解可以参考这篇文章:OpenStack Keystone的基本概念理解

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

你可以管理本篇文章的订阅。

Post Navigation