Un ConfigMap es un recurso de Kubernetes para poner la configuración en contenedores. Le permiten mantener la configuración de la pila separada de su código. A continuación, le mostramos cómo trabajar con ConfigMaps y enviarlos a sus pods.
¿Para qué se utilizan los ConfigMaps?
CONTENIDOS DE LA PAGINA
Los ConfigMaps están diseñados específicamente para encapsular pequeñas cantidades de datos de configuración insensibles. Son un mecanismo para obtener pares clave-valor arbitrarios en sus pods. Se usan comúnmente para almacenar la dirección IP del servidor de la base de datos, la dirección de correo electrónico saliente para su aplicación y otras configuraciones específicas de la aplicación que necesita configurar fuera de sus Pods.
ConfigMap le permite administrar estos datos en un recurso de Kubernetes dedicado. Los pods reciben pares clave-valor como variables de entorno o archivos en un volumen montado.
¿Para qué no usarlos?
Hay algunas situaciones en las que un ConfigMap debería No ser usado.
Los ConfigMaps no se almacenan de forma segura y sus valores no están cifrados. No deben contener datos sensibles o confidenciales que supongan un riesgo para la seguridad o la privacidad si se filtran.
No coloque contraseñas, claves de API o claves de cifrado en un ConfigMap; utilice un secreto de Kubernetes en su lugar, ya que funcionan de manera similar a ConfigMap pero con protecciones adicionales. Los sistemas que necesitan una conexión a la base de datos deben colocar el nombre de host en un ConfigMap y las credenciales en un secreto separado.
Los ConfigMaps individuales no pueden exceder 1 MB de tamaño. Los sistemas que requieren varias claves de configuración pueden estar mejor atendidos por un enfoque alternativo, como inyectar archivos de configuración generados manualmente a través de un volumen.
Si desea seguir con ConfigMap, considere dividir la configuración en varios recursos de ConfigMap. Este enfoque debe evitar el límite de 1 MB al permitirle dar a cada uno de sus pods el conjunto mínimo de claves de configuración que necesita.
Los valores de ConfigMap pueden ser cadenas UTF-8 o datos binarios codificados como una cadena base64. Los nombres de las claves pueden contener caracteres alfanuméricos, .
(período), -
(guión), e _
(subrayado) caracteres. Algunos lenguajes de programación y marcos pueden tener una convención diferente para las variables de configuración, así que asegúrese de usar un formato que sea compatible con Kubernetes y con su aplicación.
Creando un mapa de configuración
Los ConfigMaps tienen manifiestos YAML simples. Cada ConfigMap necesita un name
en el formato estándar de Kubernetes ea data
campo que contiene sus pares clave-valor:
apiVersion: v1 kind: ConfigMap metadata: name: example-configmap data: database_host: "192.168.0.10" system_email: "[email protected]"
los data
El campo se usa para especificar claves con valores de cadena. puedes usar binaryData
en su lugar o así como data
para agregar valores binarios codificados en base64. Las claves deben ser únicas en ambos data
Y binaryData
.
Aplica el manifiesto a tu clúster usando kubectl
o tu herramienta favorita.
Conectando ConfigMaps y Pods
Un ConfigMap no hace nada por sí mismo. Ha agregado algunos datos a su clúster; ahora conectémoslo a un Pod:
apiVersion: v1 kind: Pod metadata: name: example-pod spec: containers: - name: example-container image: example-image:latest envFrom: - configMapRef: name: example-configmap
los envFrom
el campo recuerda las variables de entorno definidas por otro recurso referenciado. En este caso, un configMapRef
identifica el ConfigMap creado anteriormente. Los contenedores de vainas comenzarán con database_host
Y system_email
variables de entorno definidas.
Adición selectiva de variables ambientales
envFrom
es útil cuando desea utilizar cada clave en ConfigMap y está seguro de que no habrá ningún conflicto con las otras variables de entorno de su Pod. En situaciones más controladas, use un env
sección, defina las claves individuales y extraiga el valor de cada clave del ConfigMap:
env: - name: DATABASE_HOST_IP valueFrom: configMapKeyRef: name: example-configmap key: database_host
Este ejemplo muestra cómo iniciar un Pod con solo el database_host
clave de ConfigMap. La clave también se renombra antes de la inyección para que el Pod la reciba como DATABASE_HOST_IP
.
Uso de ConfigMaps con volúmenes
ConfigMaps se puede montar como archivos dentro de Pods. Kubernetes crea un volumen, inserta el contenido de ConfigMap como un conjunto de archivos y monta el volumen en su Pod.
apiVersion: v1 kind: Pod metadata: name: example-pod spec: containers: - name: example-container image: example-image:latest volumeMounts: - name: app-config mountPath: "/etc/config-data" readOnly: true volumes: - name: app-config configMap: name: example-configmap
Este manifiesto de pod crea un volumen llamado app-config
. los configMap
El campo rellenará previamente el volumen utilizando los datos del ConfigMap especificado.
El Pod sube el volumen /etc/config-data
. Sus contenedores pueden leer los archivos dentro del directorio para acceder a sus valores de configuración. Cada clave de ConfigMap tendrá su propio archivo dentro del punto de montaje.
Valores de ConfigMap actualizados
Dado que ConfigMap es un recurso de API de Kubernetes estándar, puede actualizar los valores en cualquier momento editando su manifiesto y volviéndolo a aplicar a su clúster. La forma en que los nuevos valores llegan a sus Pods depende del mecanismo de inyección que esté utilizando.
Volúmenes montados
Kubernetes actualizará los ConfigMaps montados en pods a través de un volumen. Los cambios en ConfigMaps se comprueban periódicamente; cuando se detecta una diferencia, los archivos en su volumen se actualizarán, luego su Pod recibirá los nuevos datos. El retraso depende del intervalo de sincronización configurado para las instancias de Kubelet en sus nodos trabajadores.
variables ambientales
No es posible cambiar las variables de entorno de un pod, por lo que los cambios en ConfigMap no llegarán a los pods existentes que hagan referencia a claves a través de este mecanismo. Debes reemplazar tus pods para usar los nuevos datos.
Los pods recién creados siempre recibirán datos de ConfigMap actuales, independientemente de si está utilizando volúmenes o variables de entorno. Si necesita forzar una actualización de configuración, edite una anotación en su pod para que Kubernetes la vuelva a crear.
Mapas de configuración inmutables
ConfigMaps tiene una opción immutable
campo que evita que se actualice. Cuando se establece este campo, no es posible actualizar los datos de ConfigMap o eliminar el estado inmutable.
apiVersion: v1 kind: ConfigMap metadata: name: immutable-configmap data: foo: bar immutable: true
Esto puede resultar útil cuando esté seguro de que los valores de configuración nunca cambiarán. Mejore la seguridad al eliminar la posibilidad de cambios accidentales. El rendimiento también se puede mejorar, ya que Kubernetes ya no necesita monitorear ConfigMap para propagar cualquier cambio en los valores de sus pods.
Resumen
ConfigMaps debería ser su opción para proporcionar claves de configuración insensibles a sus pods de Kubernetes. Son un recurso de API de primera clase que puede utilizar como variables de entorno o archivos montados en volúmenes.
Las contraseñas y otras credenciales pertenecen a Secrets. Estos funcionan de una manera muy similar a ConfigMaps y los Pods hacen referencia a ellos de la misma manera. Sustituir configMapRef
con secretRef
para extraer una clave de un secreto con nombre en lugar de un ConfigMap.