簡體   English   中英

字節數組作為 kubernetes 的秘密?

[英]Byte array as kubernetes secret?

我想知道是否可以將字節數組作為 kubernetes 的秘密。 我創建了一個字節數組和一個 base64 編碼的字符串,如下所示

    SecureRandom random = new SecureRandom();
    byte bytes[] = new byte[32];

    random.nextBytes(bytes);
    for (int i = 0; i < bytes.length; i++) {
        System.out.print(bytes[i] + ",");
    }

    String token = Base64.getEncoder().withoutPadding().encodeToString(bytes);

然后我在 kubernetes secret 中使用了結果字符串。 秘密被成功創建。 現在,我希望在 kubernetes 中運行的 Spring Boot 應用程序讀取和解碼該值。 但是,我得到一個 IllegalArgumentException(非法 base64 字符)在本地運行應用程序從屬性文件讀取相同的標記時,它可以被解碼。

所以我再次提出問題:是否可以使用字節數組作為 kubernetes 的秘密?

您無需手動對其進行編碼。 只需向secret提供純文本,它將由k8s進行base64編碼。 否則它被編碼兩次。

kind: Secret
apiVersion: v1
stringData: # allows to add plain text (will be encoded by k8s and kept in Base64 encoded format under data) 
  foo: plain text
data:

無論使用--from-file還是--from-literal (如@fg78nc 所隱瞞的),在使用kubectl create secret generic時都需要普通值。

從二進制值手動創建 Secret時需要 base64 編碼的值。

如果 secret 的值是一個二進制值,我建議將 secret 作為一個卷掛載並從文件中讀取它作為一個字節數組 - 它將在文件中進行 base64 解碼。

當從秘密創建的環境變量中獲取值時,秘密會自動進行 base64 解碼,從作為卷安裝的文件中獲取值,但不是通過kubectl get secret或直接使用 Kubernetes API ( GET /api/v1/namespaces/{namespace}/secrets/{name} )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM