keystone 安装、数据库配置

注:这是我看到的一篇文章,我参考部署的过程出了一点问题,把它补充一下,一起分享~~~

Keystone是Openstack框架中,负责身份验证、服务规则和服务令牌的功能, 它实现了Openstack的Identity API, 本文将向你介绍, 如何安装配置Keystone, 并且在安装的过程中, 有哪些问题需要注意的。

Keystone类似一个服务总线, 或者说是整个Openstack框架的注册表, 其他服务通过keystone来注册其服务的Endpoint, 任何服务之间相互的调用, 需要经过Keystone的身份验证, 来获得目标服务的Endpoint来找到目标服务。 虽然Keystone所扮演的角色很好很强大,但是我个人认为, Keystone相对其他服务的安装和配置来说, 还是相对比较简单的。

准备环境

os: ubuntu server 11.10 
hostname: ps-keystone-01
ip address: 10.172.7.81     
netmask: 255.255.255.0
gateway: 10.172.7.1

安装Keystone

如果你使用的是ubuntu, 可以直接通过apt-get来获得keystone, 不过本文所说的是从Keystone的git来获得最新的代码来安装。

keystone的安装环境

首先需要安装一些必要的工具.确保你的机器可以访问互联网

sudo apt-get install build-essential git python-dev python-setuptools python-pip libxml2-dev libxslt-dev

我们把数据库也部署在这台机器上:

sudo apt-get install mysql-server mysql-client python-mysqldb

设置好mysql的root密码, 然后创建keystone的数据库

mysql -u root -p
create database keystone;
grant all on keystone.* to 'keystone'@'%' identified by 'openstack';  补充说明:向数据库中添加一个用户(keystone),密码为openstack
quit

获得keystone的代码

安装keystone service

cd ~
git clone git://github.com/openstack/keystone.git

安装keystone client, 很多人通过git签出的代码来安装, 都漏掉了这步。 如果你不安装这个, 你后面将没办法通过客户端的命令来验证安装的keystone服务。

cd ~
git clone git://github.com/openstack/python-keystoneclient.git client

安装keystone的依赖项,并将keystone安装到python的package里

cd ~/keystone
sudo pip install -r tools/pip-requires  注明:H版本没有这个文件了,可以跳过这一步
sudo python setup.py install            建议使用:sudo pip install -e .

这个过程需要等待一段时间, 接下来把keystone client的依赖项也装好

cd ~/client
sudo pip install -r tools/pip-requires  注明:H版本没有这个文件了,可以跳过这一步

sudo python setup.py install            建议使用:sudo pip install -e .

配置keystone

由于是从git签出的代码, 所以, 我们需要自己创建keystone的配置文件路径和文件, 不过好在刚才签出的代码中有conf文件的examples, 所以我们可以直接拷贝到etc/keystone文件夹里去。

sudo mkdir -p /etc/keystone
sudo cp ~/keystone/etc/* /etc/keystone/

修改配置文件 /etc/keystone/keystone.conf, 将

[sql]
connection = sqlite:///keystone.db

修改为

[sql]
connection = mysql://keystone:openstack@localhost/keystone   这就是上面创建的user(keystone)和密码openstack

然后将
[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 SERVICE_TOKEN=ADMIN       注明:也可以在keystone.cof文件中添加admin_token = ADMIN 表示一个默认的token
export SERVICE_ENDPOINT=http://10.172.7.81:35357/v2.0

同步数据库schema并运行keystone

sudo keystone-manage db_sync   注明:同步数据库、并创建keystone表
sudo keystone-all -d &

至此, keystone服务就安装完毕, 并且运行了, 我们只是为了验证keystone的安装, 还没有对部署进一步完善, 例如开机自动启动keystone服务, 这个后面会说明, 下面我们需要验证我们安装的keystone是否可用。

验证keystone的安装

我们先执行一下

keystone user-list

执行的结果应该是

+----+---------+-------+------+
| id | enabled | email | name |
+----+---------+-------+------+
+----+---------+-------+------+

因为我们还没有添加任何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-create --name adminTenant --description "Admin Tenant" --enabled true

执行的结果是:

+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description | Admin Tenant                     |
| enabled     | True                             |
| id          | 95d5f489c33c44acaed3f4f04aca1c02 |
| name        | adminTenant                      |
+-------------+----------------------------------+

记住上面的id, 下面添加admin账号的时候会用到

#创建admin账号 (user)
keystone user-create --tenant_id 95d5f489c33c44acaed3f4f04aca1c02 --name admin --pass openstack --enabled true

执行结果:

+----------+-------------------------------------------------------------------------------------------------------------------------+
| Property |                                                          Value                                                          |
+----------+-------------------------------------------------------------------------------------------------------------------------+
| email    | None                                                                                                                    |
| enabled  | True                                                                                                                    |
| id       | 7ebe3e781ad8425fa40178d457531b68                                                                                        |
| name     | admin                                                                                                                   |
| password | $6$rounds=40000$a797VlO0JL0vlRYU$5WcRyYnZDr5A6FRwsyExZCSQycFsNly30SJ5FhouDnhPe78ZGXFRUUKClr2UPq1c5sIJi8a0eu4vJc2QpaVux/ |
| tenantId | 95d5f489c33c44acaed3f4f04aca1c02                                                                                        |
+----------+-------------------------------------------------------------------------------------------------------------------------+

添加一个admin角色

keystone role-create --name adminRole

执行结果:

+----------+----------------------------------+
| Property |              Value               |
+----------+----------------------------------+
| id       | 5b2974367e734867b4d8fdcc1b66ca7a |
| name     | adminRole                        |
+----------+----------------------------------+

上面我们以此创建了一个租户(tenant), 一个账户(user)和一个角色(role), 通过执行结果我们可以得出:

tenant_id: 95d5f489c33c44acaed3f4f04aca1c02
user_id: 7ebe3e781ad8425fa40178d457531b68
role_id: 5b2974367e734867b4d8fdcc1b66ca7a

然后我们通过下面的命令来将它们关联起来

keystone user-role-add --user 7ebe3e781ad8425fa40178d457531b68 --tenant_id 95d5f489c33c44acaed3f4f04aca1c02 --role 5b2974367e734867b4d8fdcc1b66ca7a

记住,你执行的结果和我这里执行的结果是不同的, 你应该记录好你执行后的tenant id, user id和rola id

我们来试验一下, 刚才的添加的租户、用户是否可用.

sudo apt-get install curl
curl -d '{"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

如果正确的话, 应该得出下面结果:

{
    "access": {
        "serviceCatalog": {}, 
        "token": {
            "expires": "2012-03-28T03:31:17Z", 
            "id": "98bfd57c2a964ae7b0e39cd8cf2a35fd", 
            "tenant": {
                "description": "Admin Tenant", 
                "enabled": true, 
                "id": "95d5f489c33c44acaed3f4f04aca1c02", 
                "name": "adminTenant"
            }
        }, 
        "user": {
            "id": "7ebe3e781ad8425fa40178d457531b68", 
            "name": "admin", 
            "roles": [
                {
                    "id": "5b2974367e734867b4d8fdcc1b66ca7a", 
                    "name": "adminRole"
                }
            ], 
            "roles_links": [], 
            "username": "admin"
        }
    }
}

注意上面的serviceCatelog是空的, 是因为我们还没有定义服务(Service)和Endpoint, 安装Keystone的工作就完成了。我会在后续的安装中,逐步添加这些内容, 例如Glance, Nova, Swift等等。

总结

其实, 知道keystone在整个Openstack框架中的作用, 以及了解keystone里面的每个对象的作用和用途是非常重要的, 如果我们只知道按照官方的教程去安装keystone, 而不知道里面每个元素是做什么用的, 那么出了问题就很难去解决, 在我们遇到问题的时候, 去看一下 https://bugs.launchpad.net/keystone 这里, 也许你遇到的问题, 别人也同样遇到了, 你可以从这里来确认是你安装的问题还是你遇到了keystone还没有解决的Bug, 当你确认一个Bug的存在, 那么你可以通过那个网址来提交Bug, 以便keystone的开发小组能够知道这个Bug的存在, 并修正它。

Authentication, Endpoint, Keystone, OpenStack, Service, Token

OpenStack Hands on lab系列Openstack Hands on lab 2: Swift安装并使用Keystone做身份验证

你可能感兴趣的:(云计算)