1. 程式人生 > >使用Rest api管理Ceph閘道器

使用Rest api管理Ceph閘道器

背景

  開發基於Ceph RadosGW的微服務,需要實現呼叫方可以通過rest api就能建立使用者,獲取使用者資訊等功能。

實現

  Ceph的RadosGW自身就有該功能,這些建立使用者、獲取使用者資訊、獲取使用情況等的功能被稱為Admin Operation(管理操作)。我們直接通過RadosGW的URL再加上/admin就可以訪問執行管理操作了,比如RadosGW的URL為http://192.168.1.2:8080,那麼管理操作的URL就是http://192.168.1.2:8080/admin
  管理操作的授權和S3的授權機制一樣,只是建立S3使用者之後,需要再給響應的使用者附上管理許可權。如下,我們會建立一個有管理許可權的使用者。
  在Ceph叢集中執行以下語句(當然,你可以換上你需要的使用者名稱和key):

$ sudo radosgw-admin user create --uid="my_s3_user" --display-name="my_user_display_name" --access-key="my_admin_access_key" --secret-key="my_admin_secret_key"
$ sudo radosgw-admin --id admin caps add --caps="buckets=*;users=*;usage=*;metadata=*" --uid="my_s3_user"

  如上,便建立了一個擁有管理許可權的使用者,接下來就可以使用官網提供的api(

點選瀏覽)來使用了。
  另外,如果不想直接使用Rest api,也可以使用一些封裝好的第三方庫。這裡,介紹一個Java的第三方庫(點選瀏覽),也正是我現在正使用的一個庫。
  以下的示例程式碼,建立了一個S3使用者,獲取了S3證書,並設定了配額。

    private static void testRadosAdmin() {
        String accessKey = "my_admin_access_key";
        String secretKey = "my_admin_secret_key";
        String adminEndpoint = "http://109.105.115.102:7480/admin"
; RgwAdmin rgwAdmin = new RgwAdminBuilder().accessKey(accessKey).secretKey(secretKey).endpoint(adminEndpoint) .build(); String userId = "8eeb3bb0-eda0-48f9-a18f-c04daecb5e69"; User user = null; // create a user user = rgwAdmin.createUser(userId); if (user != null) { // get user S3Credential for (S3Credential credential : user.getS3Credentials()) { System.out.println("userid: " + credential.getUserId() + ",getAccessKey: " + credential.getAccessKey() + ", getSecretKey: " + credential.getSecretKey()); } // set user quota, such as maxObjects and maxSize(KB) rgwAdmin.setUserQuota(userId, 1000, 1024 * 1024 * 5); Optional<Quota> quota = rgwAdmin.getUserQuota(userId); if (quota.isPresent()) { System.out.println("quota KB: " + quota.get().getMaxSizeKb()); } } else { System.out.println("create user failed"); } }