我想为我的kubernetes集群创建一个秘密。因此,我编写了以下dummy-secret.yaml
文件:
apiVersion: v1
kind: Secret
metadata:
name: dummy-secret
type: Opaque
data:
API_KEY: bWVnYV9zZWNyZXRfa2V5
API_SECRET: cmVhbGx5X3NlY3JldF92YWx1ZTE=
当我运行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|...
不知道为什么会这样。
正如我所理解的,我需要在yaml文件中的data
键下编码所有的值。所以我做了base64编码,但是kubernetes仍然没有像我预期的那样处理yaml秘密文件。
更新:
我使用这个命令对mac上的data
值进行编码:
echo -n 'mega_secret_key' | openssl base64
发布于 2019-12-12 19:17:31
过一段时间,我想回到这个问题上,并留下一个答案,并参考官方的kubernetes 文档。
echo -n 'admin' | base64
YWRtaW4=
echo -n '1f2d1e2e67df' | base64
MWYyZDFlMmU2N2Rm
特别注意-n
,因为它保证在解码密钥后不会包含“新行符号”。
发布于 2018-11-20 14:32:37
我从您编码的数据中得到了解码值"mega_secret_key“和"really_secret_value1”。似乎他们的编码方式不对。因此,以正确的方式对数据进行编码:
$ echo "mega_secret_key" | base64
bWVnYV9zZWNyZXRfa2V5Cg==
$ echo "really_secret_value1" | base64
cmVhbGx5X3NlY3JldF92YWx1ZTEK
然后检查它们是否被正确编码:
$ echo "bWVnYV9zZWNyZXRfa2V5Cg==" | base64 -d
mega_secret_key
$ echo "cmVhbGx5X3NlY3JldF92YWx1ZTEK" | base64 -d
really_secret_value1
所以他们没事。现在在您的dummy-secret.yaml
中使用它们
apiVersion: v1
kind: Secret
metadata:
name: dummy-secret
type: Opaque
data:
API_KEY: bWVnYV9zZWNyZXRfa2V5Cg==
API_SECRET: cmVhbGx5X3NlY3JldF92YWx1ZTEK
运行$ kubectl create -f dummy-secret.yaml
。
更新11-02-2022:
较新版本的Kubernetes支持可选的stringData
属性,可以在不解码的情况下针对任何密钥提供值。
stringData
字段中的所有键值对都在内部合并到data
字段中。如果键同时出现在data
和stringData
字段中,则stringData
字段中指定的值优先。
apiVersion: v1
kind: Secret
metadata:
name: dummy-secret
type: Opaque
stringData:
API_KEY: mega_secret_key
API_SECRET: really_secret_value1
更新:
如果在运行-n
时使用$ echo "some_text"
标志,它将从要打印的字符串中修剪尾随\n
(换行符)。
$ echo "some_text"
some_text
$ echo -n "some_text"
some_text⏎
就试一下,
# first encode
$ echo -n "mega_secret_key" | base64
bWVnYV9zZWNyZXRfa2V5
$ echo -n "really_secret_value1" | base64
cmVhbGx5X3NlY3JldF92YWx1ZTE=
# then decode and check whether newline is stripped
$ echo "bWVnYV9zZWNyZXRfa2V5" | base64 -d
mega_secret_key⏎
$ echo "cmVhbGx5X3NlY3JldF92YWx1ZTE=" | base64 -d
really_secret_value1⏎
您可以在您的秘密中使用这些新解码的数据(没有换行符)。那也应该可以。
$ cat - <<-EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
name: dummy-secret
type: Opaque
data:
API_KEY: bWVnYV9zZWNyZXRfa2V5
API_SECRET: cmVhbGx5X3NlY3JldF92YWx1ZTE=
EOF
secret/dummy-secret created
在更新时,我的kubernetes版本是, 小调:“17”,GitVersion:"v1.17.3",GitCommit:"06ad960bfd03b39c8310aaf92d1e7c1 2ce618213",GitTreeState:“干净”,BuildDate:"2020-02-11T18:14:22Z",GoVersion:"go1.13.6",Compiler:"gc",Platform:"l inux/amd64 64“}服务器版本:version.Info{Minor:”1“,未成年人:”17“,GitVersion:"v1.17.3",GitCommit:”06ad960bd03c310aaf92d1e7c1 2ce6213“,GitTreeState:”干净“,BuildDate:2020年:11T18:13Z。GoVersion:"go1.13.6",编译器:“gc”,平台:“l/amd64 64”} `
发布于 2020-03-20 11:29:36
这已经得到了回答,但是为了将来的参考,不需要使用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"
https://stackoverflow.com/questions/53394973
复制相似问题