为什么在配置映射时不需要对k8s机密进行base64编码?

时间:2018-03-01 09:23:33

标签: base64 kubernetes

为什么在配置映射时不需要对k8s机密进行base64编码?

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

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中加密存储。

2 个答案:

答案 0 :(得分:11)

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

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

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

答案 1 :(得分:0)

  

为什么k8的机密需要使用base64编码

这允许您提供二进制数据(证书等)作为秘密,并且还转义任何棘手的字符,例如“'\等。

  

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

是的,默认情况下,不会对kubernetes机密进行加密。您必须自行设置加密,请参见https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/