无法在Kubernetes中创建Secret:输入时存在非法的base64数据

Ale*_*ein 10 kubernetes

我想为我的kubernetes集群创建一个秘密。所以我写了以下dummy-secret.yaml文件:

apiVersion: v1
kind: Secret
metadata:
  name: dummy-secret
type: Opaque
data:
  API_KEY: bWVnYV9zZWNyZXRfa2V5
  API_SECRET: cmVhbGx5X3NlY3JldF92YWx1ZTE=
Run Code Online (Sandbox Code Playgroud)

运行时,kubectl create -f dummy-secret.yaml我收到以下消息:

Error from server (BadRequest): error when creating "dummy-secret.yaml": Secret in version "v1" cannot be handled as a Secret: v1.Secret: Data: decode base64: illegal base64 data at input byte 8, error found in #10 byte of ...|Q89_Hj1Aq","API_SECR|..., bigger context ...|sion":"v1","data":{"API_KEY":"af76fsdK_cQ89_Hj1Aq","API_SECRET":"bsdfmkwegwegwe"},"kind":"Secret","m|...
Run Code Online (Sandbox Code Playgroud)

不知道为什么会发生。

据我了解,我需要将所有值编码data在yaml文件中的键下。所以我做了base64编码,但是kubernetes仍然不能像我期望的那样处理yaml秘密文件。

更新:

我使用以下命令对dataMac上的值进行编码:

echo -n 'mega_secret_key' | openssl base64
Run Code Online (Sandbox Code Playgroud)

for*_*rat 29

这已经得到了回答,但为了将来参考,无需使用stringData代替data字段对字符串进行编码,如下所示:

#secrets.yaml
apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
stringData:
  API_KEY: "STRING_IN_CLEAR_TEXT"
  API_SECRET: "STRING_IN_CLEAR_TEXT"
Run Code Online (Sandbox Code Playgroud)

  • 使用 python kubernetes API 客户端时,如何将数据更改为 stringData 因为它默认为 k v1.ObjectMeta.TypeMeta: Kind: Data 而不是 Kind: stringData (2认同)

Shu*_*rma 17

我从您的编码数据中获取了解码后的值“ mega_secret_key”和“ really_secret_value1”。似乎它们的编码方式不正确。因此,以正确的方式对数据进行编码:

$ echo "mega_secret_key" | base64
bWVnYV9zZWNyZXRfa2V5Cg==

$ echo "really_secret_value1" | base64
cmVhbGx5X3NlY3JldF92YWx1ZTEK
Run Code Online (Sandbox Code Playgroud)

然后检查它们是否正确编码:

$ echo "bWVnYV9zZWNyZXRfa2V5Cg==" | base64 -d
mega_secret_key

$ echo "cmVhbGx5X3NlY3JldF92YWx1ZTEK" | base64 -d
really_secret_value1
Run Code Online (Sandbox Code Playgroud)

这样就可以了。现在在您的中使用它们dummy-secret.yaml

apiVersion: v1
kind: Secret
metadata:
  name: dummy-secret
type: Opaque
data:
  API_KEY: bWVnYV9zZWNyZXRfa2V5Cg==
  API_SECRET: cmVhbGx5X3NlY3JldF92YWx1ZTEK
Run Code Online (Sandbox Code Playgroud)

并运行$ kubectl create -f dummy-secret.yaml


Ale*_*ein 9

过了一会儿,我想回到这个问题并留下一个对官方 kubernetes文档的引用的答案:

echo -n 'admin' | base64
YWRtaW4=
echo -n '1f2d1e2e67df' | base64
MWYyZDFlMmU2N2Rm
Run Code Online (Sandbox Code Playgroud)

特别注意-n,因为它保证在解码您的密钥后不会包含“换行符”。