3.7. 同じプール内の分離された名前空間内でのイメージの分離
OpenStack または OpenShift Container Storage などの上位システムなしで Ceph ブロックデバイスを直接使用する場合、特定のブロックデバイスイメージへのユーザーアクセスを制限することができませんでした。CephX 機能と組み合わせると、ユーザーを特定のプール名前空間に制限して、イメージへのアクセスを制限することができます。
新規レベルのアイデンティティーである RADOS 名前空間を使用してオブジェクトを特定し、プール内の rados クライアント間を分離できます。たとえば、クライアントは、クライアント向けの名前空間でのみ完全なパーミッションが割り当てられます。これにより、テナントごとに異なる RADOS クライアントが使用されるので、多くの異なるテナントが独自のブロックデバイスイメージにアクセスしているブロックデバイスに特に便利です。
同じプール内の分離された名前空間内でブロックデバイスイメージを分離することができます。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- すべてのカーネルを 4x および librbd、全クライアントの Librados にアップグレードする。
- モニターおよびクライアントノードへの root レベルのアクセス。
手順
rbd
プールを作成します。構文
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ceph osd pool create POOL_NAME PG_NUM
ceph osd pool create POOL_NAME PG_NUM
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ceph osd pool create mypool 100
[root@mon ~]# ceph osd pool create mypool 100 pool 'mypool' created
rbd
プールを RBD アプリケーションに関連付けます。構文
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ceph osd pool application enable POOL_NAME rbd
ceph osd pool application enable POOL_NAME rbd
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ceph osd pool application enable mypool rbd
[root@mon ~]# ceph osd pool application enable mypool rbd enabled application 'rbd' on pool 'mypool'
RBD アプリケーションでプールを初期化します。
構文
Copy to Clipboard Copied! Toggle word wrap Toggle overflow rbd pool init -p POOL_NAME
rbd pool init -p POOL_NAME
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow rbd pool init -p mypool
[root@mon ~]# rbd pool init -p mypool
2 つの名前空間を作成します。
構文
Copy to Clipboard Copied! Toggle word wrap Toggle overflow rbd namespace create --namespace NAMESPACE
rbd namespace create --namespace NAMESPACE
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow rbd namespace create --namespace namespace1 rbd namespace create --namespace namespace2 rbd namespace ls --format=json
[root@mon ~]# rbd namespace create --namespace namespace1 [root@mon ~]# rbd namespace create --namespace namespace2 [root@mon ~]# rbd namespace ls --format=json [{"name":"namespace2"},{"name":"namespace1"}]
ユーザー 2 つにこの名前空間へのアクセスを割り当てます。
構文
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ceph auth get-or-create client.USER_NAME mon 'profile rbd' osd 'profile rbd pool=rbd namespace=NAMESPACE' -o /etc/ceph/client.USER_NAME.keyring
ceph auth get-or-create client.USER_NAME mon 'profile rbd' osd 'profile rbd pool=rbd namespace=NAMESPACE' -o /etc/ceph/client.USER_NAME.keyring
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ceph auth get-or-create client.testuser mon 'profile rbd' osd 'profile rbd pool=rbd namespace=namespace1' -o /etc/ceph/client.testuser.keyring ceph auth get-or-create client.newuser mon 'profile rbd' osd 'profile rbd pool=rbd namespace=namespace2' -o /etc/ceph/client.newuser.keyring
[root@mon ~]# ceph auth get-or-create client.testuser mon 'profile rbd' osd 'profile rbd pool=rbd namespace=namespace1' -o /etc/ceph/client.testuser.keyring [root@mon ~]# ceph auth get-or-create client.newuser mon 'profile rbd' osd 'profile rbd pool=rbd namespace=namespace2' -o /etc/ceph/client.newuser.keyring
クライアントのキーを取得します。
構文
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ceph auth get client.USER_NAME
ceph auth get client.USER_NAME
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ceph auth get client.testuser ceph auth get client.newuser
[root@mon ~]# ceph auth get client.testuser [client.testuser] key = AQDMp61hBf5UKRAAgjQ2In0Z3uwAase7mrlKnQ== caps mon = "profile rbd" caps osd = "profile rbd pool=rbd namespace=namespace1" exported keyring for client.testuser [root@mon ~]# ceph auth get client.newuser [client.newuser] key = AQDfp61hVfLFHRAA7D80ogmZl80ROY+AUG4A+Q== caps mon = "profile rbd" caps osd = "profile rbd pool=rbd namespace=namespace2" exported keyring for client.newuser
ブロックデバイスイメージを作成し、プール内の事前定義済みの名前空間を使用します。
構文
Copy to Clipboard Copied! Toggle word wrap Toggle overflow rbd create --namespace NAMESPACE IMAGE_NAME --size SIZE_IN_GB
rbd create --namespace NAMESPACE IMAGE_NAME --size SIZE_IN_GB
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow rbd create --namespace namespace1 image01 --size 1G rbd create --namespace namespace2 image02 --size 1G
[root@mon ~]# rbd create --namespace namespace1 image01 --size 1G [root@mon ~]# rbd create --namespace namespace2 image02 --size 1G
オプション: 名前空間および関連付けられたイメージの詳細を取得します。
構文
Copy to Clipboard Copied! Toggle word wrap Toggle overflow rbd --namespace NAMESPACE ls --long
rbd --namespace NAMESPACE ls --long
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow rbd --namespace namespace1 ls --long rbd --namespace namespace2 ls --long
[root@mon ~]# rbd --namespace namespace1 ls --long NAME SIZE PARENT FMT PROT LOCK image01 1 GiB 2 [root@mon ~]# rbd --namespace namespace2 ls --long NAME SIZE PARENT FMT PROT LOCK image02 1 GiB 2
Ceph 設定ファイルを Monitor ノードからクライアントノードにコピーします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow scp /etc/ceph/ceph.conf root@CLIENT_NODE:/etc/ceph/
scp /etc/ceph/ceph.conf root@CLIENT_NODE:/etc/ceph/
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow scp /etc/ceph/ceph.conf root@host02:/etc/ceph/
[root@mon ~]# scp /etc/ceph/ceph.conf root@host02:/etc/ceph/ root@host02's password: ceph.conf 100% 497 724.9KB/s 00:00
管理キーリングを Ceph Monitor ノードからクライアントノードにコピーします。
構文
Copy to Clipboard Copied! Toggle word wrap Toggle overflow scp /etc/ceph/ceph.client.admin.keyring root@CLIENT_NODE:/etc/ceph
scp /etc/ceph/ceph.client.admin.keyring root@CLIENT_NODE:/etc/ceph
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow scp /etc/ceph/ceph.client.admin.keyring root@host02:/etc/ceph/
[root@mon ~]# scp /etc/ceph/ceph.client.admin.keyring root@host02:/etc/ceph/ root@host02's password: ceph.client.admin.keyring 100% 151 265.0KB/s 00:00
ユーザーのキーリングを Ceph Monitor ノードからクライアントノードにコピーします。
構文
Copy to Clipboard Copied! Toggle word wrap Toggle overflow scp /etc/ceph/ceph.client.USER_NAME.keyring root@CLIENT_NODE:/etc/ceph/
scp /etc/ceph/ceph.client.USER_NAME.keyring root@CLIENT_NODE:/etc/ceph/
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow scp /etc/ceph/client.newuser.keyring root@host02:/etc/ceph/ scp /etc/ceph/client.testuser.keyring root@host02:/etc/ceph/
[root@mon ~]# scp /etc/ceph/client.newuser.keyring root@host02:/etc/ceph/ [root@mon ~]# scp /etc/ceph/client.testuser.keyring root@host02:/etc/ceph/
ブロックデバイスイメージをマッピングします。
構文
Copy to Clipboard Copied! Toggle word wrap Toggle overflow rbd map --name NAMESPACE IMAGE_NAME -n client.USER_NAME --keyring /etc/ceph/client.USER_NAME.keyring
rbd map --name NAMESPACE IMAGE_NAME -n client.USER_NAME --keyring /etc/ceph/client.USER_NAME.keyring
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow rbd map --namespace namespace1 image01 -n client.testuser --keyring=/etc/ceph/client.testuser.keyring rbd map --namespace namespace2 image02 -n client.newuser --keyring=/etc/ceph/client.newuser.keyring
[root@mon ~]# rbd map --namespace namespace1 image01 -n client.testuser --keyring=/etc/ceph/client.testuser.keyring /dev/rbd0 [root@mon ~]# rbd map --namespace namespace2 image02 -n client.newuser --keyring=/etc/ceph/client.newuser.keyring /dev/rbd1
これにより、同じプール内の他の名前空間のユーザーにはアクセスできません。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow rbd map --namespace namespace2 image02 -n client.testuser --keyring=/etc/ceph/client.testuser.keyring rbd map --namespace namespace1 image01 -n client.newuser --keyring=/etc/ceph/client.newuser.keyring
[root@mon ~]# rbd map --namespace namespace2 image02 -n client.testuser --keyring=/etc/ceph/client.testuser.keyring rbd: warning: image already mapped as /dev/rbd1 rbd: sysfs write failed rbd: error asserting namespace: (1) Operation not permitted In some cases useful info is found in syslog - try "dmesg | tail". 2021-12-06 02:49:08.106 7f8d4fde2500 -1 librbd::api::Namespace: exists: error asserting namespace: (1) Operation not permitted rbd: map failed: (1) Operation not permitted [root@mon ~]# rbd map --namespace namespace1 image01 -n client.newuser --keyring=/etc/ceph/client.newuser.keyring rbd: warning: image already mapped as /dev/rbd0 rbd: sysfs write failed rbd: error asserting namespace: (1) Operation not permitted In some cases useful info is found in syslog - try "dmesg | tail". 2021-12-03 12:16:24.011 7fcad776a040 -1 librbd::api::Namespace: exists: error asserting namespace: (1) Operation not permitted rbd: map failed: (1) Operation not permitted
デバイスを確認します。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow rbd showmapped
[root@mon ~]# rbd showmapped id pool namespace image snap device 0 rbd namespace1 image01 - /dev/rbd0 1 rbd namespace2 image02 - /dev/rbd1