我想知道是否有可能将字节数组作为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(非法的base64字符) 在本地运行应用程序时,从属性文件中读取相同的令牌,则可以对其进行解码。
所以我的问题又来了:是否可以将字节数组用作kubernetes的秘密?
答案 0 :(得分:1)
您不需要手动对其进行编码。只要提供纯文本作为秘密,它将由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:
答案 1 :(得分:1)
使用kubectl create secret generic
或--from-file
(如@ fg78nc所指)通过--from-literal
创建密钥时,期望使用纯值。
base64编码的值。
如果secret的值是一个二进制值,我建议将secret安装为一个卷,并以字节数组的形式从文件中读取它-该文件将在base64中解码。
从秘密中创建的环境变量,作为卷装入的文件中获取秘密值时,秘密会自动进行base64解码,但是kubectl get secret
或直接使用Kubernetes API({{1 }}。