之前已经介绍了OpenStack Swift集群Keystone的安装部署,最后来讲一讲Swift集群与Keystone的整合使用吧。

1. 简介

  本文档描述了Keystone与Swift集群的整合使用方法,即Swift通过Keystone完成用户的身份认证与权限控制,而不是采用自带的TempAuth。本文档假定如下前提条件:

  1. 用户已阅读文档《Keystone安装部署流程》和《Swift集群部署流程》,并按照上述文档分别部署了Keystone与Swift集群。
  2. 用户已掌握了Keystone与Swift的基本使用方法。
  3. 所有PC使用Ubuntu操作系统。
  4. Keystone部署在PC1上,Swift集群部署在PC2和PC3上。
  5. PC2和PC3都运行Swift的所有服务,既是Proxy Server,又是Storage Server,用户可以向任何一台发起存储服务请求。
  6. Keystone为多Proxy Server的Swift集群提供身份认证与权限控制。(单Proxy Server的情况比较简单,相信看完本文档后你就懂了)
  7. PC2和PC3构成memcached集群来提供Token缓存服务。
  8. 所有操作均在root用户下进行,并使用root作为Swift的用户和组。
  9. 所有机器都运行在局域网中。
  10. 使用回环设备和XFS文件系统作为Swift底层存储。

2. 安装部署

  为了能够让Swift通过Keystone完成用户的身份认证与权限控制,我们需要在完成Keystone与Swift集群部署的基础上,稍作修改。

2.1 准备环境

 

PC 1

PC 2

PC 3

机器类型:

PC物理机

PC物理机

PC物理机

操作系统:

Ubuntu-12.04-desktop

(64位)

Ubuntu-12.04-desktop

(64位)

Ubuntu-12.04-desktop

(64位)

用户类型:

root

root

root

数据库:

sqlite3

sqlite3

sqlite3

IP地址:

192.168.3.67(局域网)

192.168.3.52(局域网)

192.168.3.53(局域网)

Keystone

 

 

Proxy Server

Storage Server

Auth

Keystone

Keystone

Token缓存:

memcached

memcached

2.2 版本说明

  1. Swift版本:1.7.6
  2. python-swiftclient版本:1.2.0
  3. Keystone版本:git上的Master版

  可参照文档《Keystone安装部署流程》和《Swift集群部署流程》。Swift需要调用python-keystoneclient中的组件来访问Keystone,因此需要为其安装python-keystoneclient(可采用安装Keystone依赖项的方式)。因此,请务必确保各处安装的Keystone与python-keystoneclient的版本统一,否则可能出现版本兼容性问题(我就曾遇到Swift中安装的python-keystoneclient和PC1上的Keystone服务的版本不统一,导致的版本兼容性问题,无法通过验证,最后重新下载安装所有的python-keystoneclient与Keystone才予以解决)。

2.3 Keystone的部署

  PC1上已经按照文档《Keystone安装部署流程》部署了Keystone,在整合使用过程中无需进行修改。为完整演示Keystone与Swift集群的整合使用过程,我们需要清空Keystone的记录的数据。先删除存储Keystone数据的DB文件,然后同步数据库schema并启动Keystone服务即可。

# rm -f ~/keystone.db

# keystone-manage db_sync

# keystone-all

2.4 Swift集群的部署

  PC2和PC3上已经按照文档《Swift集群部署流程》部署了Swift集群,为了使其能通过Keystone完成用户的身份认证与权限控制,需要对PC2和PC3作出一定的修改。以下操作同时应用于PC2和PC3。

  1. 停掉Swift的所有服务。

# stopall

  2. Swift需要调用python-keystoneclient中的组件来访问Keystone,因此需要为其安装python-keystoneclient。为了避免版本兼容性问题,推荐采用安装Keystone依赖项的方式,当然你也可以独立地去下载安装python-keystoneclient。我从git上获取最新的Keystone Service代码,安装Keystone的依赖项,并将Keystone安装到Python的package里。这里只安装依赖项中的tools/pip-requires即可,该依赖项中包含了python-keystoneclient。如果安装了tools/test-requires则会覆盖掉已安装的Swift,你就需要自己重新安装Swift了,这在文档《Keystone安装部署流程》中已详细说明。

# cd ~

# git clone https://github.com/openstack/keystone.git

# cd ~/keystone

# pip install -r tools/pip-requires

# python setup.py install

  3. 修改Swift中的proxy-server配置文件/etc/swift/proxy-server.conf。在其中添加authtokenkeystoneauth组件,并将pipeline中的tempauth改为authtoken与keystoneauth,表示采用Keystone而不是TempAuth来完成用户身份认证和权限控制。authtoken是python-keystoneclient中的组件,用于访问Keystone;keystoneauth是Swift中的组件,用于一些附加的条件设置。

[DEFAULT]

bind_port = 8080

user = root

workers = 8

log_facility = LOG_LOCAL1

[pipeline:main]

pipeline = healthcheck cache authtoken keystoneauth proxy-logging proxy-server

[app:proxy-server]

use = egg:swift#proxy

allow_account_management = true

account_autocreate = true

[filter:tempauth]

use = egg:swift#tempauth

user_admin_admin = admin .admin .reseller_admin

user_test_tester = testing .admin

user_test2_tester2 = testing2 .admin

user_test_tester3 = testing3

reseller_prefix = AUTH

token_life = 86400

[filter:authtoken]

paste.filter_factory = keystoneclient.middleware.auth_token:filter_factory

# 以下各项是根据Keystone配置文件中的参数及其所在PC来设置的。

auth_host = 192.168.3.67

# Keystone提供的认证授权、系统管理服务的IP地址,通常为内网。

auth_port = 35357

# Keystone提供的认证授权、系统管理服务监听的端口,通常为内网。

auth_protocol = http

# 访问Keystone所使用的协议,http或https

service_host = 192.168.3.67

# Keystone提供的认证授权服务的IP地址,通常为公网(外网),也可以是内网

service_port = 5000

# Keystone提供的认证授权服务监听的端口,通常为公网(外网),也可以是内网。

admin_token = ADMIN

# admin_token参数是用来访问Keystone服务的,即Keystone服务的Token。可以使用该Token访问Keystone服务、查看信息、创建其他服务等。

[filter:keystoneauth]

use = egg:swift#keystoneauth

operator_roles = adminRole, swiftoperator

# 允许访问并使用Swift的角色

reseller_prefix = AUTH_

# account的命名前缀,注意此处必须加“_”。

# 例如http://192.168.3.52:8080/v1/AUTH_54d3db64adfc4731b5222cac974f8bc5

[filter:healthcheck]

use = egg:swift#healthcheck

[filter:cache]

use = egg:swift#memcache

memcache_servers = 192.168.3.52:11211,192.168.3.53:11211

[filter:proxy-logging]

use = egg:swift#proxy_logging

  4. 至此,我们已经完成了对Swift的修改。现在可以启动Swift服务了

# startmain

# startall

3. 使用实例

3.1 创建Tenant、User和Role

  我们将创建名称为adminTenant的Tenant(租户)、名称为admin的User(用户)以及名称为adminRole的Role(角色),并将它们关联起来。最终的结果表现为:一个名叫admin的用户,拥有名为adminRole的角色身份,并且能够使用名为adminTennant的租户。需要说明的是:2.4节中配置文件里的“operator_roles = adminRole, swiftoperator”项表明,角色为adminRole或swiftoperator的用户才能访问Swift,所以此处才选择创建adminRole角色。

  1. 创建Tenant,租户名为adminTenant,描述信息为Admin Tenant。请记住该命令生成的Tenant id,下面添加User时需要用到。

# keystone tenant-create --name adminTenant --description "Admin Tenant" --enabled true

+-------------+----------------------------------+

|   Property  |              Value               |

+-------------+----------------------------------+

| description |           Admin Tenant           |

|   enabled   |               True               |

|      id     | 54d3db64adfc4731b5222cac974f8bc5 |

|     name    |           adminTenant            |

+-------------+----------------------------------+

  2. 创建User,用户名为admin,密码为openstack。请记住该命令生成的User id,下面的关联命令需要用到。

# keystone user-create --tenant_id 54d3db64adfc4731b5222cac974f8bc5 --name admin --pass openstack --enabled true

+----------+----------------------------------+

| Property |              Value               |

+----------+----------------------------------+

|  email   |                                  |

| enabled  |               True               |

|    id    | b14c99dbaad14a78a37aa7361201062f |

|   name   |              admin               |

| tenantId | 54d3db64adfc4731b5222cac974f8bc5 |

+----------+----------------------------------+

  3. 创建Role,角色名为adminRole。请记住该命令生成的Role id,下面的关联命令需要用到。

# keystone role-create --name adminRole

+----------+----------------------------------+

| Property |              Value               |

+----------+----------------------------------+

|    id    | 1bf9a3ac155d4fd4abe5646abcc0de7a |

|   name   |            adminRole             |

+----------+----------------------------------+

  4. 至此,我们已经创建了一个Ttenant,一个Uuser以及一个Rrole,它们的id分别是:

tenant_id:54d3db64adfc4731b5222cac974f8bc5

user_id:b14c99dbaad14a78a37aa7361201062f

role_id:1bf9a3ac155d4fd4abe5646abcc0de7a

  5. 最后,我们要使用上述三个id,并通过下面的命令来将三者关联起来。

# keystone user-role-add --user-id b14c99dbaad14a78a37aa7361201062f --tenant-id 54d3db64adfc4731b5222cac974f8bc5 --role-id 1bf9a3ac155d4fd4abe5646abcc0de7a

  此时,让我们再使用list命令查看一下Tenant、User和Role的信息。

# keystone tenant-list

+----------------------------------+-------------+---------+

|                id                |     name    | enabled |

+----------------------------------+-------------+---------+

| 54d3db64adfc4731b5222cac974f8bc5 | adminTenant |   True  |

+----------------------------------+-------------+---------+

# keystone user-list

+----------------------------------+-------+---------+-------+

|                id                |  name | enabled | email |

+----------------------------------+-------+---------+-------+

| b14c99dbaad14a78a37aa7361201062f | admin |   True  |       |

+----------------------------------+-------+---------+-------+

  注:“_member_”角色是Keystone预设的,似乎会和每个用户关联。这是新版本Keystone中出现的,目的暂时不明。

# keystone role-list

+----------------------------------+-----------+

|                id                |    name   |

+----------------------------------+-----------+

| 9fe2ff9ee4384b1894a90878d3e92bab |  _member_ |

| 1bf9a3ac155d4fd4abe5646abcc0de7a | adminRole |

+----------------------------------+-----------+

3.2 创建Service和Endpoint

  为了让上面创建的用户能够使用Swift存储服务,我们将创建名称为Swift的Service(服务),然后根据现有Swift集群的情况为租户添加Endpoint(端点,服务入口),然后用户就能够访问Endpoint来使用Swift存储服务了。需要说明的是:服务和租户关联后成为Endpoint,即该租户可使用该服务,不同服务和不同租户的组合会产生不同的Endpoint;同时,用户又会和租户相关联,表明用户可使用该租户;于是,只要用户所属的角色被允许访问Swift,那么该用户就能真正地访问并使用Swift了;

  1. 创建Service,服务名为Swift,服务类型为object-store,描述信息为Swift Object Store Service。请记住该命令生成的Service id,下面添加Endpoint时需要用到。

# keystone service-create --name=Swift --type=object-store --description="Swift Object Store Service"

+-------------+----------------------------------+

|   Property  |              Value               |

+-------------+----------------------------------+

| description |    Swift Object Store Service    |

|      id     | cab139be777545a893d1bd26a03730c9 |

|     name    |              Swift               |

|     type    |           object-store           |

+-------------+----------------------------------+

  2. 由于我们的Swift是集群,并且有两个Proxy Server,如果Swift前端存在某种负载均衡设备,那么该负载均衡设备就是唯一的Endpoint(服务入口),用户通过Keystone的认证后,获得的就是这个负载均衡设备的访问地址;然而,我们没有负载均衡设备,这就意味着Swift存在两个Endpoint(服务入口),分别为PC2和PC3,用户通过Keystone的认证后,应该可以同时获得这两个Endpoint,然后随意选取一个来访问。因此,我们需要为租户添加两个Endpoint,分别对应PC2和PC3。

#keystone endpoint-create --region RegionOne --service_id cab139be777545a893d1bd26a03730c9 --publicurl http://192.168.3.52:8080/v1/AUTH_54d3db64adfc4731b5222cac974f8bc5 --adminurl http://192.168.3.52:8080 --internalurl http://192.168.3.52:8080/v1/AUTH_54d3db64adfc4731b5222cac974f8bc5

+-------------+-------------------------------------------------------------------+

|   Property  |                               Value                               |

+-------------+-------------------------------------------------------------------+

|   adminurl  |                      http://192.168.3.52:8080                     |

|      id     |                  6f12e2e82ca44c789c18bdb9d4bbd0dc                 |

| internalurl | http://192.168.3.52:8080/v1/AUTH_54d3db64adfc4731b5222cac974f8bc5 |

|  publicurl  | http://192.168.3.52:8080/v1/AUTH_54d3db64adfc4731b5222cac974f8bc5 |

|    region   |                             RegionOne                             |

|  service_id |                  cab139be777545a893d1bd26a03730c9                 |

+-------------+-------------------------------------------------------------------+

# keystone endpoint-create --region RegionTwo --service_id cab139be777545a893d1bd26a03730c9 --publicurl http://192.168.3.53:8080/v1/AUTH_54d3db64adfc4731b5222cac974f8bc5 --adminurl http://192.168.3.53:8080 --internalurl http://192.168.3.53:8080/v1/AUTH_54d3db64adfc4731b5222cac974f8bc5

+-------------+-------------------------------------------------------------------+

|   Property  |                               Value                               |

+-------------+-------------------------------------------------------------------+

|   adminurl  |                      http://192.168.3.53:8080                     |

|      id     |                  2722feff369b4c2d99fca9e4414276b4                 |

| internalurl | http://192.168.3.53:8080/v1/AUTH_54d3db64adfc4731b5222cac974f8bc5 |

|  publicurl  | http://192.168.3.53:8080/v1/AUTH_54d3db64adfc4731b5222cac974f8bc5 |

|    region   |                             RegionTwo                             |

|  service_id |                  cab139be777545a893d1bd26a03730c9                 |

+-------------+-------------------------------------------------------------------+

  这里解释一下上面的命令:region表示域,原本同一个服务和同一个租户关联产生的Endpoint是唯一的,为使其能支持多个Endpoint(如上文中的PC2和PC3),便加入了域的概念,即同一个服务和同一个租户可以关联产生多个Endpoint,每个Endpoint用region来标示加以区别,如上面的RegionOneRegionTwopublicurl表示该Endpoint的公网(外网)服务入口(普通服务);adminurl表示该Endpoint的管理员服务入口,一般为内网;internalurl表示该Endpoint的内网服务入口(普通服务);本文档的前提环境为局域网,因此publicurl和internalurl可以设置为相同的;192.168.3.52192.168.3.53分别是PC2和PC3的IP地址;AUTH_54d3db64adfc4731b5222cac974f8bc5是“AUTH_”前缀加租户ID,“AUTH_”前缀在2.4节中已有介绍,而租户ID则表明这些Endpoint是由某个特定的租户和Service关联产生的。

  最后,让我们再使用list命令查看一下Service和Endpoint的信息。

# keystone endpoint-list

+----------------------------------+-----------+-------------------------------------------------------------------+-------------------------------------------------------------------+--------------------------+----------------------------------+

|                id                |   region  |                             publicurl                             |                            internalurl                            |         adminurl         |            service_id            |

+----------------------------------+-----------+-------------------------------------------------------------------+-------------------------------------------------------------------+--------------------------+----------------------------------+

| 2722feff369b4c2d99fca9e4414276b4 | RegionTwo | http://192.168.3.53:8080/v1/AUTH_54d3db64adfc4731b5222cac974f8bc5 | http://192.168.3.53:8080/v1/AUTH_54d3db64adfc4731b5222cac974f8bc5 | http://192.168.3.53:8080 | cab139be777545a893d1bd26a03730c9 |

| 6f12e2e82ca44c789c18bdb9d4bbd0dc | RegionOne | http://192.168.3.52:8080/v1/AUTH_54d3db64adfc4731b5222cac974f8bc5 | http://192.168.3.52:8080/v1/AUTH_54d3db64adfc4731b5222cac974f8bc5 | http://192.168.3.52:8080 | cab139be777545a893d1bd26a03730c9 |

+----------------------------------+-----------+-------------------------------------------------------------------+-------------------------------------------------------------------+--------------------------+----------------------------------+

3.3 用curl测试

  1. 上面已经完成了Tenant、User、Role、Service和Endpoint的创建,于是我们就可以访问Keystone,来获取Token和Endpoint了。我们使用curl命令来访问Keyston,该命令需要给定四个参数,即tenantName(租户名,也可理解为账户名)、username(用户名)、password(用户密码)以及认证与授权申请的地址(http://192.168.3.67:35357/v2.0/tokens或http://192.168.3.67:5000/v2.0/tokens均可)。此外,返回信息会以json格式展现。返回信息比较全面,包括了token和不同region的Endpoint,如下所示:

# curl -d '{"auth": {"tenantName": "adminTenant", "passwordCredentials":{"username": "admin", "password": "openstack"}}}' -H "Content-type: application/json" http://192.168.3.67:5000/v2.0/tokens | python -mjson.tool

% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

Dload  Upload   Total   Spent    Left  Speed

100  1301    0  1192  100   109  19348   1769 --:--:-- --:--:-- --:--:-- 19866

{

"access": {

"metadata": {

"is_admin": 0,

"roles": [

"9fe2ff9ee4384b1894a90878d3e92bab",

"1bf9a3ac155d4fd4abe5646abcc0de7a"

]

},

"serviceCatalog": [

{

"endpoints": [

{

"adminURL": "http://192.168.3.52:8080",

"id": "482686e2d58644f99971733c3f53f480",

"internalURL": "http://192.168.3.52:8080/v1/AUTH_54d3db64adfc4731b5222cac974f8bc5",

"publicURL": "http://192.168.3.52:8080/v1/AUTH_54d3db64adfc4731b5222cac974f8bc5",

"region": "RegionOne"

},

{

"adminURL": "http://192.168.3.53:8080",

"id": "ec6489bafae448088f09c51ddacebeaf",

"internalURL": "http://192.168.3.53:8080/v1/AUTH_54d3db64adfc4731b5222cac974f8bc5",

"publicURL": "http://192.168.3.53:8080/v1/AUTH_54d3db64adfc4731b5222cac974f8bc5",

"region": "RegionTwo"

}

],

"endpoints_links": [],

"name": "Swift",

"type": "object-store"

}

],

"token": {

"expires": "2013-04-09T13:51:07Z",

"id": "c8d5d45c42484c7d81d6d2ddd1c1258b",

"issued_at": "2013-04-08T13:51:07.553241",

"tenant": {

"description": "Admin Tenant",

"enabled": true,

"id": "54d3db64adfc4731b5222cac974f8bc5",

"name": "adminTenant"

}

},

"user": {

"id": "b14c99dbaad14a78a37aa7361201062f",

"name": "admin",

"roles": [

{

"name": "_member_"

},

{

"name": "adminRole"

}

],

"roles_links": [],

"username": "admin"

}

}

}

  2. 接着就可以用获取到的token和Endpoint访问Swift服务了。先用其中一个Endpoint(PC2)查看该Account的信息。

# curl -v -H 'X-Auth-Token: c8d5d45c42484c7d81d6d2ddd1c1258b' http://192.168.3.52:8080/v1/AUTH_54d3db64adfc4731b5222cac974f8bc5

* About to connect() to 192.168.3.52 port 8080 (#0)

*   Trying 192.168.3.52... connected

* Connected to 192.168.3.52 (192.168.3.52) port 8080 (#0)

> GET /v1/AUTH_54d3db64adfc4731b5222cac974f8bc5 HTTP/1.1

> User-Agent: curl/7.21.6 (x86_64-pc-linux-gnu) libcurl/7.21.6 OpenSSL/1.0.0e zlib/1.2.3.4 libidn/1.22 librtmp/2.3

> Host: 192.168.3.52:8080

> Accept: */*

> X-Auth-Token: c8d5d45c42484c7d81d6d2ddd1c1258b

>

< HTTP/1.1 204 No Content

< Content-Length: 0

< Accept-Ranges: bytes

< X-Timestamp: 1365429097.95942

< X-Account-Bytes-Used: 0

< X-Account-Container-Count: 0

< Content-Type: text/html; charset=UTF-8

< X-Account-Object-Count: 0

< Date: Mon, 08 Apr 2013 13:51:38 GMT

<

* Connection #0 to host 192.168.3.52 left intact

* Closing connection #0

# curl -X HEAD -i -H 'X-Auth-Token: c8d5d45c42484c7d81d6d2ddd1c1258b' http://192.168.3.52:8080/v1/AUTH_54d3db64adfc4731b5222cac974f8bc5

HTTP/1.1 204 No Content

Content-Length: 0

Accept-Ranges: bytes

X-Timestamp: 1365429097.95942

X-Account-Bytes-Used: 0

X-Account-Container-Count: 0

Content-Type: text/plain; charset=utf-8

X-Account-Object-Count: 0

Date: Mon, 08 Apr 2013 13:52:18 GMT

  3. 再尝试另一个Endpoint(PC3)查看该的Account信息。

# curl -v -H 'X-Auth-Token: c8d5d45c42484c7d81d6d2ddd1c1258b' http://192.168.3.53:8080/v1/AUTH_54d3db64adfc4731b5222cac974f8bc5

* About to connect() to 192.168.3.53 port 8080 (#0)

*   Trying 192.168.3.53... connected

* Connected to 192.168.3.53 (192.168.3.53) port 8080 (#0)

> GET /v1/AUTH_54d3db64adfc4731b5222cac974f8bc5 HTTP/1.1

> User-Agent: curl/7.21.6 (x86_64-pc-linux-gnu) libcurl/7.21.6 OpenSSL/1.0.0e zlib/1.2.3.4 libidn/1.22 librtmp/2.3

> Host: 192.168.3.53:8080

> Accept: */*

> X-Auth-Token: c8d5d45c42484c7d81d6d2ddd1c1258b

>

< HTTP/1.1 204 No Content

< Content-Length: 0

< Accept-Ranges: bytes

< X-Timestamp: 1365429097.95942

< X-Account-Bytes-Used: 0

< X-Account-Container-Count: 0

< Content-Type: text/html; charset=UTF-8

< X-Account-Object-Count: 0

< Date: Mon, 08 Apr 2013 13:53:07 GMT

<

* Connection #0 to host 192.168.3.53 left intact

* Closing connection #0

  4. 获取该Account中的Container列表,由于未曾创建Container,所以是空的。

# curl -X GET -H 'X-Auth-Token: c8d5d45c42484c7d81d6d2ddd1c1258b' http://192.168.3.53:8080/v1/AUTH_54d3db64adfc4731b5222cac974f8bc5

3.4 用Swift客户端测试

  1. 接着,我们使用Swift客户端进行测试。先查看该Account的信息,提交的参数是Keystone的访问地址、租户名、用户名、用户密码。

# swift -V 2 -A http://192.168.3.67:5000/v2.0 -U adminTenant:admin -K openstack stat

Account: AUTH_54d3db64adfc4731b5222cac974f8bc5

Containers: 0

Objects: 0

Bytes: 0

Accept-Ranges: bytes

X-Timestamp: 1365429097.95942

Content-Type: text/plain; charset=utf-8

  2. 获取该Account中的Container列表,由于未曾创建Container,所以是空的。

# swift -V 2 -A http://192.168.3.67:5000/v2.0 -U adminTenant:admin -K openstack list

  3. 在该Account中创建几个Container。通过查看PC2和PC3上Storage Server的存储目录,可以看到5个Container中有3个存储在PC2上,2个存储在PC3上。

# swift -V 2 -A http://192.168.3.67:5000/v2.0 -U adminTenant:admin -K openstack post myContainer1

# swift -V 2 -A http://192.168.3.67:5000/v2.0 -U adminTenant:admin -K openstack post myContainer2

# swift -V 2 -A http://192.168.3.67:5000/v2.0 -U adminTenant:admin -K openstack post myContainer3

# swift -V 2 -A http://192.168.3.67:5000/v2.0 -U adminTenant:admin -K openstack post myContainer4

# swift -V 2 -A http://192.168.3.67:5000/v2.0 -U adminTenant:admin -K openstack post myContainer5

  4. 再次获取该Account中的Container列表。

# swift -V 2 -A http://192.168.3.67:5000/v2.0 -U adminTenant:admin -K openstack list

myContainer1

myContainer2

myContainer3

myContainer4

myContainer5

  上述使用实例阐述了如何用Keystone为Swift集群提供身份认证与权限控制。结果表明,Keystone正确地为多Proxy Server的Swift集群提供了身份认证与权限控制。至此,你应该已经完整地了解了Keystone和Swift集群的整合使用。

4. 参考链接

4.1 官方链接

  • Middleware Architecture

    http://docs.openstack.org/developer/keystone/middlewarearchitecture.html

  • keystoneclient auth_token does not work with old versions of keystone

    https://bugs.launchpad.net/python-keystoneclient/+bug/1159911

4.2 非官方链接

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

    http://liangbo.me/index.php/2012/03/29/openstack-hands-on-lab-2-swift-installation-with-keystone/

  • Class KeystoneAuth

    http://secstack.org/docs/swift_docs/swift.common.middleware.keystoneauth.KeystoneAuth-class.html

OpenStack Swift集群与Keystone的整合使用说明的更多相关文章

  1. OpenStack Swift集群部署流程与简单使用

    之前介绍了<OpenStack Swift All In One安装部署流程与简单使用>,那么接下来就说一说Swift集群部署吧. 1. 简介 本文档详细描述了使用两台PC部署一个小型Sw ...

  2. 理解 OpenStack Swift (1):OpenStack + 三节点Swift 集群+ HAProxy + UCARP 安装和配置

    本系列文章着重学习和研究OpenStack Swift,包括环境搭建.原理.架构.监控和性能等. (1)OpenStack + 三节点Swift 集群+ HAProxy + UCARP 安装和配置 ( ...

  3. openstack pike 集群高可用 安装 部署 目录汇总

    # openstack pike 集群高可用 安装部署#安装环境 centos 7 史上最详细的openstack pike版 部署文档欢迎经验分享,欢迎笔记分享欢迎留言,或加QQ群663105353 ...

  4. 高可用OpenStack(Queen版)集群-4.keystone集群

    参考文档: Install-guide:https://docs.openstack.org/install-guide/ OpenStack High Availability Guide:http ...

  5. redis集群配置,spring整合jedis,缓存同步

    前台的商品数据(图片等加载缓慢)查询,先从redis缓存查询数据. redis是一个nosql数据库,内存版数据库,读取速度11w/s.本身具有内存淘汰机制,是单线程服务器(分时操作系统),线程安全. ...

  6. hbase单机及集群安装配置,整合到hadoop

    问题导读:1.配置的是谁的目录conf/hbase-site.xml,如何配置hbase.rootdir2.如何启动hbase?3.如何进入hbase shell?4.ssh如何达到互通?5.不安装N ...

  7. Redis集群与spring的整合

    上一篇详细的赘述了Redis的curd操作及集群的搭建.下面我们开始将他整合到我们实际的项目中去.我的项目采用的是标准的ssm框架,ssm框架这里不说,直接开始整合. 首先在maven管理中将我们的j ...

  8. 如何在Windows上部署Redis集群和SpringBoot进行整合

    一.安装Redis的Windows版本并进行配置 (1)下载链接 https://github.com/microsoftarchive/redis/releases (2)将下载后的Redis复制成 ...

  9. openstack——Rabbitmq集群部署

    一.前期准备 1.条件:准备3台Linux系统虚拟机,保持系统版本一致,确保配置好yum源,及网络源     2.3台虚拟机做静态解析 [root@yun1 ~]# cat /etc/hosts 12 ...

随机推荐

  1. nginx proxy超时报错 upstream timed out (110: Connec...

    环境介绍 服务器:centos6.4服务:nginx proxy 问题描述: 然后查找  /opt/usr/nginx/1.4.0/logs  错误 error.log日志提示如下 2015/01/0 ...

  2. MyBatis查询传一个参数时报错:There is no getter for property named 'sleevetype' in 'class java.lang.Integer

    用MyBatis进行查询,传入参数只有一个时(非Map)如int,报错 There is no getter for property named 'sleevetype' in 'class jav ...

  3. JS Resizable Panel 练习

    Resizable Panel HTML <!doctype html> <html> <head> <title>Resizable Panel< ...

  4. http://crunchify.com/simplest-spring-mvc-hello-world-example-tutorial-spring-model-view-controller-tips/ 非常棒的spring入门,maven,以及eclipse

    http://crunchify.com/simplest-spring-mvc-hello-world-example-tutorial-spring-model-view-controller-t ...

  5. B/S C/S架构的界面测试

    网站是B/S架构的典型,从做网站的有限经验来整理一下B/S测试的基本要点,并把它与C/S进行区分. 与C/S相比,以下4个测试是除了常用测试外还要注意的: (1)链接测试 (2)表单测试 (3)脚本测 ...

  6. jQuery基础细节

    使用CDN版的jQuery         用托管在公共CDN(Content Delivery Network,内容分发网络)上的jQuery库,CDN是一种内容分发网络,当用户请求其数据时,CDN ...

  7. Linux下链接mysql数据库的命令

    一.MySQL 连接本地数据库,用户名为“root”,密码“123”(注意:“-p”和“123” 之间不能有空格) C:\>mysql -h localhost -u root -p123 二. ...

  8. Entity Framework CodeFirst尝试

    前言 Code First模式我们称之为“代码优先”模式,是从EF4.1开始新建加入的功能.使用Code First模式进行EF开发时开发人员只需要编写对应的数据类(其实就是领域模型的实现过程),然后 ...

  9. cf.VK CUP 2015.B.Mean Requests

    Mean Requests time limit per test 4 seconds memory limit per test 256 megabytes input standard input ...

  10. VS2010 使用时选择代码或双击时出错,点击窗口按钮后VS自动重启问题

    VS2010 使用时选择代码或双击时出错崩溃,点击窗口按钮后VS自动重启问题 下载补丁,打上补丁之后,重启电脑,解决了问题. WindowsXP的下载地址:Windows XP 更新程序 (KB971 ...