【问题标题】:Why does k8s secrets need to be base64 encoded when configmaps does not?为什么 k8s secrets 需要 base64 编码,而 configmaps 不需要?
【发布时间】:2019-08-27 15:58:30
【问题描述】:

为什么 k8s secrets 需要 base64 编码,而 configmaps 不需要?

创建配置图时,您只需执行以下操作:

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-configmap
data:
  SOME_KEY: a string value

但是当你想创建一个秘密时,你必须 echo -n "some secret string" | base64 然后将结果放在一个文件中,如下所示:

apiVersion: v1
kind: Secret
metadata:
  name: my-secret
type: Opaque
data:
  SOME_KEY: c29tZSBzZWNyZXQgc3RyaW5n

我真的很想知道为什么会有这种差异? Kubernetes 的秘密只是 base64 编码的字符串吗?我希望秘密存储在 kubernetes 中。

【问题讨论】:

    标签: base64 kubernetes


    【解决方案1】:

    Secrets 可以包含二进制数据(类型为map[string][]byte),字节数组在 JSON 序列化中是 base64 编码的。

    ConfigMaps只包含字符串数据(类型为map[string]string),所以JSON序列化只输出字符串。

    在 1.10 中,ConfigMaps 有一个新的 binaryData 字段,允许存储二进制数据,它是 base64 编码的,就像秘密一样。 https://github.com/kubernetes/kubernetes/pull/57938

    【讨论】:

    • “字节数组是base64编码的”是什么意思,请看这个stackoverflow.com/a/12178544/2704032,你怎么能说秘密可以包含二进制数据不是所有东西都可以用二进制表示吗?
    【解决方案2】:

    为什么k8s secret需要base64编码

    这使您可以提供二进制数据(证书等)作为机密,还可以转义任何棘手的字符,例如“ ' \ 等。

    kubernetes 的秘密只是 base64 编码的字符串吗?

    是的,默认情况下 kubernetes 机密是不加密的。您必须自己设置静态加密,请参阅https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/

    【讨论】:

      猜你喜欢
      • 2012-08-04
      • 1970-01-01
      • 1970-01-01
      • 2018-03-18
      • 2019-04-15
      • 1970-01-01
      • 2018-07-30
      • 2011-06-18
      • 2021-04-13
      相关资源
      最近更新 更多