How to set passwords in configmap

1/28/2020

I want to configure passwords in the config map.YAML instead of deployment.yaml.able to set username and other variables.attcahing the config map.YAML file which I worked on.

kind: ConfigMap
apiVersion: v1
metadata:
  name: poc-configmapconfiguration-configmap
data:
  Environment: [[.Environment]]
  dockerRegistryUrl: [[.Env.dockerRegistryUrl]]
  CassandraSettings__CassandraPassword:
          valueFrom:
             secretKeyRef:
                name: abcd-passwords
                key: "[[ .Environment ]]-abcd-cassandra-password
-- Riby Varghese
configmap
devops
docker
kubernetes
yaml

2 Answers

1/28/2020

As already suggested its better practice to use secrets to store passwords Secrets obscure your data using a Base64 encoding so it is good practice to use Secrets for confidential data over using ConfigMaps.

If you perform a explain on ConfigMap field to get more details from CLI it self on the ConfigMap.data it accepts map of strings.

$ kubectl explain ConfigMap.data
KIND:     ConfigMap
VERSION:  v1

FIELD:    data <map[string]string>

DESCRIPTION:
     Data contains the configuration data. Each key must consist of alphanumeric
     characters, '-', '_' or '.'. Values with non-UTF-8 byte sequences must use
     the BinaryData field. The keys stored in Data must not overlap with the
     keys in the BinaryData field, this is enforced during validation process.

So above yaml structure you used should throw a error on creation time something like below ..

invalid type for io.k8s.api.core.v1.ConfigMap.data

Refer this git request for such feature request , which is already closed with no support considered.

https://github.com/kubernetes/kubernetes/issues/79224

-- DT.
Source: StackOverflow

1/28/2020

It would be more common to use a Secret, as you can see from the secretKeyRef, however an equivalent configMapRef exists and be used in the same way.

-- coderanger
Source: StackOverflow