Esta guía le instruye sobre cómo configurar:
Autenticación interna X.509 entre nodos de MongoDB en un clúster.
Autenticación X.509 de los clientes a tus instancias de MongoDB.
El Operador de Kubernetes no admite otros esquemas de autenticación entre nodos de MongoDB en un clúster.
Nota
No puedes asegurar una instancia autónoma de MongoDB en un clúster de Kubernetes.
Requisitos generales previos
Antes de asegurar cualquiera de tus implementaciones de MongoDB utilizando TLS cifrado, complete lo siguiente:
Habilitar la autenticación X.509 a nivel de Proyecto configura a todos los agentes para que utilicen autenticación de cliente X.509 cuando se comuniquen con implementaciones de MongoDB.
Configurar la autenticación interna X.509 para un set de réplicas
Requisitos previos
Antes de proteger tu set de réplicas usando X.509, implementa un set de réplicas cifrado con TLS.
Habilitar la autenticación interna X.509
Crea el secreto para tu certificado X.509.
Ejecute esto kubectl comando para crear un nuevo secreto que almacene el certificado del set de réplicas:
kubectl create secret tls <prefix>-<metadata.name>-clusterfile \ --cert=<replica-set-clusterfile-tls-cert> \ --key=<replica-set-clusterfile-tls-key>
Nota
Debe anteponer sus secretos con <prefix>-<metadata.name>.
Por ejemplo, si le llamas a tu implementación my-deployment y estableces el prefijo en mdb, debes nombrar el secreto TLS para las comunicaciones TLS del cliente mdb-my-deployment-cert. Además, debes nombrar el secreto TLS para la autenticación interna del clúster (si está habilitada) mdb-my-deployment-clusterfile.
Copia el recurso de set de réplicas de muestra.
Cambia los ajustes de este archivo YAML para que coincidan con la configuración de set de réplicas deseada.
1 2 apiVersion: mongodb.com/v1 3 kind: MongoDB 4 metadata: 5 name: <my-replica-set> 6 spec: 7 members: 3 8 version: "8.0.0" 9 opsManager: 10 configMapRef: 11 # Must match metadata.name in ConfigMap file 12 name: <configMap.metadata.name> 13 credentials: <mycredentials> 14 type: ReplicaSet 15 persistent: true
16 security: 17 tls: 18 ca: <custom-ca> 19 certsSecretPrefix: <prefix> 20 authentication: 21 enabled: true 22 modes: ["X509"] 23 internalCluster: "X509" 24 ...
Pega la sección del ejemplo copiado en tu recurso existente del set de réplicas.
Abre el editor de texto de preferencia y pega la especificación del objeto al final del archivo recurso, en la sección spec.
Configura los ajustes generales de X.509 para el set de réplicas recurso.
Para habilitar TLS y X.509 en tu implementación, configura los siguientes ajustes en tu objeto de Kubernetes:
Configure los ajustes internos de X.509 para el set de réplicas recurso.
Para habilitar TLS y X.509 en tu implementación, configura los siguientes ajustes en tu objeto de Kubernetes:
Clave | Tipo | Necesidad | Descripción | Ejemplo |
|---|---|---|---|---|
string | Requerido | Utilice esta configuración para habilitar la autenticación interna X.509 del clúster. IMPORTANTE: una vez habilitada la autenticación interna del clúster, no se puede deshabilitar. |
|
Guarde su archivo de configuración del set de réplicas.
Aplica tus cambios a tu set de réplicas implementación.
Invoca el siguiente comando de Kubernetes para actualizar tu set de réplicas:
kubectl apply -f <replica-set-conf>.yaml
Rastrea el estado de tu implementación.
Para verificar el estado de su MongoDB recurso, utilice el siguiente comando:
kubectl get mdb <resource-name> -o yaml -w
Con la bandera -w (observar) activada, cuando la configuración cambia, la salida se actualiza inmediatamente hasta que la fase de estado alcanza el estado Running. Para obtener más información sobre el estado de implementación de recursos, consulta Solucionar problemas con el operador de Kubernetes.
Renovar certificados internos de autenticación X.509 para un set de réplicas
Si ya creaste los certificados, te recomendamos que los renueves periódicamente utilizando el siguiente procedimiento.
Configura kubectl para que se ajuste por defecto a tu espacio de nombres.
Si aún no lo ha hecho, ejecute el siguiente comando para ejecutar todos los comandos de kubectl en el namespace que creó.
Nota
Si estás implementando un recurso de Ops Manager en una implementación de MongoDB multidispositivo en clústeres de Kubernetes:
Defina
contextcomo el nombre del clúster operador, por ejemplo:kubectl config set context "$MDB_CENTRAL_CLUSTER_FULL_NAME".Establece el
--namespaceen el mismo ámbito que utilizaste para tu implementación de MongoDB de clústeres multi-Kubernetes, como por ejemplo:kubectl config --namespace "mongodb".
kubectl config set-context $(kubectl config current-context) --namespace=<metadata.namespace>
Renueva el secreto para tus certificados TLS.
Ejecute este comando kubectl para renovar un secreto existente que almacena los certificados del set de réplicas:
kubectl create secret tls <prefix>-<metadata.name>-cert \ --cert=<replica-set-tls-cert> \ --key=<replica-set-tls-key> \ --dry-run=client \ -o yaml | kubectl apply -f -
Renueva el secreto para tu certificado X.509.
Ejecuta este kubectl comando para renovar un secreto existente que almacena el certificado del set de réplicas:
kubectl create secret tls <prefix>-<metadata.name>-clusterfile \ --cert=<replica-set-clusterfile-tls-cert> \ --key=<replica-set-clusterfile-tls-key> \ --dry-run=client \ -o yaml | kubectl apply -f -
Renueva el secreto para los certificados X de tus agentes.509.
Ejecuta este comando kubectl para renovar un secreto existente que almacena los certificados X.509 de los agentes:
kubectl create secret tls <prefix>-<metadata.name>-agent-certs \ --cert=<agent-tls-cert> \ --key=<agent-tls-key> \ --dry-run=client \ -o yaml | kubectl apply -f -
Configura la autenticación X.509 interna para un clúster con fragmentación
Requisitos previos
Antes de asegurar tu clúster particionado usando X.509, por favor implementa un clúster particionado cifrado con TLS.
Habilitar la autenticación interna X.509
Crea el secreto para los certificados X.509 de tus particiones.
Ejecuta este comando kubectl para crear un nuevo secreto que almacene los certificados de las particiones del clúster:
kubectl -n mongodb create secret tls <prefix>-<metadata.name>-0-clusterfile \ --cert=<shard-0-clusterfile-tls-cert> \ --key=<shard-0-clusterfile-tls-cert> kubectl -n mongodb create secret tls <prefix>-<metadata.name>-1-clusterfile \ --cert=<shard-1-clusterfile-tls-cert> \ --key=<shard-1-clusterfile-tls-cert>
Cree el secreto para el certificado X.509 de sus servidores de configuración.
Ejecuta este comando kubectl para crear un nuevo secreto que almacene los certificados del servidor de configuración del clúster particionado:
kubectl -n mongodb create secret tls <prefix>-<metadata.name>-config-clusterfile \ --cert=<config-clusterfile-tls-cert> \ --key=<config-clusterfile-tls-cert>
Crea el secreto para los certificados X.509 de tu servidor mongos.
Ejecute este comando kubectl para crear un nuevo secreto que almacene los certificados del clúster particionado mongos:
kubectl -n mongodb create secret tls <prefix>-<metadata.name>-mongos-clusterfile \ --cert=<mongos-clusterfile-tls-cert> \ --key=<mongos-clusterfile-tls-cert>
Copia el clúster recurso.
Cambia la configuración de este archivo YAML para que coincida con su configuración deseada de sharded cluster.
1 2 apiVersion: mongodb.com/v1 3 kind: MongoDB 4 metadata: 5 name: <my-sharded-cluster> 6 spec: 7 shardCount: 2 8 mongodsPerShardCount: 3 9 mongosCount: 2 10 configServerCount: 3 11 version: "8.0.0" 12 opsManager: 13 configMapRef: 14 name: <configMap.metadata.name> 15 # Must match metadata.name in ConfigMap file 16 credentials: <mycredentials> 17 type: ShardedCluster 18 persistent: true
19 security: 20 tls: 21 ca: <custom-ca> 22 certsSecretPrefix: <prefix> 23 authentication: 24 enabled: true 25 modes: ["X509"] 26 internalCluster: "X509" 27 ...
Configura la configuración general de X.509 para tu recurso de cluster segmentado.
Para habilitar TLS y X.509 en tu implementación, configura los siguientes ajustes en tu objeto de Kubernetes:
Configure los ajustes internos de X.509 para su recurso de cluster fragmentado.
Para habilitar TLS y X.509 en tu implementación, configura los siguientes ajustes en tu objeto de Kubernetes:
Clave | Tipo | Necesidad | Descripción | Ejemplo |
|---|---|---|---|---|
string | Requerido | Utilice esta configuración para habilitar la autenticación interna X.509 del clúster. IMPORTANTE: una vez habilitada la autenticación interna del clúster, no se puede deshabilitar. |
|
Guarda tu archivo de configuración de conjunto de clústeres particionado.
Actualizar y reiniciar la implementación de su clúster fragmentado.
En cualquier directorio, ejecute el siguiente comando de Kubernetes para actualizar y reiniciar su clúster:
kubectl apply -f <sharded-cluster-conf>.yaml
Rastrea el estado de tu implementación.
Para verificar el estado de su MongoDB recurso, utilice el siguiente comando:
kubectl get mdb <resource-name> -o yaml -w
Con la bandera -w (observar) activada, cuando la configuración cambia, la salida se actualiza inmediatamente hasta que la fase de estado alcanza el estado Running. Para obtener más información sobre el estado de implementación de recursos, consulta Solucionar problemas con el operador de Kubernetes.
Renovar certificados de autenticación interna X.509 para un clúster particionado
Si ya creaste los certificados, te recomendamos que los renueves periódicamente utilizando el siguiente procedimiento.
Configura kubectl para que se ajuste por defecto a tu espacio de nombres.
Si aún no lo ha hecho, ejecute el siguiente comando para ejecutar todos los comandos de kubectl en el namespace que creó.
Nota
Si estás implementando un recurso de Ops Manager en una implementación de MongoDB multidispositivo en clústeres de Kubernetes:
Defina
contextcomo el nombre del clúster operador, por ejemplo:kubectl config set context "$MDB_CENTRAL_CLUSTER_FULL_NAME".Establece el
--namespaceen el mismo ámbito que utilizaste para tu implementación de MongoDB de clústeres multi-Kubernetes, como por ejemplo:kubectl config --namespace "mongodb".
kubectl config set-context $(kubectl config current-context) --namespace=<metadata.namespace>
Renueva el secreto para los certificados TLS de tus particiones.
Ejecute este comando kubectl para renovar un secreto existente que almacena los certificados de las particiones del clúster fragmentado:
kubectl -n mongodb create secret tls <prefix>-<metadata.name>-0-cert \ --cert=<shard-0-tls-cert> \ --key=<shard-0-tls-key> \ --dry-run=client \ -o yaml | kubectl apply -f - kubectl -n mongodb create secret tls <prefix>-<metadata.name>-1-cert \ --cert=<shard-1-tls-cert> \ --key=<shard-1-tls-key> \ --dry-run=client \ -o yaml | kubectl apply -f -
Renueva el secreto para los certificados TLS del servidor de configuración.
Ejecuta este comando kubectl para renovar un secreto que almacena los certificados del servidor de configuración del clúster fragmentado:
kubectl -n mongodb create secret tls <prefix>-<metadata.name>-config-cert \ --cert=<config-tls-cert> \ --key=<config-tls-key> \ --dry-run=client \ -o yaml | kubectl apply -f -
Renueva el secreto para los certificados TLS del servidor mongos.
Ejecute este comando kubectl para renovar un secret existente que almacene los certificados de mongos del clúster sharded:
kubectl -n mongodb create secret tls <prefix>-<metadata.name>-mongos-cert \ --cert=<mongos-tls-cert> \ --key=<mongos-tls-key> \ --dry-run=client \ -o yaml | kubectl apply -f -
Renueva el secreto para los certificados de X.509 de tus particiones.
Ejecute este comando kubectl para renovar un secreto existente que almacena los certificados de las particiones del clúster fragmentado:
kubectl -n mongodb create secret tls <prefix>-<metadata.name>-0-clusterfile \ --cert=<shard-0-clusterfile-tls-cert> \ --key=<shard-0-clusterfile-tls-cert> \ --dry-run=client \ -o yaml | kubectl apply -f - kubectl -n mongodb create secret tls <prefix>-<metadata.name>-1-clusterfile \ --cert=<shard-1-clusterfile-tls-cert> \ --key=<shard-1-clusterfile-tls-cert> \ --dry-run=client \ -o yaml | kubectl apply -f -
Renueva el secreto para el X de tus servidores de configuración.509 certificado.
Ejecute este comando kubectl para renovar un secreto existente que almacena el certificado de los servidores de configuración del clúster fragmentado:
kubectl -n mongodb create secret tls <prefix>-<metadata.name>-config-clusterfile \ --cert=<config-clusterfile-tls-cert> \ --key=<config-clusterfile-tls-cert> \ --dry-run=client \ -o yaml | kubectl apply -f -
Renueva el secreto para los certificados X.509 de tu servidor mongos.
Ejecute este comando kubectl para renovar un secret existente que almacene los certificados de mongos del clúster sharded:
kubectl -n mongodb create secret tls <prefix>-<metadata.name>-mongos-clusterfile \ --cert=<mongos-clusterfile-tls-cert> \ --key=<mongos-clusterfile-tls-cert> \ --dry-run=client \ -o yaml | kubectl apply -f -
Renueva el secreto para los certificados X de tus agentes.509.
Ejecuta este comando kubectl para renovar un secreto existente que almacena los certificados X.509 de los agentes:
kubectl create secret tls <prefix>-<metadata.name>-agent-certs \ --cert=<agent-tls-cert> \ --key=<agent-tls-key> \ --dry-run=client \ -o yaml | kubectl apply -f -