0

我想知道是否可以将字节数组作为 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 机密中使用了生成的字符串。秘密创建成功。现在我希望在 kubernetes 中运行的 Spring Boot 应用程序读取和解码该值。但是,我得到一个 IllegalArgumentException (Illegal base64 character) 当本地运行应用程序从属性文件中读取相同的令牌时,它可以被解码。

所以我的问题又来了:是否可以使用字节数组作为 kubernetes 机密?

4

2 回答 2

1

kubectl create secret generic在使用--from-fileor --from-literal(正如@fg78nc 所避免的那样)创建秘密时,需要使用普通值。

从二进制值手动创建密钥时需要 base64 编码的值。

如果秘密的值是二进制值,我建议将秘密安装为一个卷并将其作为字节数组从文件中读取——它将在文件中进行 base64 解码。

当从秘密创建的环境变量中获取值时,秘密会自动进行 base64 解码,从作为卷安装的文件中获取值,但不是通过kubectl get secret或直接使用 Kubernetes API ( GET /api/v1/namespaces/{namespace}/secrets/{name})。

于 2019-12-11T18:00:50.400 回答
1

您无需手动对其进行编码。只需向 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:
于 2019-12-11T16:52:34.827 回答