このセクションは、ストレージノード上で動作するアカウント、コンテナ、およびオブジェクトサービスに対する要求を処理するプロキシサービスをインストールおよび設定する方法について紹介します。また、簡単のため、ここではコントローラーノードにプロキシーサービスをインストールして設定を行います。

クレデンシャル、エンティティ、エンドポイントの作成

admin クレデンシャルを読み込み、管理者専用 CLI コマンドへのアクセス権を取得します。

[root@controller ~]# . openrc/admin-openrc 
[root@controller ~]# 

swift ユーザーを作成します。ここでは、swift ユーザーのパスワードは SWIFT_PASS としているので、適宜変更して下さい。

[root@controller ~]# openstack user create --domain default --password-prompt swift
User Password: SWIFT_PASS 
Repeat User Password: SWIFT_PASS 
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | 1085576577104c85b4d4d34362c6072e |
| name                | swift                            |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+
[root@controller ~]# 

admin ロールを swift ユーザーに追加します。

[root@controller ~]# openstack role add --project service --user swift admin
[root@controller ~]# 

swift サービスエンティティーを作成します。

[root@controller ~]# openstack service create --name swift \
>   --description "OpenStack Object Storage" object-store
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Object Storage         |
| enabled     | True                             |
| id          | 628ecad16c7745daacee1638998cd5b3 |
| name        | swift                            |
| type        | object-store                     |
+-------------+----------------------------------+
[root@controller ~]# 

Object Storage service API エンドポイントを作成します。

[root@controller ~]# openstack endpoint create --region RegionOne \
>   object-store public http://controller:8080/v1/AUTH_%\(project_id\)s
+--------------+-----------------------------------------------+
| Field        | Value                                         |
+--------------+-----------------------------------------------+
| enabled      | True                                          |
| id           | 912da038b1cb4f0596098e6b699a5816              |
| interface    | public                                        |
| region       | RegionOne                                     |
| region_id    | RegionOne                                     |
| service_id   | 628ecad16c7745daacee1638998cd5b3              |
| service_name | swift                                         |
| service_type | object-store                                  |
| url          | http://controller:8080/v1/AUTH_%(project_id)s |
+--------------+-----------------------------------------------+
[root@controller ~]# 
[root@controller ~]# openstack endpoint create --region RegionOne \
>   object-store internal http://controller:8080/v1/AUTH_%\(project_id\)s
+--------------+-----------------------------------------------+
| Field        | Value                                         |
+--------------+-----------------------------------------------+
| enabled      | True                                          |
| id           | 6fbb09c84e0c42419784cc00dfdacdd8              |
| interface    | internal                                      |
| region       | RegionOne                                     |
| region_id    | RegionOne                                     |
| service_id   | 628ecad16c7745daacee1638998cd5b3              |
| service_name | swift                                         |
| service_type | object-store                                  |
| url          | http://controller:8080/v1/AUTH_%(project_id)s |
+--------------+-----------------------------------------------+
[root@controller ~]# 
[root@controller ~]# openstack endpoint create --region RegionOne \
>   object-store admin http://controller:8080/v1
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | b44ac88dd2024a78888cca21521526f9 |
| interface    | admin                            |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 628ecad16c7745daacee1638998cd5b3 |
| service_name | swift                            |
| service_type | object-store                     |
| url          | http://controller:8080/v1        |
+--------------+----------------------------------+
[root@controller ~]# 

コンポーネントのインストールと設定

パッケージをインストールします。

[root@controller ~]# yum --enablerepo=centos-openstack-rocky -y install openstack-swift-proxy python-swiftclient \
>   python-keystoneclient python-keystonemiddleware \
>   memcached
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.riken.jp
 * extras: ftp.riken.jp
 * updates: ftp.riken.jp
base                                                               | 3.6 kB  00:00:00     
centos-ceph-luminous                                               | 2.9 kB  00:00:00     
centos-openstack-rocky                                             | 2.9 kB  00:00:00     
centos-qemu-ev                                                     | 2.9 kB  00:00:00     
extras                                                             | 3.4 kB  00:00:00     
updates                                                            | 3.4 kB  00:00:00     
(1/3): updates/7/x86_64/primary_db                                 | 6.0 MB  00:00:01     
(2/3): centos-qemu-ev/7/x86_64/primary_db                          |  51 kB  00:00:01     
(3/3): centos-ceph-luminous/7/x86_64/primary_db                    | 118 kB  00:00:03     
パッケージ python2-swiftclient-3.6.0-1.el7.noarch はインストール済みか最新バージョンです
パッケージ 1:python2-keystoneclient-3.17.0-1.el7.noarch はインストール済みか最新バージョンです
パッケージ python2-keystonemiddleware-5.2.0-1.el7.noarch はインストール済みか最新バージョンです
パッケージ memcached-1.5.6-1.el7.x86_64 はインストール済みか最新バージョンです
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ openstack-swift-proxy.noarch 0:2.19.0-1.el7 を インストール
--> 依存性の処理をしています: python-swift = 2.19.0-1.el7 のパッケージ: openstack-swift-proxy-2.19.0-1.el7.noarch
--> 依存性の処理をしています: python2-ceilometermiddleware のパッケージ: openstack-swift-proxy-2.19.0-1.el7.noarch
--> トランザクションの確認を実行しています。
---> パッケージ python-swift.noarch 0:2.19.0-1.el7 を インストール
--> 依存性の処理をしています: python2-pyeclib のパッケージ: python-swift-2.19.0-1.el7.noarch
--> 依存性の処理をしています: python2-dns のパッケージ: python-swift-2.19.0-1.el7.noarch
---> パッケージ python2-ceilometermiddleware.noarch 0:1.3.0-1.el7 を インストール
--> トランザクションの確認を実行しています。
---> パッケージ python-dns.noarch 0:1.15.0-5.el7 を インストール
--> 依存性の処理をしています: python-crypto のパッケージ: python-dns-1.15.0-5.el7.noarch
---> パッケージ python2-pyeclib.x86_64 0:1.5.0-3.el7 を インストール
--> 依存性の処理をしています: liberasurecode >= 1.5.0 のパッケージ: python2-pyeclib-1.5.0-3.el7.x86_64
--> 依存性の処理をしています: liberasurecode.so.1()(64bit) のパッケージ: python2-pyeclib-1.5.0-3.el7.x86_64
--> トランザクションの確認を実行しています。
---> パッケージ liberasurecode.x86_64 0:1.5.0-1.el7 を インストール
---> パッケージ python2-crypto.x86_64 0:2.6.1-15.el7 を インストール
--> 依存性の処理をしています: libtomcrypt.so.0()(64bit) のパッケージ: python2-crypto-2.6.1-15.el7.x86_64
--> トランザクションの確認を実行しています。
---> パッケージ libtomcrypt.x86_64 0:1.17-26.el7 を インストール
--> 依存性の処理をしています: libtommath >= 0.42.0 のパッケージ: libtomcrypt-1.17-26.el7.x86_64
--> 依存性の処理をしています: libtommath.so.0()(64bit) のパッケージ: libtomcrypt-1.17-26.el7.x86_64
--> トランザクションの確認を実行しています。
---> パッケージ libtommath.x86_64 0:0.42.0-6.el7 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

==========================================================================================
 Package                        アーキテクチャー
                                         バージョン        リポジトリー              容量
==========================================================================================
インストール中:
 openstack-swift-proxy          noarch   2.19.0-1.el7      centos-openstack-rocky    33 k
依存性関連でのインストールをします:
 liberasurecode                 x86_64   1.5.0-1.el7       centos-openstack-rocky    54 k
 libtomcrypt                    x86_64   1.17-26.el7       extras                   224 k
 libtommath                     x86_64   0.42.0-6.el7      extras                    36 k
 python-dns                     noarch   1.15.0-5.el7      centos-openstack-rocky   248 k
 python-swift                   noarch   2.19.0-1.el7      centos-openstack-rocky   1.4 M
 python2-ceilometermiddleware   noarch   1.3.0-1.el7       centos-openstack-rocky    30 k
 python2-crypto                 x86_64   2.6.1-15.el7      extras                   477 k
 python2-pyeclib                x86_64   1.5.0-3.el7       centos-openstack-rocky    47 k

トランザクションの要約
==========================================================================================
インストール  1 パッケージ (+8 個の依存関係のパッケージ)

総ダウンロード容量: 2.5 M
インストール容量: 10 M
Downloading packages:
(1/9): libtommath-0.42.0-6.el7.x86_64.rpm                          |  36 kB  00:00:00     
(2/9): libtomcrypt-1.17-26.el7.x86_64.rpm                          | 224 kB  00:00:00     
(3/9): liberasurecode-1.5.0-1.el7.x86_64.rpm                       |  54 kB  00:00:01     
(4/9): openstack-swift-proxy-2.19.0-1.el7.noarch.rpm               |  33 kB  00:00:01     
(5/9): python-dns-1.15.0-5.el7.noarch.rpm                          | 248 kB  00:00:01     
(6/9): python2-crypto-2.6.1-15.el7.x86_64.rpm                      | 477 kB  00:00:00     
(7/9): python2-ceilometermiddleware-1.3.0-1.el7.noarch.rpm         |  30 kB  00:00:00     
(8/9): python2-pyeclib-1.5.0-3.el7.x86_64.rpm                      |  47 kB  00:00:00     
(9/9): python-swift-2.19.0-1.el7.noarch.rpm                        | 1.4 MB  00:00:07     
------------------------------------------------------------------------------------------
合計                                                      266 kB/s | 2.5 MB  00:00:09     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : python2-ceilometermiddleware-1.3.0-1.el7.noarch           1/9 
  インストール中          : libtommath-0.42.0-6.el7.x86_64                            2/9 
  インストール中          : libtomcrypt-1.17-26.el7.x86_64                            3/9 
  インストール中          : python2-crypto-2.6.1-15.el7.x86_64                        4/9 
  インストール中          : python-dns-1.15.0-5.el7.noarch                            5/9 
  インストール中          : liberasurecode-1.5.0-1.el7.x86_64                         6/9 
  インストール中          : python2-pyeclib-1.5.0-3.el7.x86_64                        7/9 
  インストール中          : python-swift-2.19.0-1.el7.noarch                          8/9 
  インストール中          : openstack-swift-proxy-2.19.0-1.el7.noarch                 9/9 
  検証中                  : liberasurecode-1.5.0-1.el7.x86_64                         1/9 
  検証中                  : libtommath-0.42.0-6.el7.x86_64                            2/9 
  検証中                  : python2-pyeclib-1.5.0-3.el7.x86_64                        3/9 
  検証中                  : openstack-swift-proxy-2.19.0-1.el7.noarch                 4/9 
  検証中                  : python2-ceilometermiddleware-1.3.0-1.el7.noarch           5/9 
  検証中                  : python-swift-2.19.0-1.el7.noarch                          6/9 
  検証中                  : python2-crypto-2.6.1-15.el7.x86_64                        7/9 
  検証中                  : libtomcrypt-1.17-26.el7.x86_64                            8/9 
  検証中                  : python-dns-1.15.0-5.el7.noarch                            9/9 

インストール:
  openstack-swift-proxy.noarch 0:2.19.0-1.el7                                             

依存性関連をインストールしました:
  liberasurecode.x86_64 0:1.5.0-1.el7   libtomcrypt.x86_64 0:1.17-26.el7                  
  libtommath.x86_64 0:0.42.0-6.el7      python-dns.noarch 0:1.15.0-5.el7                  
  python-swift.noarch 0:2.19.0-1.el7    python2-ceilometermiddleware.noarch 0:1.3.0-1.el7 
  python2-crypto.x86_64 0:2.6.1-15.el7  python2-pyeclib.x86_64 0:1.5.0-3.el7              

完了しました!
[root@controller ~]# 

プロキシーサービスの設定ファイル( /etc/swift/proxy-server.conf )をバックアップします。

[root@controller ~]# ls /etc/swift/
container-reconciler.conf  proxy-server       swift.conf
object-expirer.conf        proxy-server.conf
[root@controller ~]# 

[root@controller ~]# cp -rp /etc/swift/proxy-server.conf /etc/swift/proxy-server.conf.org
[root@controller ~]# 

[root@controller ~]# ls /etc/swift/
container-reconciler.conf  proxy-server       proxy-server.conf.org
object-expirer.conf        proxy-server.conf  swift.conf
[root@controller ~]# 

プロキシーサービスの設定ファイルを Object Storage のソースディレクトリーから取得します。

[root@controller ~]# curl -o /etc/swift/proxy-server.conf https://git.openstack.org/cgit/openstack/swift/plain/etc/proxy-server.conf-sample?h=stable/queens
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 41237  100 41237    0     0  29600      0  0:00:01  0:00:01 --:--:-- 29624
[root@controller ~]# 

プロキシーサービス( /etc/swift/proxy-server.conf )を編集し、以下設定します。

[root@controller ~]# vi /etc/swift/proxy-server.conf

[DEFAULT] セクションで、バインドするポート、ユーザー、設定ディレクトリーを設定します。

[DEFAULT]
...
bind_port = 8080
user = swift
swift_dir = /etc/swift

[pipeline:main] セクションで、適切なモジュールを有効にします。

[pipeline:main]
pipeline = catch_errors gatekeeper healthcheck proxy-logging cache container_sync bulk ratelimit authtoken keystoneauth container-quotas account-quotas slo dlo versioned_writes proxy-logging proxy-server

[app:proxy-server] セクションで、自動アカウント作成を有効にします。

[app:proxy-server]
use = egg:swift#proxy
...
account_autocreate = True

[filter:keystoneauth] セクションで、operator ロールを設定します。ここでは、admin ユーザー以外に、myrole ロールを割り当てているユーザーでもオブジェクトストレージが使用できるように設定しています。

[filter:keystoneauth]
use = egg:swift#keystoneauth
...
operator_roles = admin,myrole

[filter:authtoken] セクションに、Identity サービスへのアクセス方法を設定します。ここでは、swift ユーザーのパスワードは SWIFT_PASS としているので、実際の情報に置き換えてください。

[filter:authtoken]
paste.filter_factory = keystonemiddleware.auth_token:filter_factory
...
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_id = default
user_domain_id = default
project_name = service
username = swift
password = SWIFT_PASS
delay_auth_decision = True

[filter:cache] セクションに、memcached の位置を設定します。

[filter:cache]
use = egg:swift#memcache
...
memcache_servers = controller:11211

ファイアウォールでの通信許可

Object Storage サービス( Swift )で必要となる TCP 8080( Object Storage service API  )通信をファイアウォールで許可します。

[root@controller swift]# firewall-cmd --add-port=8080/tcp --permanent
success
[root@controller swift]# 

ファイアウォールの設定状況を確認します。

[root@controller swift]# firewall-cmd --list-port --zone=public --permanent
5000/tcp 5672/tcp 8778/tcp 6080/tcp 80/tcp 3306/tcp 9696/tcp 9292/tcp 8472/tcp 6081/tcp 6082/tcp 123/udp 67/udp 8776/tcp 8472/udp 9191/tcp 11211/tcp 8774/tcp 8775/tcp 8080/tcp
[root@controller swift]# 

firewalld をリロードし、設定を反映します。

[root@controller swift]# firewall-cmd --reload
success
[root@controller swift]#