全コンポーネントを連携させることが目標。
- OpenStack/Essex Configuration 01:DB, Queue
- OpenStack/Essex Configuration 02:KeyStone
- OpenStack/Essex Configuration 03:Swift
- OpenStack/Essex Configuration 04:Glance
- OpenStack/Essex Configuration 05:Nova
- OpenStack/Essex Configuration 06:Horizon
OpenStack/Essex RPMs
- OpenStack/Essex RPM Nova/Horizon
- OpenStack/Essex RPM Swift/Keystone/Glance
パッケージの導入
リポジトリはこちらを利用:http://kvps-27-34-160-192.secure.ne.jp/pub/openstack-essex/
[root@opst-sw ~]# yum install openstack-swift.noarch
[root@opst-sw ~]# yum install openstack-swift-saio.noarch
openstack-swift-saio.noarch は Swift ALL in ONE をRPM化したパッケージ。
設定済みのコンフィグファイルと、フォーマットしたディスクイメージを含む。
[root@opst-sw ~]# yum install openstack-keystone
keystone連携するためにkeystoneパッケージが必要になる。
動作確認
openstack-swift-saio.noarch を導入すると、即Swiftを起動できるので、事前に動作確認をしておく。
*openstack-swift-saio はデフォルトでTempAuthを使った認証が行われている
[root@opst-sw ~]# df -h
Filesystem Size Used Avail Use% マウント位置 /dev/mapper/vg_root-lv_root 20G 3.4G 16G 19% / tmpfs 499M 0 499M 0% /dev/shm /dev/vda1 485M 31M 429M 7% /boot /mnt/disk0 504M 17M 462M 4% /swift/disk0 /mnt/disk1 504M 17M 462M 4% /swift/disk1 /mnt/disk2 504M 17M 462M 4% /swift/disk2 /mnt/disk3 504M 17M 462M 4% /swift/disk3 /mnt/disk4 504M 17M 462M 4% /swift/disk4
[root@opst-sw ~]# netstat -nap |grep python |grep LISTEN |sort
tcp 0 0 0.0.0.0:6000 0.0.0.0:* LISTEN 1564/python tcp 0 0 0.0.0.0:6001 0.0.0.0:* LISTEN 1558/python tcp 0 0 0.0.0.0:6002 0.0.0.0:* LISTEN 1559/python tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 1553/python
[root@opst-sw ~]# /etc/init.d/memcached restart
[root@opst-sw ~]# /etc/init.d/xinetd restart
[root@opst-sw ~]# swift-init all start
Starting container-updater...(/etc/swift/container-server.conf) Starting account-auditor...(/etc/swift/account-server.conf) Starting object-replicator...(/etc/swift/object-server.conf) Starting proxy-server...(/etc/swift/proxy-server.conf) Starting container-replicator...(/etc/swift/container-server.conf) Starting object-auditor...(/etc/swift/object-server.conf) Starting object-expirer...(/etc/swift/object-expirer.conf) Starting container-auditor...(/etc/swift/container-server.conf) Starting container-server...(/etc/swift/container-server.conf) Starting account-server...(/etc/swift/account-server.conf) Starting account-reaper...(/etc/swift/account-server.conf) Starting container-sync...(/etc/swift/container-server.conf) Starting account-replicator...(/etc/swift/account-server.conf) Starting object-updater...(/etc/swift/object-server.conf) Starting object-server...(/etc/swift/object-server.conf)
[root@opst-sw ~]# swift -A http://localhost:8080/auth/v1.0 -U admin:admin -K admin stat
Account: AUTH_admin Containers: 0 Objects: 0 Bytes: 0 Accept-Ranges: bytes X-Trans-Id: txef7767ba53b245a19b8b341931dd56a9
proxy-server.conf
Keystoneと連携するための設定をproxy-server.confへ行う。
[DEFAULT] bind_ip = 0.0.0.0 bind_port = 8080 # backlog = 4096 swift_dir = /etc/swift workers = 2 user = swift # cert_file = /etc/swift/proxy.crt # key_file = /etc/swift/proxy.key # expiring_objects_container_divisor = 86400 # You can specify default log routing here if you want: # log_name = swift # log_facility = LOG_LOCAL0 # log_level = INFO [pipeline:main] #pipeline = catch_errors healthcheck cache ratelimit tempauth proxy-server pipeline = catch_errors healthcheck cache ratelimit authtoken keystone proxy-server [app:proxy-server] use = egg:swift#proxy account_autocreate = true [filter:keystone] paste.filter_factory = keystone.middleware.swift_auth:filter_factory operator_roles = admin, swiftoperator [filter:authtoken] paste.filter_factory = keystone.middleware.auth_token:filter_factory service_port = 5000 service_host = 192.168.128.110 service_protocol = http auth_port = 35357 auth_host = 192.168.128.110 auth_token = ADMIN_keystone_token auth_protocol = http admin_token = ADMIN_keystone_token [filter:healthcheck] use = egg:swift#healthcheck [filter:cache] use = egg:swift#memcache memcache_servers = 127.0.0.1:11211 [filter:ratelimit] use = egg:swift#ratelimit [filter:domain_remap] use = egg:swift#domain_remap [filter:catch_errors] use = egg:swift#catch_errors [filter:cname_lookup] use = egg:swift#cname_lookup # Note: Put staticweb just after your auth filter(s) in the pipeline [filter:staticweb] use = egg:swift#staticweb # Note: Put tempurl just before your auth filter(s) in the pipeline [filter:tempurl] use = egg:swift#tempurl [filter:formpost] use = egg:swift#formpost # Note: Just needs to be placed before the proxy-server in the pipeline. [filter:name_check] use = egg:swift#name_check
Keystone連携の確認
[root@opst-sw swift]# swift-init proxy-server restart
[root@opst-sw swift]# swift -V 2 -A http://192.168.128.110:5000/v2.0 -U admin:admin -K admin stat
Account: AUTH_e3f5826b96f74985b5ad673de64e0afd Containers: 0 Objects: 0 Bytes: 0 Accept-Ranges: bytes X-Trans-Id: tx92d2335b8c6f41eaa59ba68519ea7dea[root@opst-sw swift]# swift -V 2 -A http://192.168.128.110:5000/v2.0 -U demo:demo -K demo stat
Account HEAD failed: http://10.0.0.130:8080/v1/AUTH_b38a3428d9b341bfbc9f616a28010e68 403 ForbiddenKeyStone連携において、Swiftを利用する権限は、operator_roles で指定されたロールを持つユーザのみ。
ユーザの作成と権限設定
operator_roles = admin, swiftoperator
swiftoperatorに権限を与えていく。keystoneサーバ上で操作
■作成イメージ
| tenant | user | role | |--------+-------+---------------| | pub1 | user1 | swiftoperator | | | user2 | swiftoperator | | | user3 | swiftoperator | | pub2 | user4 | swiftoperator | | | user5 | swiftoperator | | | user6 | Member |
■テナント作成
[keystone@opst-ky ~]$ keystone tenant-create --name="pub1"
| Property | Value | |-------------+----------------------------------| | description | None | | enabled | True | | id | 6e54b6a764e3490291d6179138e2782b | | name | pub1 |
[keystone@opst-ky ~]$ keystone tenant-create --name="pub2"
| Property | Value | |-------------+----------------------------------| | description | None | | enabled | True | | id | 3e9bd6fc8d714a01903151e14539b126 | | name | pub2 |
export PUBTENANT1=6e54b6a764e3490291d6179138e2782b
export PUBTENANT2=3e9bd6fc8d714a01903151e14539b126
■ロールの作成
[keystone@opst-ky ~]$ keystone role-create --name=swiftoperator
| Property | Value | |----------+----------------------------------| | id | 11a4700c237741db898bff3d5bac44d1 | | name | swiftoperator |
[keystone@opst-ky ~]$ keystone role-list
| id | name | |----------------------------------+----------------------| | 0f3ccb94533f44d69816f3ce615499ca | KeystoneAdmin | | 11a4700c237741db898bff3d5bac44d1 | swiftoperator | | 149361074fc943b0a010cae2666f6a1c | netadmin | | 45855c93f8b7484f8f00c73b830e719f | Member | | 87782a629e8246e2a71e7ab7d8cadedc | sysadmin | | b8da27650f5b45bb9fce6183f0256a28 | KeystoneServiceAdmin | | d6db3b3b678448ba84a334645ad9e4d1 | admin |
export DEMOROLE=45855c93f8b7484f8f00c73b830e719f
export SWROLE=11a4700c237741db898bff3d5bac44d1
■ユーザの作成
[keystone@opst-ky ~]$ keystone user-create --name=user1 --pass="user1"
[keystone@opst-ky ~]$ keystone user-create --name=user2 --pass="user2"
[keystone@opst-ky ~]$ keystone user-create --name=user3 --pass="user3"
[keystone@opst-ky ~]$ keystone user-create --name=user4 --pass="user4"
[keystone@opst-ky ~]$ keystone user-create --name=user5 --pass="user5"
[keystone@opst-ky ~]$ keystone user-create --name=user6 --pass="user6"
[keystone@opst-ky ~]$ keystone user-list
| id | enabled | email | name | |----------------------------------+---------+--------------------+--------| | bd5158ed087948dc974028036e5f65dd | True | admin@example.com | admin | | 1ff2e19b2bf8449bba1f5fccce9f023d | True | demo@example.com | demo | | 5c68d3d474544a479f43b3d20d2a2caf | True | swift@example.com | swift | | 61f8dc5df0fb48a2867078476cdd5b66 | True | glance@example.com | glance | | b10e6c4b56b5454a9370de87ceb7759d | True | nova@example.com | nova | | dad2bacaa50941f5a67430f4a0ff34b4 | True | None | user1 | | db8a0abd8e7144dbaed8e79f47466f89 | True | None | user2 | | c168ec00783344ca9fbc348abe6eb15a | True | None | user3 | | adbe3a16d2f347e3b571134f0f7051ab | True | None | user4 | | bd1a8dae933e45238b3b56999bd8e5ba | True | None | user5 | | 4de6e805c8b64b6db65ef24404d0349e | True | None | user6 |
export USER1=dad2bacaa50941f5a67430f4a0ff34b4
export USER2=db8a0abd8e7144dbaed8e79f47466f89
export USER3=c168ec00783344ca9fbc348abe6eb15a
export USER4=adbe3a16d2f347e3b571134f0f7051ab
export USER5=bd1a8dae933e45238b3b56999bd8e5ba
export USER6=4de6e805c8b64b6db65ef24404d0349e
■テナント・ロール・ユーザの関連付け
keystone user-role-add --user $USER1 --role $SWROLE --tenant_id $PUBTENANT1
keystone user-role-add --user $USER2 --role $SWROLE --tenant_id $PUBTENANT1
keystone user-role-add --user $USER3 --role $SWROLE --tenant_id $PUBTENANT1
keystone user-role-add --user $USER4 --role $SWROLE --tenant_id $PUBTENANT2
keystone user-role-add --user $USER5 --role $SWROLE --tenant_id $PUBTENANT2
keystone user-role-add --user $USER6 --role $DEMOROLE --tenant_id $PUBTENANT2
アクセス確認
通常のアクセス(エラーが出なければ成功している)
[root@opst-sw swift]# swift -V 2 -A http://192.168.128.110:5000/v2.0 -U pub1:user1 -K user1 list
[root@opst-sw swift]# swift -V 2 -A http://192.168.128.110:5000/v2.0 -U pub1:user2 -K user2 list
[root@opst-sw swift]# swift -V 2 -A http://192.168.128.110:5000/v2.0 -U pub1:user3 -K user3 list
[root@opst-sw swift]# swift -V 2 -A http://192.168.128.110:5000/v2.0 -U pub2:user4 -K user4 list
[root@opst-sw swift]# swift -V 2 -A http://192.168.128.110:5000/v2.0 -U pub2:user5 -K user5 list
[root@opst-sw swift]# swift -V 2 -A http://192.168.128.110:5000/v2.0 -U pub2:user6 -K user6 list
Account GET failed: http://10.0.0.130:8080/v1/AUTH_3e9bd6fc8d714a01903151e14539b126?format=json 403 Forbidden
[root@opst-sw swift]# swift -V 2 -A http://192.168.128.110:5000/v2.0 -U pub2:user1 -K user1 list
Auth GET failed: http://192.168.128.110:5000/v2.0/tokens 401 Not Authorized
[root@opst-sw swift]# swift -V 2 -A http://192.168.128.110:5000/v2.0 -U pub1:user4 -K user4 list
Auth GET failed: http://192.168.128.110:5000/v2.0/tokens 401 Not Authorized
テナントとアカウント
Swiftはテナント(アカウント)の中にユーザが存在する。
つまり、Swiftでは各テナントへ同じユーザ名を持つユーザを作成できるが、それぞれは別ユーザ扱いになる。
しかしKeystoneやNovaはユーザを作って、ユーザをテナントへ参加させる。
そのため、SwiftとKeystoneでは以下の意味が変わってくる。
| tenant | user | |--------+-------| | pub1 | user1 | | pub2 | user1 |Swiftから見ると、pub1に所属するuser1と、pub2に所属するuser1 という二人のユーザが存在する。
Keystoneから見ると、user1はpu1とpub2に所属している。
この状態を確認してみる。
keystone user-role-add --user $USER1 --role $SWROLE --tenant_id $PUBTENANT2
[root@opst-sw swift]# swift -V 2 -A http://192.168.128.110:5000/v2.0 -U pub1:user1 -K user1 list
[root@opst-sw swift]# swift -V 2 -A http://192.168.128.110:5000/v2.0 -U pub2:user1 -K user1 list
両者とも「同じユーザ」で認証OK。
[root@opst-sw swift]# swift -V 2 -A http://192.168.128.110:5000/v2.0 -U pub1:user1 -K user1 post cont01
[root@opst-sw swift]# swift -V 2 -A http://192.168.128.110:5000/v2.0 -U pub1:user1 -K user1 upload cont01 account.ring.gz
account.ring.gz
pub1側でコンテナと、オブジェクトのアップロード
[root@opst-sw swift]# swift -V 2 -A http://192.168.128.110:5000/v2.0 -U pub1:user1 -K user1 list
cont01
[root@opst-sw swift]# swift -V 2 -A http://192.168.128.110:5000/v2.0 -U pub1:user1 -K user1 list cont01
account.ring.gz
pub1側は確認できるが、
[root@opst-sw swift]# swift -V 2 -A http://192.168.128.110:5000/v2.0 -U pub2:user1 -K user1 list
[root@opst-sw swift]# swift -V 2 -A http://192.168.128.110:5000/v2.0 -U pub2:user1 -K user1 list cont01
Container 'cont01' not found
pub2側は確認できない。
Swift単体では同じユーザ名でも、所属するテナントが違えば別ユーザとなるため、個別にパスワードを設定できたが、Keystoneを使うと同じユーザになってしまう。この違いを認識しておく必要がある。
0 件のコメント:
コメントを投稿