Kubectl 创建多行秘密

pot*_*ato 4 kubernetes google-kubernetes-engine kubectl kubernetes-helm

我正在尝试将服务帐户放入秘密中 - 一年前我这样做过,它可以工作,但现在 - 无论我如何处理它,应用程序都看不到它,并说存在Input byte array has incorrect ending byte- 创建正常秘密时我知道你必须换一条新线所以

echo -n "secret" | base64
Run Code Online (Sandbox Code Playgroud)

并将该值秘密保存并应用,但我的多行文件

cat secret.json
{
  "type": "service_account",
  "project_id": "smth-smth",
  "private_key_id": "blabla"
...
}
Run Code Online (Sandbox Code Playgroud)

无论我如何处理 - 无论是像第一个示例中那样手动放置,还是用

cat secret.json | base64

# or 

base64 < secret.json
Run Code Online (Sandbox Code Playgroud)

秘密已创建,但应用程序抛出

Constructor threw exception; nested exception is java.lang.IllegalArgumentException: Input byte array has incorrect ending byte at 3104
Run Code Online (Sandbox Code Playgroud)

当我将新密钥与服务帐户的最后一个密钥进行比较时,差异在于输出的样子

工作原理是这样的 - 当我尝试解密 Base64 时

echo -n "<long string of base64 encrypred sa> | base64 -D
    { "type": "service_account", "project_id": "blabla"... }
Run Code Online (Sandbox Code Playgroud)

所以它在一行中,我尝试解密的新 SA 以文件中的格式输出 - 所以 json 的每个部分都在新行中 - 我尝试手动将其全部放在一行中,但没有成功

有人知道吗?如何正确地将多行文件放入秘密(base64)中?

koe*_*koe 6

从文件创建机密的最简单方法是使用kubectl create secret generic.

将文件放入secret.json文件夹中config,然后运行:

kubectl create secret generic my-secret --from-file=config
Run Code Online (Sandbox Code Playgroud)

my-secret您将获得一个包含您的文件的密钥的秘密secret.json(然后您可以将其挂载到 Pod 卷)。