Docs Menu
Docs Home
/ /
/ / /

Configure el almacenamiento de secretos

Puede elegir la herramienta de almacenamiento de secretos para Kubernetes Operator. Esta herramienta es un lugar seguro para almacenar información confidencial de los componentes que administra Kubernetes Operator. 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.

El operador de Kubernetes admite las siguientes herramientas de almacenamiento secreto:

  • Kubernetes: almacene información confidencial como Secretos (el almacenamiento de secretos integrado de Kubernetes). Los secretos de Kubernetes almacenan las 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.

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

Tras la configuración, Kubernetes Operator utiliza la herramienta de almacenamiento de secretos seleccionada para todos los secretos, excepto los que se indican en las limitaciones. No se pueden combinar herramientas de almacenamiento de secretos.

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 desde HashiCorp Vault. Puede especificar un proveedor de credenciales de imagen de Kubernetes para recuperar las credenciales de un registro de imágenes de contenedor mediante Kubernetes.

Para configurar la herramienta de almacenamiento secreto, seleccione 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 utilizar HashiCorp Vault para almacenar secretos para el operador de Kubernetes, complete el siguiente procedimiento.

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úrese de que Vault no se esté ejecutando en modo de desarrollo y de que su instalación de Vault siga todas las recomendaciones de configuración aplicables.

  • 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 operador de Kubernetes depende de la presencia de este rol y su nombre exacto.

1

Escriba las políticas para el operador de Kubernetes, la base de datos de MongoDB, Ops Manager y los recursos de AppDB en Vault usando el siguiente comando, reemplazando las variables con los valores de la tabla:

Marcador de posición
Descripción

{Nombre de la política}

Etiqueta legible por humanos que identifica la política que estás creando en Vault.

{RutaAlArchivoDePolíticas}

La ruta absoluta al archivo de política que descargaste.

vault policy write {PolicyName} {PathToPolicyFile}

Repita el comando para todos los recursos que está agregando a Vault.

2

Vincule los roles de Vault a las políticas para el operador de Kubernetes, la base de datos de MongoDB, Ops Manager y los recursos de AppDB mediante los siguientes cuatro comandos, reemplazando las variables con los valores de la tabla:

Marcador de posición
Descripción

{NombreDePolíticaDeOperador}

Una etiqueta legible por humanos que identifica la política del operador de Kubernetes en Vault.

{NombreDePolíticaDeBaseDeDatos}

Una etiqueta legible por humanos que identifica la política de base de datos MongoDB en Vault.

{NombreDePolíticaDeGestorDeOps}

Una etiqueta legible por humanos que identifica la política de Ops Manager en Vault.

{Nombre de la política de la aplicación}

Una etiqueta legible por humanos que identifica la política de AppDB en Vault.

{Espacio de nombre de cuenta de servicio}

Etiqueta que identifica el espacio de nombres de la cuenta de servicio vinculada a su 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 usar Vault con aplicaciones que el operador de Kubernetes no administra, debe crear y vincular políticas de Vault para dichas aplicaciones.

Puede adaptar los comandos de este paso para vincular otras políticas reemplazando el nombre de las cuentas de servicio. Para configurar otras aplicaciones para que usen Vault, reemplace {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}
3

Antes de ejecutar comandos en este paso, asegúrese de haber creado una función de Vault con el mongodbenterprise nombre.

Agregue las siguientes líneas resaltadas a la sección spec.template.metadata.annotations de su 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 instaló el operador de Kubernetes con Helm y configuró operator.vaultSecretBackend.enabled truecomo, el operador de Kubernetes agrega las siguientes anotaciones. Puede continuar con el 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á ejecutando Vault en En modoTLS y al especificar el valor operator.vaultSecretBackend.tlsSecretRef, el operador de Kubernetes agrega las siguientes anotaciones. De lo contrario, agregue la siguiente línea resaltada al archivo, reemplazando {TLSSecret} por el nombre del secreto que contiene una ca.crt entrada. El contenido de la ca.crt entrada debe coincidir con el certificado de la CA utilizada 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
4

Agregue las siguientes líneas resaltadas a la sección spec.env de su 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.

5

Con su aplicación de edición de texto preferida, cree un archivo llamado config. Pegue el siguiente texto en él:

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 de este archivo son las predeterminadas. Puede reemplazarlas con sus rutas base si personalizó 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}
6

Reemplace los marcadores de config posición del archivo con estos valores. Guarde el archivo con un tipo de archivo YAML reemplazando la .txt extensión .yaml por.

Marcador de posición
Descripción

{Namespace}

El espacio de nombres que creaste para el operador de Kubernetes. El espacio de nombres predeterminado mongodb 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 ca.crt entrada. El contenido de la ca.crt entrada debe coincidir con el certificado de la CA utilizada para generar los certificados TLS de Vault.

7

Emita el siguiente comando para crear un ConfigMap que contenga la información del almacén:

kubectl create configmap secret-configuration --from-file=config.yaml

Esto crea un ConfigMap secret-configurationllamado. Este ConfigMap contiene el contenido del config archivo.

8

Debe migrar manualmente los siguientes secretos para almacenarlos en Vault:

Para migrar o crear secretos manualmente, agréguelos a Vault. Después de agregarlos, puede eliminarlos 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 elimina. Debe gestionar manualmente la eliminación de estos secretos o dejar de usar cert-manager para evitar almacenarlos en Kubernetes.

Después de configurar la herramienta de almacenamiento secreto para el operador de controladores MongoDB para Kubernetes, puede:

Volver

Habilitar autenticación

En esta página