为什么在配置映射时不需要对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中加密存储。
答案 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/