基於 fabric8 的 kubernetes-client 庫 創建 Secret

 

參考原文地址: https://blog.csdn.net/sss294438204/article/details/88741392

 

項目中需要通過SDK 向集羣內添加 Secret 資源,於是搜索了很多內容發現相關介紹甚少。僅找到一篇相關文章,按照作者實踐步驟測試發現報錯。最後翻看官方文檔也未能找到想要的答案。後通過自己測試反推找到答案,特此記錄如下:

以下是官方文檔對 Secret 資源操作的相關示例:

官方文檔:https://github.com/fabric8io/kubernetes-client/blob/master/doc/CHEATSHEET.md#secret

上述示例僅爲 Opaque 類型數據創建,且實際操作時需要對相關字段進行Base64後纔可正常保存。關於 Opaque 類型不再過多敘述。

 

以下是針對 kubernetes.io/dockerconfigjson 類型數據創建(主要也是存儲 docker-registy 信息)

 

首先簡單分析下我們需要提供的數據格式內容,原格式內容如下:

{"auths":{"registry.cn-beijing.aliyuncs.com":{"username":"myUsername","password":"myPwd","auth":"bXlVc2VybmFtZTpteVB3ZA=="}}}

1. registry.cn-beijing.aliyuncs.com 爲 docker-registy 的請求地址。

2. username 爲 docker-registy 的用戶名。

3. password 爲 docker-registy 的密碼。

4. auth 爲 "用戶名:密碼"  經過Base64 後的字符串。(注意中間的冒號) encode(myUsername:myPwd) 

 

這個json數據其實也是 docker 的 config.json 文件內容

 

代碼部分如下:

private Secret createRegistrySecret(DockerRegistry info){

        Base64.Encoder encoder = Base64.getEncoder();
        // 生成 auth 部分得 Base64 字符串
        String authStr = String.format("%s:%s", info.getUsername(), info.getPassword());
        String enStr = encoder.encodeToString(authStr.getBytes());
        // 將相關 docker-registry 信息替換
        String dataStr =  String.format("{\"auths\":{\"%s\":{\"username\":\"%s\",\"password\":\"%s\",\"auth\":\"%s\"}}}", 
                info.getAddress(), info.getUsername(), info.getPassword(), enStr);
        // 對 JSON 字符串在進行 Base64 加密
        dataStr = encoder.encodeToString(dataStr.getBytes());
        
        // 創建 Secret 資源對象
        Secret registrySecret = new SecretBuilder()
                .withNewMetadata()
                .withName(info.getName())
                .endMetadata()
                .addToData(".dockerconfigjson", dataStr)
                .withType("kubernetes.io/dockerconfigjson")
                .build();
        return registrySecret;
    }

注意事項:

1.  一定要使用 addToData() 方法添加數據

2. addToData() 方法的第一個參數必須是 .dockerconfigjson

3. 需要指定具體類型 .withType("kubernetes.io/dockerconfigjson")

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章