Kubernetes 机密可以存储换行符吗?

Chr*_*ski 8 kubernetes

我使用如下命令从文件创建了一个秘密:

kubectl create secret generic laravel-oauth \
        --from-file=./.work-in-progress/oauth_private.key \
        --from-file=./.work-in-progress/oauth_public.key
Run Code Online (Sandbox Code Playgroud)

然而,似乎新行已从文件中删除(当使用秘密作为 ENV 变量时)。

文档中有一个“编码”注释,其中指出:

秘密数据的序列化 JSON 和 YAML 值被编码为 base64 字符串。换行符在这些字符串中无效,必须省略。在 Darwin/macOS 上使用 base64 实用程序时,用户应避免使用 -b 选项来分割长行。相反,Linux 用户应将选项 -w 0 添加到 base64 命令或管道 base64 | tr -d '\n' 如果 -w 选项不可用。

不过,我认为这仅适用于通过 YAML 文件“手动”创建的机密。

Ric*_*ico 4

新行不会被删除,文件只是进行Base64编码,正如其他答案中提到的那样。例如:

# mycert.pem
-----BEGIN CERTIFICATE-----
xxxxxx
xxxxxx
...
-----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)

然后:

$ kubectl create secret generic mysecret --from-file=./cert.pem
Run Code Online (Sandbox Code Playgroud)

然后:

$ kubectl get secret mysecret -o=yaml

apiVersion: v1
data:
  cert.pem: <base64 encoded string>
kind: Secret
metadata:
  creationTimestamp: 2018-11-14T18:11:46Z
  name: mysecret
  namespace: default
  resourceVersion: "20180431"
  selfLink: /api/v1/namespaces/default/secrets/mysecret
  uid: xxxxxx
type: Opaque
Run Code Online (Sandbox Code Playgroud)

然后如果你解码它,你就会得到原始的秘密。

$ echo '<base64 encoded string>' | base64 -D
-----BEGIN CERTIFICATE-----
xxxxxx
xxxxxx
...
-----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)

此外,这在休息时也不一定是安全的。如果您正在寻找更高的安全性,您可以使用Hashicorp Vault之类的东西或 @Alex Bitnami 的密封秘密所暗示的东西。