Puede elegir la herramienta secreta de almacenamiento para Kubernetes Operator. La herramienta de almacenamiento secreto es un lugar seguro para almacenar información confidencial para los componentes que gestiona el Operador de Kubernetes. Esto incluye secretos para bases de datos MongoDB, Ops Manager y AppDB.
Una vez que configures el almacenamiento de secretos, el Operador de Kubernetes accede a la herramienta, recupera los secretos y los utiliza para establecer conexiones de forma segura.
Herramientas de almacenamiento secreto compatibles
Kubernetes operador admite las siguientes herramientas de almacenamiento secreto:
Kubernetes: almacena información confidencial como secretos (la funcionalidad incorporada de almacenamiento de secretos de Kubernetes). Los secretos de Kubernetes almacenan credenciales de autenticación para que solo Kubernetes pueda acceder a ellas.
HashiCorp Vault: almacene información confidencial en Vault, un servicio de terceros para la gestión de secretos.
Secrets You Can almacenar
Puede utilizar cualquier herramienta de almacenamiento de secretos compatible para cualquier secreto en la documentación de MongoDB Controllers for Kubernetes Operator, excepto aquellos enumerados en las limitaciones.
Importante
Después de la configuración, el Operador de Kubernetes utiliza tu herramienta de almacenamiento de secretos seleccionada para todos los secretos, excepto los enumerados en las limitaciones. No puedes mezclar y combinar herramientas de almacenamiento de secretos.
Limitaciones
Existen las siguientes limitaciones para las herramientas de almacenamiento secreto admitidas:
Algunos registros, como OpenShift, requieren imagePullSecrets para extraer imágenes del repositorio. El Operador de Kubernetes no puede proporcionar imagePullSecrets de HashiCorp Vault. También puedes especificar un proveedor de credenciales de imagen kubelet para recuperar credenciales de un registro de imágenes de contenedores usando Kubernetes.
Configure la herramienta de almacenamiento seguro
Para configurar la herramienta de almacenamiento de secretos, selecciona una de las siguientes opciones:
Todos los tutoriales de esta documentación de Controladores MongoDB para el Operador de Kubernetes utilizan secretos de Kubernetes de forma predeterminada. Para usar secretos de Kubernetes para almacenar secretos para el Operador de Kubernetes, proceda con la instalación del Operador de Kubernetes y siga los pasos de los tutoriales.
Para usar HashiCorp Vault para almacenar secretos para el Operador de Kubernetes, completa el siguiente procedimiento.
Requisitos previos
Antes de comenzar, debes:
Configurar una instancia de Vault. El clúster de Kubernetes donde se ejecuta el operador de Kubernetes debe tener acceso a la instancia de Vault.
Nota
Asegúrate de que Vault no esté ejecutándose en modo de desarrollo y de que tu instalación de Vault siga todas las recomendaciones de configuraciónaplicables.
Habilite la autenticación de Kubernetes para la instancia de Vault. Esto le permitirá autenticarse con Vault.
Implemente el inyector sidecar de Vault Agent en el clúster de Kubernetes. Esto le permite inyectar secretos de Vault en sus pods de Kubernetes.
Descargue los cuatro archivos de políticas de Vault para el operador de Kubernetes, la base de datos MongoDB, Ops Manager y AppDB.
Crea un rol en Vault con el nombre
mongodbenterpriseLa configuración de secretos en el Kubernetes Operator depende de la presencia de este rol y de su nombre exacto.
Procedimiento
Agregue las políticas de Vault para el operador de Kubernetes y sus componentes.
Guarde las políticas para el Operador de Kubernetes, la base de datos MongoDB, el Ops Manager y los recursos de AppDB en Vault usando el siguiente comando, sustituyendo las variables por los valores de la tabla:
Marcador de posición | Descripción |
|---|---|
{PolicyName} | Etiqueta legible por humanos que identifica la política que estás creando en Vault. |
{PathToPolicyFile} | La ruta absoluta al archivo de políticas que descargaste. |
vault policy write {PolicyName} {PathToPolicyFile}
Repita el comando para todos los recursos que está agregando a Vault.
Asocie los roles de Vault con las políticas de Vault para el Operador de Kubernetes y sus componentes.
Asocie los roles de Vault a las políticas para el Operador de Kubernetes, la base de datos MongoDB, Ops Manager y los recursos de AppDB utilizando los siguientes cuatro comandos, reemplazando las variables por los valores de la tabla:
Marcador de posición | Descripción |
|---|---|
{OperatorPolicyName} | Una etiqueta legible por humanos que identifica la política del Operador de Kubernetes en Vault. |
{DatabasePolicyName} | Una etiqueta legible por humanos que identifica la política de la base de datos de MongoDB en Vault. |
{OpsManagerPolicyName} | Una etiqueta legible por humanos que identifica la política de Ops Manager en Vault. |
{AppDBPolicyName} | Una etiqueta legible por humanos que identifica la política de AppDB en Vault. |
{ServiceAccountNamespace} | Etiqueta que identifica el namespace de la cuenta de servicio vinculada a tu pod. |
vault write auth/kubernetes/role/{OperatorPolicyName} bound_service_account_names=enterprise-operator bound_service_account_namespaces={ServiceAccountNamespace}
vault write auth/kubernetes/role/{DatabasePolicyName} bound_service_account_names=mongodb-kubernetes-database-pods bound_service_account_namespaces={ServiceAccountNamespace}
vault write auth/kubernetes/role/{OpsManagerPolicyName} bound_service_account_names=mongodb-kubernetes-ops-manager bound_service_account_namespaces={ServiceAccountNamespace}
vault write auth/kubernetes/role/{AppDBPolicyName} bound_service_account_names=mongodb-kubernetes-appdb bound_service_account_namespaces={ServiceAccountNamespace}
Estos comandos garantizan que los pods de cada componente solo tengan el acceso especificado en su política.
Nota
Este paso otorga al Operador de Kubernetes acceso a Vault. Para utilizar Vault con aplicaciones que el Operador de Kubernetes no administra, se deben guardar y vincular políticas de Vault para esas aplicaciones.
Puede ajustar los comandos en este paso para vincular otras políticas reemplazando el nombre de las cuentas de servicio. Para configurar otras aplicaciones para utilizar Vault, reemplace la {ServiceAccountName} en el siguiente comando con la cuenta de servicio utilizada para el pod de la aplicación:
vault write auth/kubernetes/role/{PolicyName} bound_service_account_names={ServiceAccountName} bound_service_account_namespaces={ServiceAccountNamespace}
Agrega las anotaciones al archivo de implementación de Kubernetes.
Antes de ejecutar los comandos en este paso, asegúrese de haber creado un rol de Vault con el nombre mongodbenterprise.
Agrega las siguientes líneas resaltadas a la sección spec.template.metadata.annotations de tu archivo de implementación del Operador de Kubernetes. Para la mayoría de los usuarios, el nombre de este archivo es mongodb-kubernetes.yaml o mongodb-kubernetes-openshift.yaml.
Nota
Si instalaste el Operador de Kubernetes usando Helm y configuraste operator.vaultSecretBackend.enabled como true, el Operador de Kubernetes añade las siguientes anotaciones. Puede pasar al siguiente paso.
apiVersion: apps/v1 kind: Deployment metadata: name: mongodb-kubernetes-operator namespace: production spec: replicas: 1 template: metadata: annotations: vault.hashicorp.com/agent-inject: "true" vault.hashicorp.com/role: "mongodbenterprise"
Si estás ejecutando Vault en TLS en el modo y se especifica el valor de operator.vaultSecretBackend.tlsSecretRef, el operador de Kubernetes añade las siguientes anotaciones. De lo contrario, añada la siguiente línea resaltada al archivo, reemplazando {TLSSecret} con el nombre del secreto que contenga una entrada ca.crt. El contenido de la entrada ca.crt debe coincidir con el certificado de la CA utilizado para generar los certificados TLS de Vault.
annotations: vault.hashicorp.com/agent-inject: "true" vault.hashicorp.com/role: "mongodbenterprise" vault.hashicorp.com/tls-secret: {TLSSecret} vault.hashicorp.com/ca-cert: /vault/tls/ca.crt
Definir la variable de entorno en Kubernetes.
Agrega las siguientes líneas resaltadas a la sección spec.env de tu archivo de implementación del Operador de Kubernetes. Para la mayoría de los usuarios, el nombre de este archivo es mongodb-kubernetes.yaml o mongodb-kubernetes-openshift.yaml.
apiVersion: apps/v1 kind: Deployment metadata: name: mongodb-kubernetes-operator namespace: production spec: env: - name: OPERATOR_ENV value: ENVIRONMENT_NAME - name: SECRET_BACKEND value: VAULT_BACKEND
Esto define la variable de entorno para Vault en Kubernetes.
Cree un archivo con la información de configuración de Vault.
Utilizando la aplicación de edición de texto que prefieras, crea un archivo llamado config. Pegue el siguiente texto en el archivo:
apiVersion: v1 kind: ConfigMap metadata: name: secret-configuration namespace: {Namespace} data: VAULT_SERVER_ADDRESS: {VaultServerAddress} OPERATOR_SECRET_BASE_PATH: mongodbenterprise/operator DATABASE_SECRET_BASE_PATH: mongodbenterprise/database OPS_MANAGER_SECRET_BASE_PATH: mongodbenterprise/opsmanager APPDB_SECRET_BASE_PATH: mongodbenterprise/appdb
Las rutas en este archivo son las rutas por defecto. Puedes reemplazarlas con tus rutas base si personalizaste la configuración del Operador de Kubernetes.
Si está ejecutando Vault en modo TLS, también debe agregar la siguiente línea resaltada al archivo:
OPS_MANAGER_SECRET_BASE_PATH: mongodbenterprise/opsmanager APPDB_SECRET_BASE_PATH: mongodbenterprise/appdb TLS_SECRET_REF: {TLSSecret}
Sustituye los marcadores de posición en la información de configuración de Vault.
Reemplazar los marcadores de posición en el archivo config con estos valores. Guarde el archivo con un tipo de archivo YAML reemplazando la extensión de archivo .txt por .yaml.
Marcador de posición | Descripción |
|---|---|
{Namespace} | El namespace que creaste para el Operador de Kubernetes. El namespace por defecto es |
{Dirección del servidor de bóveda} | La dirección que el Operador de Kubernetes debe usar para conectarse a Vault. |
{TLSSecret} | Nombre de un secreto que contiene una entrada |
Cree un ConfigMap con la configuración de Vault.
Emita el siguiente comando para crear un ConfigMap que contenga la información de Vault:
kubectl create configmap secret-configuration --from-file=config.yaml
Esto crea un ConfigMap llamado secret-configuration. Este ConfigMap contiene el contenido del archivo config.
Migra manualmente los secretos que no se migran automáticamente
Debe migrar manualmente los siguientes secretos para almacenarlos en Vault:
Cualquier secreto existente creado por el usuario, incluidas las credenciales del operador almacenadas como secretos de Kubernetes, si corresponde
El secreto gen-key Kubernetes operador crea
Las credenciales de administrador/clave de administrador de Ops Manager que crea el operador de Kubernetes
Secretos TLS
Para migrar manualmente o crear nuevos secretos, añádelos a Vault. Después de agregarlas a Vault, puedes removerlas de Kubernetes.
Todos los demás secretos que crea el operador de Kubernetes se migran automáticamente, y el operador de Kubernetes utiliza Vault para los nuevos secretos. Los secretos creados por el usuario deben añadirse a Vault.
Nota
cert-manager recrea automáticamente los secretos de Kubernetes que genera si los eliminas de Kubernetes. Debe gestionar manualmente la eliminación de estos secretos o dejar de usar cert-manager para evitar almacenar los secretos en Kubernetes.
Próximos pasos
Después de configurar la herramienta de almacenamiento secreto para el Operador MongoDB Controllers for Kubernetes, podrás:
Lee las Consideraciones.
Completa los requisitos previos.