使用Rest api管理Ceph閘道器
阿新 • • 發佈:2019-01-02
背景
開發基於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");
}
}