首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不能在Kubernetes中创建秘密:输入时非法的base64数据

不能在Kubernetes中创建秘密:输入时非法的base64数据
EN

Stack Overflow用户
提问于 2018-11-20 14:16:11
回答 8查看 106.9K关注 0票数 62

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

代码语言:javascript
运行
复制
apiVersion: v1
kind: Secret
metadata:
  name: dummy-secret
type: Opaque
data:
  API_KEY: bWVnYV9zZWNyZXRfa2V5
  API_SECRET: cmVhbGx5X3NlY3JldF92YWx1ZTE=

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

代码语言:javascript
运行
复制
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值进行编码:

代码语言:javascript
运行
复制
echo -n 'mega_secret_key' | openssl base64
EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2019-12-12 19:17:31

过一段时间,我想回到这个问题上,并留下一个答案,并参考官方的kubernetes 文档

代码语言:javascript
运行
复制
echo -n 'admin' | base64
YWRtaW4=
echo -n '1f2d1e2e67df' | base64
MWYyZDFlMmU2N2Rm

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

票数 15
EN

Stack Overflow用户

发布于 2018-11-20 14:32:37

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

代码语言:javascript
运行
复制
$ echo "mega_secret_key" | base64
bWVnYV9zZWNyZXRfa2V5Cg==

$ echo "really_secret_value1" | base64
cmVhbGx5X3NlY3JldF92YWx1ZTEK

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

代码语言:javascript
运行
复制
$ echo "bWVnYV9zZWNyZXRfa2V5Cg==" | base64 -d
mega_secret_key

$ echo "cmVhbGx5X3NlY3JldF92YWx1ZTEK" | base64 -d
really_secret_value1

所以他们没事。现在在您的dummy-secret.yaml中使用它们

代码语言:javascript
运行
复制
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字段中。如果键同时出现在datastringData字段中,则stringData字段中指定的值优先。

代码语言:javascript
运行
复制
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 (换行符)。

代码语言:javascript
运行
复制
$ echo "some_text"
some_text
$ echo -n "some_text"
some_text⏎

就试一下,

代码语言:javascript
运行
复制
# 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⏎

您可以在您的秘密中使用这些新解码的数据(没有换行符)。那也应该可以。

代码语言:javascript
运行
复制
$ 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”} `

票数 73
EN

Stack Overflow用户

发布于 2020-03-20 11:29:36

这已经得到了回答,但是为了将来的参考,不需要使用stringData而不是data字段来编码字符串,如下所示:

代码语言:javascript
运行
复制
#secrets.yaml
apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
stringData:
  API_KEY: "STRING_IN_CLEAR_TEXT"
  API_SECRET: "STRING_IN_CLEAR_TEXT"
票数 56
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53394973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档