Why does k8s secrets need to be base64 encoded when configmaps does not?
Secrets can contain binary data (the type is map[string][]byte
), and byte arrays are base64-encoded in JSON serialization.
ConfigMaps only contain string data (the type is map[string]string
), so the JSON serialization just outputs the string.
In 1.10, ConfigMaps have a new binaryData
field that allows storing binary data, which is base64-encoded, just like secrets. https://github.com/kubernetes/kubernetes/pull/57938
Why does k8s secrets need to be base64 encoded
This allows you to provide binary data (certificates etc.) as secret, and also escape any tricky characters such as " ' \ etc.
Are kubernetes secrets simply base64 encoded strings?
Yes, kubernetes secrets are not encrypted by default. You have to set up encryption at rest on your own, see https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/