No puedo cambiar la contraseña de un usuario existente de MongoDB implementado en k8s, a menos que elimine la base de datos y luego la vuelva a crear con la nueva contraseña.
¿Cómo puedo cambiar la contraseña usando el yaml para el objeto con estado mongo sin eliminar la base de datos?
apiVersion: apps/v1 kind: StatefulSet metadata: name: mongo-db-statefulset namespace: development spec: serviceName: mongo-svc replicas: 1 selector: matchLabels: component: mongo template: metadata: labels: component: mongo spec: terminationGracePeriodSeconds: 10 containers: - name: mongo image: mongo:4.0.4 volumeMounts: - mountPath: /data/db name: volume ports: - containerPort: 27017 env: - name: MONGO_INITDB_ROOT_USERNAME value: admin - name: MONGO_INITDB_ROOT_PASSWORD # from secrets value: password - name: MONGO_INITDB_DATABASE value: admin volumes: - name: volume persistentVolumeClaim: claimName: database-persistent-volume-claimSi entiendo bien tu problema:
Según la documentación :
Las variables de entorno no se actualizan después de una actualización secreta, por lo que si un contenedor ya consume un secreto en una variable de entorno, el contenedor no verá una actualización secreta a menos que se reinicie. Existen soluciones de terceros para activar reinicios cuando cambian los secretos.
Este es un problema conocido. Puedes leer más sobre esto en este número de github .
Entonces, después de cambiar la contraseña secreta, debe reiniciar su pod para actualizar este valor, no tiene que eliminarlo.
Como se menciona en la documentación, existen herramientas de terceros para activar el reinicio cuando cambian los secretos, una de ellas es Reloader .
Reloader puede ver cambios en ConfigMap y Secret y realizar actualizaciones continuas en Pods con sus DeploymentConfigs, Deployments, Daemonsets y Statefulsets asociados.
La forma rápida de reiniciar la implementación sería usar kubectl rollout restart , que realiza un apagado paso a paso y reinicia cada contenedor en su implementación o statefulset.
Si cambia la contraseña en su secreto y usa el reinicio de implementación de kubectl, la nueva contraseña debería funcionar.