Keystone(OpenstackIdentityService)介绍Keystone是Openstack框架中,负责身份验证、服务规则和服务令牌的功能,它实现了Openstack的IdentityAPI,本文将向你介绍,如何安装配置Keystone,并且在安装的过程中,有哪些问题需要注意的。Keystone类似一
Keystone (Openstack Identity Service)介绍
Keystone是Openstack框架中,负责身份验证、服务规则和服务令牌的功能,
它实现了Openstack的Identity API, 本文将向你介绍, 如何安装配置Keystone, 并且在安装的过程中,
有哪些问题需要注意的。
Keystone类似一个服务总线, 或者说是整个Openstack框架的注册表,
其他服务通过keystone来注册其服务的Endpoint, 任何服务之间相互的调用, 需要经过Keystone的身份验证,
来获得目标服务的Endpoint来找到目标服务。 虽然Keystone所扮演的角色很好很强大,但是我个人认为,
Keystone相对其他服务的安装和配置来说, 还是相对比较简单的。
准备环境
os "pun">: Ubuntu server "lit">11.10
hostname: "pln"> ps- "pln">keystone-
ip address: "lit">10.172. "lit">7.81
netmask: "lit">255.255. "lit">255.0
gateway: "lit">10.172. "lit">7.1
安装Keystone
如果你使用的是ubuntu, 可以直接通过apt-get来获得keystone,
不过本文所说的是从Keystone的git来获得最新的代码来安装。
keystone的安装环境
首先需要安装一些必要的工具.确保你的机器可以访问互联网
sudo apt "pun">-get "pln"> install build-
"pln">essential git python "pun">-dev python
"pun">-
"pln">setuptools python-pip libxml2-dev libxslt-dev
我们把数据库也部署在这台机器上:
sudo apt "pun">-get "pln"> install
mysql-
"pln">server
mysql- "pln">client python-
"pln">mysqldb
设置好mysql的root密码, 然后创建keystone的数据库
mysql "pun">-u root "pun">-p
create database keystone "pun">;
grant all on keystone.*
"pln"> to 'keystone' "pun">@'%'
"pln"> identified by "str">'openstack';
"pln">
quit
获得keystone的代码
安装keystone service
cd "pun">~
git clone git:
"com">//github.com/openstack/keystone.git
安装keystone client, 很多人通过git签出的代码来安装, 都漏掉了这步。 如果你不安装这个,
你后面将没办法通过客户端的命令来验证安装的keystone服务。
cd "pun">~
git clone git:
"com">//github.com/openstack/python-keystoneclient.git client
安装keystone的依赖项,并将keystone安装到python的package里
cd "pun">~/keystone
sudo pip install -r tools/ "pln">pip-
"pln">requires
sudo python setup. "pln">py install
这个过程需要等待一段时间, 接下来把keystone client的依赖项也装好
cd "pun">~/client
sudo pip install -r tools/ "pln">pip-
"pln">requires
sudo python setup. "pln">py install
配置keystone
由于是从git签出的代码, 所以, 我们需要自己创建keystone的配置文件路径和文件,
不过好在刚才签出的代码中有conf文件的examples, 所以我们可以直接拷贝到etc/keystone文件夹里去。
sudo mkdir "pun">-p "pun">/etc
"pun">/keystone
sudo cp ~ "str">/keystone/etc
"com">/* /etc/keystone/
修改配置文件 /etc/keystone/keystone.conf, 将
[ "pln">sql]
connection = "pln"> sqlite:
"com">///keystone.db
修改为
[ "pln">sql]
connection = "pln"> mysql:
"com">//keystone:openstack@localhost/keystone
然后将
[catalog]
driver = keystone.catalog.backends.templated.TemplatedCatalog
template_file = ./etc/default_catalog.templates
修改为
[catalog]
driver = keystone.catalog.backends.sql.Catalog
记住keystone.conf里的admin\_token, 这个是keystone默认配置的admin\_token,
我们需要用到它来访问keystone的服务, 后面也可以通过keystone-client来注册新的token。
默认的admin_token是ADMIN, 我们把它添加到系统环境里去
export "pln"> SERVICE_TOKEN= "pln">ADMIN
export "pln"> SERVICE_ENDPOINT "pun">=http "pun">:
"com">//10.172.7.81:35357/v2.0
同步数据库schema并运行keystone
sudo keystone "pun">-manage db_sync
sudo keystone- "pln">all - "pln">d &
至此, keystone服务就安装完毕, 并且运行了, 我们只是为了验证keystone的安装, 还没有对部署进一步完善,
例如开机自动启动keystone服务, 这个后面会说明, 下面我们需要验证我们安装的keystone是否可用。
验证keystone的安装
我们先执行一下
keystone user "pun">-list
执行的结果应该是
"pun">+----+---------+-------+------+ "pun">| id
"pun">| enabled "pun">| email
"pun">| name "pun">|
"pun">+----+---------+-------+------+
"pun">+----+---------+-------+------+
因为我们还没有添加任何user, role, service还有endpoint, 但是这里已经证明keystone
service在工作了。 我们只需要按照自己的要求来添加服务的定义, 服务的endpoint, 添加tenant,
user和role就可以了。 或者,
我们使用~/keystone/tools/sample_data.sh里定义的默认的schema和实例数据作为参考数据。
不过我们这次为了理解keystone里每个对象的用途, 还是手动的来配置数据。
keystone命令实例 添加租户,用户和用户角色 (tenant, user, role)
我们添加默认的租户 adminTenant
#创建租户(tenant)
keystone tenant- "pln">create --
"pln">name adminTenant "pun">--description
"str">"Admin Tenant"-- "pln">enabled true
执行的结果是:
"pun">+-------------+----------------------------------+|Property|Value|+-------------+----------------------------------+| description |AdminTenant|| enabled |True|| id |95d5f489c33c44acaed3f4f04aca1c02|| name | adminTenant |+-------------+----------------------------------+
记住上面的id, 下面添加admin账号的时候会用到
#创建admin账号 (user)
keystone user- "pln">create --
"pln">tenant_id "lit">95d5f489c33c44acaed3f4f04aca1c02
"pun">--name admin "pun">--pass
"pln"> openstack -- "pln">enabled true
执行结果:
"pun">+----------+-------------------------------------------------------------------------------------------------------------------------+|Property|Value|+----------+-------------------------------------------------------------------------------------------------------------------------+| email |None|| enabled |True|| id |7ebe3e781ad8425fa40178d457531b68|| name | admin || password | $6$rounds=$a797VlO0JL0vlRYU$5WcRyYnZDr5A6FRwsyExZCSQycFsNly30SJ5FhouDnhPe78ZGXFRUUKClr2UPq1c5sIJi8a0eu4vJc2QpaVux/|| tenantId |95d5f489c33c44acaed3f4f04aca1c02|+----------+-------------------------------------------------------------------------------------------------------------------------+
添加一个admin角色
keystone role "pun">-create
"pun">--name adminRole
执行结果:
"pun">+----------+----------------------------------+|Property|Value|+----------+----------------------------------+| id |5b2974367e734867b4d8fdcc1b66ca7a|| name | adminRole |+----------+----------------------------------+
上面我们以此创建了一个租户(tenant), 一个账户(user)和一个角色(role), 通过执行结果我们可以得出:
tenant_id "pun">: "lit">95d5f489c33c44acaed3f4f04aca1c02
user_id: "lit">7ebe3e781ad8425fa40178d457531b68
role_id: "lit">5b2974367e734867b4d8fdcc1b66ca7a
然后我们通过下面的命令来将它们关联起来
keystone user "pun">-role "pun">-add
"pun">--user "lit">7ebe3e781ad8425fa40178d457531b68
"pun">--tenant_id
"lit">95d5f489c33c44acaed3f4f04aca1c02 "pun">--role
"lit">5b2974367e734867b4d8fdcc1b66ca7a
记住,你执行的结果和我这里执行的结果是不同的, 你应该记录好你执行后的tenant id, user id和rola
id
我们来试验一下, 刚才的添加的租户、用户是否可用.
sudo apt "pun">-get "pln"> install curl
curl - "pln">d
"str">'{"auth": {"tenantName": "adminTenant", "passwordCredentials":{"username": "admin", "password": "openstack"}}}'-H "Content-type: application/json" http://10.172.7.81:35357/v2.0/tokens | python -mjson.tool
如果正确的话, 应该得出下面结果:
{ "str">"access": "pun">{"serviceCatalog" "pun">:{},
"str">"token": "pun">{"expires" "pun">:
"str">"2012-03-28T03:31:17Z" "pun">,"id" "pun">:
"str">"98bfd57c2a964ae7b0e39cd8cf2a35fd" "pun">,"tenant"
"pun">:{ "str">"description": "str">"Admin Tenant",
"str">"enabled": "kwd">true, "str">"id":
"str">"95d5f489c33c44acaed3f4f04aca1c02" "pun">,"name"
"pun">:"adminTenant" "pun">}}, "str">"user":
"pun">{"id" "pun">:
"str">"7ebe3e781ad8425fa40178d457531b68" "pun">,"name"
"pun">:"admin" "pun">,"roles" "pun">:[ "pun">{"id"
"pun">: "str">"5b2974367e734867b4d8fdcc1b66ca7a"
"pun">,"name" "pun">:"adminRole" "pun">}],
"str">"roles_links": "pun">[],"username" "pun">:"admin"
"pun">}} "pun">}
注意上面的serviceCatelog是空的, 是因为我们还没有定义服务(Service)和Endpoint,
安装Keystone的工作就完成了。我会在后续的安装中,逐步添加这些内容, 例如Glance, Nova, Swift等等。
总结
其实, 知道keystone在整个Openstack框架中的作用,
以及了解keystone里面的每个对象的作用和用途是非常重要的, 如果我们只知道按照官方的教程去安装keystone,
而不知道里面每个元素是做什么用的, 那么出了问题就很难去解决, 在我们遇到问题的时候, 去看一下
https://bugs.launchpad.net/keystone 这里, 也许你遇到的问题, 别人也同样遇到了,
你可以从这里来确认是你安装的问题还是你遇到了keystone还没有解决的Bug, 当你确认一个Bug的存在,
那么你可以通过那个网址来提交Bug, 以便keystone的开发小组能够知道这个Bug的存在, 并修正它。