Esta guía le indica cómo configurar:
Autenticación interna X.509 entre nodos de MongoDB en un clúster.
Autenticación X.509 de los clientes a sus instancias de MongoDB.
El operador de Kubernetes no admite otros esquemas de autenticación entre nodos MongoDB en un clúster.
Nota
No es posible proteger una instancia independiente de MongoDB en un clúster de Kubernetes.
Requisitos generales
Antes de proteger cualquiera de sus implementaciones de MongoDB utilizando CifradoTLS, complete lo siguiente:
Al habilitar la autenticación X.509 en el nivel del proyecto, se configuran todos los agentes para usar la autenticación de cliente X.509 cuando se comunican con implementaciones de MongoDB.
Configurar la autenticación interna X.509 para un conjunto de réplicas
Requisitos previos
Antes de proteger su conjunto de réplicas mediante X.,509 implemente un conjunto de réplicas cifrado con TLS.
Habilitar la autenticación interna X.509
Crea el secreto para su509 certificadoX..
Ejecutar esto kubectl Comando para crear un nuevo secreto que almacena el certificado del conjunto de réplicas:
kubectl create secret tls <prefix>-<metadata.name>-clusterfile \ --cert=<replica-set-clusterfile-tls-cert> \ --key=<replica-set-clusterfile-tls-key>
Nota
Debes anteponer a tus secretos el prefijo <prefix>-<metadata.name>.
Por ejemplo, si llama a su implementación my-deployment y establece el prefijo,mdb debe asignarle al secreto TLS para las comunicaciones TLS del cliente el mdb-my-deployment-cert nombre. Además, debe asignarle al secreto TLS para la autenticación interna del clúster (si está habilitada) el mdb-my-deployment-clusterfile nombre.
Copie el recurso del conjunto de réplicas de muestra.
Cambie la configuración de este archivo YAML para que coincida con la configuración del conjunto 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 ...
Pegue la sección de ejemplo copiada en su recurso de conjunto de réplicas existente.
Abre el editor de texto de preferencia y pega la especificación del objeto al final del archivo recurso, en la sección spec.
Configure los ajustes generales de X.509 para su recurso de conjunto de réplicas.
Para habilitar TLS y X.509 en su implementación, configure las siguientes opciones en su objeto de Kubernetes:
Configure los ajustes internos X.509 para su recurso de conjunto de réplicas.
Para habilitar TLS y X.509 en su implementación, configure las siguientes opciones en su objeto de Kubernetes:
Clave | Tipo | Necesidad | Descripción | Ejemplo |
|---|---|---|---|---|
string | Requerido | Utilice esta configuración para habilitar la autenticación del clúster interno X..509 IMPORTANTE: Una vez habilitada la autenticación del clúster interno, no se puede deshabilitar. |
|
Guarde el archivo de configuración del conjunto de réplicas.
Aplique sus cambios a la implementación de su conjunto de réplicas.
Invoque el siguiente comando de Kubernetes para actualizar su conjunto de réplicas:
kubectl apply -f <replica-set-conf>.yaml
Realice un seguimiento del estado de su implementación.
Para comprobar el estado de su recurso MongoDB, utilice el siguiente comando:
kubectl get mdb <resource-name> -o yaml -w
Con el -w indicador (observación) activado, cuando la configuración cambia, la salida se actualiza inmediatamente hasta que la fase de estado alcanza el Running estado. Para obtener más información sobre los estados de implementación de recursos, consulte Solucionar problemas del operador de Kubernetes.
Renovar certificados internos de autenticación X.509 para un set de réplicas
Si ya ha creado certificados, le recomendamos que los renueve periódicamente mediante el siguiente procedimiento.
Configure para kubectl que el valor predeterminado sea su espacio de nombres.
Si aún no lo ha hecho, ejecute el siguiente comando para ejecutar todos los kubectl comandos en el espacio de nombres que creó.
Nota
Si está implementando un recurso de Ops Manager en una implementación de MongoDB de un clúster de Kubernetes múltiple:
Establezca
contexten el nombre del clúster del operador, como por ejemplo:kubectl config set context "$MDB_CENTRAL_CLUSTER_FULL_NAME".Establezca
--namespaceen el mismo ámbito que utilizó para su implementación de MongoDB en un clúster de Kubernetes múltiple, como porkubectl config --namespace "mongodb"ejemplo:.
kubectl config set-context $(kubectl config current-context) --namespace=<metadata.namespace>
Renueva el secreto para tus certificados TLS.
Ejecute este kubectl comando para renovar un secreto existente que almacena los certificados del conjunto 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 -
Renueve el secreto de su509 certificadoX..
Ejecute este kubectl comando para renovar un secreto existente que almacena el certificado del conjunto 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 -
Renueve el secreto de los509 certificados X. de sus agentes.
Ejecute este kubectl comando para renovar un secreto existente que almacena los509 certificados X. 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 -
Configurar la autenticación interna X.509 para un clúster fragmentado
Requisitos previos
Antes de proteger su clúster fragmentado mediante X.,509 implemente un clúster fragmentado cifrado con TLS.
Habilitar la autenticación interna X.509
Crea el secreto para los certificados X.509 de tus Shards.
Ejecute este kubectl comando para crear un nuevo secreto que almacene los certificados de los fragmentos 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> 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. de sus servidores de509 configuración.
Ejecute este kubectl comando para crear un nuevo secreto que almacene los certificados del servidor 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>
Crea el secreto para los certificados X.509 de tu servidor mongos.
Ejecute este kubectl comando para crear un nuevo secreto que almacene los certificados mongos del clúster fragmentado:
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.
Cambie la configuración de este archivo YAML para que coincida con la configuración de clúster fragmentado deseada.
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 ...
Pegue la sección de ejemplo copiada en su recurso de clúster fragmentado existente.
Abre el editor de texto de preferencia y pega la especificación del objeto al final del archivo recurso, en la sección spec.
Configure los ajustes generales de X.509 para su recurso de clúster fragmentado.
Para habilitar TLS y X.509 en su implementación, configure las siguientes opciones en su objeto de Kubernetes:
Configure los ajustes internos X.509 para su recurso de clúster fragmentado.
Para habilitar TLS y X.509 en su implementación, configure las siguientes opciones en su objeto de Kubernetes:
Clave | Tipo | Necesidad | Descripción | Ejemplo |
|---|---|---|---|---|
string | Requerido | Utilice esta configuración para habilitar la autenticación del clúster interno X..509 IMPORTANTE: Una vez habilitada la autenticación del clúster interno, no se puede deshabilitar. |
|
Guarde el archivo de configuración del clúster fragmentado.
Actualice y reinicie su implementación de clúster fragmentado.
En cualquier directorio, invoque el siguiente comando de Kubernetes para actualizar y reiniciar su clúster fragmentado:
kubectl apply -f <sharded-cluster-conf>.yaml
Realice un seguimiento del estado de su implementación.
Para comprobar el estado de su recurso MongoDB, utilice el siguiente comando:
kubectl get mdb <resource-name> -o yaml -w
Con el -w indicador (observación) activado, cuando la configuración cambia, la salida se actualiza inmediatamente hasta que la fase de estado alcanza el Running estado. Para obtener más información sobre los estados de implementación de recursos, consulte Solucionar problemas del operador de Kubernetes.
Renovar certificados de autenticación interna X.509 para un clúster fragmentado
Si ya ha creado certificados, le recomendamos que los renueve periódicamente mediante el siguiente procedimiento.
Configure para kubectl que el valor predeterminado sea su espacio de nombres.
Si aún no lo ha hecho, ejecute el siguiente comando para ejecutar todos los kubectl comandos en el espacio de nombres que creó.
Nota
Si está implementando un recurso de Ops Manager en una implementación de MongoDB de un clúster de Kubernetes múltiple:
Establezca
contexten el nombre del clúster del operador, como por ejemplo:kubectl config set context "$MDB_CENTRAL_CLUSTER_FULL_NAME".Establezca
--namespaceen el mismo ámbito que utilizó para su implementación de MongoDB en un clúster de Kubernetes múltiple, como porkubectl config --namespace "mongodb"ejemplo:.
kubectl config set-context $(kubectl config current-context) --namespace=<metadata.namespace>
Renueve el secreto de los certificados TLS de sus Shards.
Ejecute este kubectl comando para renovar un secreto existente que almacena los certificados de los fragmentos 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 -
Renueve el secreto de los certificados TLS de su servidor de configuración.
Ejecute este kubectl comando para renovar un secreto existente 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 de los certificados X. de tus509 Shards.
Ejecute este kubectl comando para renovar un secreto existente que almacena los certificados de los fragmentos 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 -
Renueve el secreto del certificado X. de sus servidores de509 configuración.
Ejecute este kubectl comando 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 -
Renueve el secreto de los509 certificados X. de su 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 -
Renueve el secreto de los509 certificados X. de sus agentes.
Ejecute este kubectl comando para renovar un secreto existente que almacena los509 certificados X. 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 -