kubernetes - 无法在 Kubernetes 中创建 Secret : illegal base64 data at input

标签 kubernetes base64 kubernetes-secrets

我想为我的 kubernetes 集群创建一个 secret 。所以我写了以下 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|...

不知道为什么会发生。

据我了解,我需要对 data 下的所有值进行编码输入 yaml 文件。所以我做了 base64 编码,但是 kubernetes 仍然没有像我期望的那样处理 yaml secret 文件。

更新:

我用这个命令来编码 data我的 mac 上的值:
echo -n 'mega_secret_key' | openssl base64

最佳答案

我从您的编码数据中获得了解码值“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 .

更新:

如果您使用 -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⏎

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

$ 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

At the time of update, my kubernetes version is,

Minor:"17", GitVersion:"v1.17.3",
GitCommit:"06ad960bfd03b39c8310aaf92d1e7c1 2ce618213",
GitTreeState:"clean", BuildDate:"2020-02-11T18:14:22Z",
GoVersion:"go1.13.6", Compiler:"gc", Platform:"l inux/amd64"} Server
Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.3",
GitCommit:"06ad960bfd03b39c8310aaf92d1e7c1 2ce618213",
GitTreeState:"clean", BuildDate:"2020-02-11T18:07:13Z",
GoVersion:"go1.13.6", Compiler:"gc", Platform:"l inux/amd64"} ```


关于kubernetes - 无法在 Kubernetes 中创建 Secret : illegal base64 data at input,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53394973/

相关文章:

ssl - 配置 Traefik TLS 时出错 "Error configuring TLS for ingress secret does not exist"

kubernetes - GKE - 无法使 cuda 与 pytorch 一起工作

kubernetes - 为什么无法从外部访问服务?

redis - kubectl 向 pod 添加额外的 env 变量

android - 在没有特殊字符的android中将字符串编码为Base64?

base64 - 如何使用ansible b64encode

angular - 在Angular 6中将Kubernetes secret 用作环境变量

kubernetes - 如何使现有的配置映射使用 kubernetes secret

debian - Kubernetes 节点随机重启

java - 如何在java中使用正则表达式从base64字符串中删除数据:;base64,?