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 de secretos compatibles
Kubernetes operador admite las siguientes herramientas de almacenamiento secreto:
Kubernetes: almacena información sensible como secretos (el almacenamiento de secretos integrado para Kubernetes). Los secretos de Kubernetes almacenan credenciales de autenticación para que solo Kubernetes pueda acceder a ellas.
HashiCorp Vault: almacena información sensible en Vault, un servicio de terceros para la gestión de secretos.
Secrets You Can almacenar
Puedes utilizar cualquier herramienta de almacenamiento secreto compatible para cualquier secreto en la documentación de MongoDB Controllers for Kubernetes Operator, excepto los que se enumeran 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 desde HashiCorp Vault. Puede especificar un proveedor de credenciales de imágenes kubelet para recuperar credenciales de un registro de contenedores de imágenes utilizando Kubernetes en su lugar.
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 MongoDB Controllers para el operador de Kubernetes utilizan secretos de Kubernetes por defecto. Para utilizar secretos de Kubernetes para almacenar secretos para el Kubernetes Operator, proceda con la instalación del Kubernetes Operator y siga los pasos en los tutoriales.
Para usar HashiCorp Vault para almacenar secretos para el Operador de Kubernetes, completa el siguiente procedimiento.
Requisitos previos
Antes de comenzar, debes:
Configura una instancia de Vault. El clúster de Kubernetes donde se ejecuta el Kubernetes Operator debe tener acceso a la instancia de Vault.
Nota
Asegúrese de que Vault no esté ejecutándose en modo dev y de que su instalación de Vault siga las recomendaciones de configuracióncorrespondientes.
Habilite autenticación de Kubernetes para la instancia de Vault. Esto le permite autenticarse con Vault.
Implemente el inyector de sidecar del agente Vault en el clúster de Kubernetes. Esto te permite inyectar secretos desde Vault en tus Pods de Kubernetes.
Descargue los cuatro archivos de políticas de Vault para Kubernetes operador, la base de datos de MongoDB, Ops Manager y AppDB.
Create a role in Vault with the name
mongodbenterprise. The configuration of secrets in the Kubernetes Operator relies on the presence of this role and its exact name.
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 tengan solo 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.
You can adapt the commands in this step to bind other policies by replacing the name of the service accounts. To configure other applications to use Vault, replace the {ServiceAccountName} in the following command with the service account used for the application's pod:
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.
Before running commands in this step, ensure that you have created a Vault role with the name 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á ejecutando Vault en modo TLS, y especificó el valor operator.vaultSecretBackend.tlsSecretRef, el operador de Kubernetes añade las siguientes anotaciones. De lo contrario, añada la siguiente línea resaltada al archivo, sustituyendo {TLSSecret} por el nombre del secreto que contiene una entrada ca.crt. El contenido de la entrada ca.crt 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
Define 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.
Reemplaza los marcadores de posición en el archivo config con estos valores. Guarda 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 |
{VaultServerAddress} | 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.
Ejecute el siguiente comando para crear un ConfigMap que contenga la información de Vault:
kubectl create configmap secret-configuration --from-file=config.yaml
This creates a ConfigMap named secret-configuration. This ConfigMap contains the contents of the config file.
Migra manualmente los secretos que no se migran automáticamente
Debes migrar manualmente los siguientes secretos para almacenarlos en Vault:
Cualquier secreto previamente creado por el usuario, incluidos las credenciales del Operador almacenadas como secretos de Kubernetes, si corresponde
El secreto gen-key Kubernetes operador crea
El Operador de Kubernetes de credenciales de administrador/clave de administrador de Ops Manager crea
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.