Learn the "why" behind slow queries and how to fix them in our 2-Part Webinar.
Register now >
Docs Menu
Docs Home
/ /
/ / /

Configure el almacenamiento de secretos

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.

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.

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.

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.

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.

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.

1

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.

2

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}
3

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
4

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.

5

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}
6

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 mongodb.

{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 ca.crt. El contenido del registro ca.crt debe coincidir con el certificado de la CA utilizado para generar los certificados TLS de Vault.

7

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.

8

Debe migrar manualmente los siguientes secretos para almacenarlos en Vault:

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.

Después de configurar la herramienta de almacenamiento secreto para el Operador MongoDB Controllers for Kubernetes, podrás:

Volver

Habilitar la Autenticación

En esta página