cert-manager simplifica y automatiza la gestión de certificados de seguridad para Kubernetes. El siguiente procedimiento describe cómo configurar cert-manager para generar certificados para los recursos del operador Kubernetes de MongoDB.
Requisitos previos
Para implementar un conjunto de réplicas utilizando un objeto, debe:
Tener o crear una instancia de Ops Manager o una organización de Cloud Manager.
Tener o instalar el Controladores MongoDB para el operador Kubernetes.
Cree o genere un ConfigMap de operador de Kubernetes.
Cree credenciales para el operador de Kubernetes o configure una herramienta de almacenamiento de secretos diferente.
Nota
Para evitar almacenar secretos en implementaciones de Kubernetes de un solo clúster, puede migrar todos los secretos a una herramienta de almacenamiento de secretos. Las implementaciones en varios clústeres de Kubernetes no admiten el almacenamiento de secretos en herramientas de almacenamiento de secretos, como HashiCorp Vault.
Generar uno CertificadoTLS para cada uno de los siguientes componentes:
Tu set de réplicas. Asegúrate de añadir SANs para cada pod de Kubernetes que hostee un nodo de tu set de réplicas al certificado.
En su certificado TLS, el SAN de cada pod debe utilizar el siguiente formato:
<pod-name>.<metadata.name>-svc.<namespace>.svc.cluster.local Importante
Si está utilizando un proveedor de servicios basado en ACME, como Let's Encrypt, para emitir certificados TLS, es posible que el proveedor le prohíba agregar los FQDNpredeterminados del Pod
*.svc.cluster.local() a las SANen el certificado.Para usar un certificado basado en ACME, debe configurarlo para el recurso del conjunto de réplicas. Para obtener más información, consulte el paso sobre certificados TLS basados en ACME en el procedimiento.
El agente de MongoDB de su proyecto. Para el certificado del agente de MongoDB, asegúrese de cumplir los siguientes requisitos:
El nombre común en el certificado TLS no está vacío.
La organización y la unidad organizativa combinadas en cada certificado TLS difieren de la organización y la unidad organizativa en el certificado TLS de los miembros de su conjunto de réplicas.
Debe tener el archivo de certificado CA y
ca-pemnombrarlo.Debe tener la clave que utilizó para firmar sus certificados TLS.
Importante
El operador de Kubernetes utiliza kubernetes.io/tls secretos para almacenar TLS certificados y llaves privadas para Ops Manager y recursos de MongoDB. A partir de la versión 1.17.0 del operador de Kubernetes, el operador de Kubernetes no admite archivos PEM concatenados almacenados como secretos opacos.
Para implementar un conjunto de réplicas utilizando un objeto, debe:
Tener o crear una instancia de Ops Manager o una organización de Cloud Manager.
Tener o instalar los controladores MongoDB para el operador Kubernetes.
Cree o genere un ConfigMap de operador de Kubernetes.
Cree credenciales para el operador de Kubernetes o configure una herramienta de almacenamiento de secretos diferente.
Nota
Para evitar almacenar secretos en implementaciones de Kubernetes de un solo clúster, puede migrar todos los secretos a una herramienta de almacenamiento de secretos. Las implementaciones en varios clústeres de Kubernetes no admiten el almacenamiento de secretos en herramientas de almacenamiento de secretos, como HashiCorp Vault.
Procedimiento
Crear un secreto de CA.
Nota
Los siguientes pasos suponen que ya ha creado una CA personalizada junto con la tls.key clave privada correspondiente y el tls.crt certificado firmado.
Crea un secreto para almacenar tus datos de CA:
apiVersion: v1 kind: Secret metadata: name: ca-key-pair namespace: <namespace> data: tls.crt: <your-CA-certificate> tls.key: <your-CA-private-key>
Agregue certificados adicionales a los certificados CA personalizados.
Si su certificado TLS de Ops Manager está firmado por una CA personalizada, este certificado también debe contener certificados adicionales que permitan al Daemon de Copia de Seguridad de Ops Manager descargar binarios de MongoDB de internet. Para crear los certificados TLS, cree un ConfigMap que contenga el certificado de la CA:
Importante
El operador de Kubernetes requiere que su certificado de Ops Manager se llame mms-ca.crt en ConfigMap.
Obtenga la cadena completa de certificados TLS para Ops Manager
downloads.mongodb.comdesde. El siguienteopensslcomando envía el certificado de la cadena a su directorio de trabajo actual, en.crtformato:openssl s_client -showcerts -verify 2 \ -connect downloads.mongodb.com:443 -servername downloads.mongodb.com < /dev/null \ | awk '/BEGIN/,/END/{ if(/BEGIN/){a++}; out="cert"a".crt"; print >out}' Concatena el archivo de certificado de la CA para Ops Manager con toda la cadena de certificados TLS de
downloads.mongodb.comque se obtuvo en el paso anterior:cat <custom_ca_cert.pem> cert2.crt cert3.crt cert4.crt >> mms-ca.crt Nota
Reemplace el marcador de posición
<custom_ca_cert.pem>con su archivo PEM de certificado CA personalizado.No incluya su archivo
cert1.crt, ya que es su certificado de servidor de MongoDB el que no debe incluirse.
Cree el ConfigMap para Ops Manager:
kubectl create configmap om-http-cert-ca --from-file="mms-ca.crt"
Configurar un emisor de CA de administrador de certificados
Cree un emisor de CA que haga referencia a su secreto de CA:
apiVersion: cert-manager.io/v1 kind: Issuer metadata: name: ca-issuer namespace: <namespace> spec: ca: secretName: ca-key-pair Verifique que el emisor esté listo:
kubectl get issuer ca-issuer El campo
READYen la salida debe tener un valor deTrue.
Crear un CA ConfigMap
Cree un ConfigMap que contenga su CA. Debe tener dos campos, ca-pem y,mms-ca.crt que apunten a su certificado de CA. Reemplace <CA-certificate> con la ruta a su certificado de CA.
kubectl create cm ca-issuer --from-file=ca-pem=<CA-certificate> \ --from-file=mms-ca.crt=<CA-certificate>
Cree certificados para sus recursos de MongoDB
Para proteger un recurso MongoDB con su certificación generada, debe crear certificados tanto para el recurso en sí como para el agente MongoDB.
Cree el certificado de recurso de MongoDB. El siguiente ejemplo supone un conjunto de réplicas llamado
my-replica-setcon tres miembros:Nota
El
spec.issuerRef.nameparámetro hace referencia al CA ConfigMap creado previamente.apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: my-replica-set-certificate namespace: mongodb spec: dnsNames: - my-replica-set-0 - my-replica-set-0.my-replica-set-svc.mongodb.svc.cluster.local - my-replica-set-1 - my-replica-set-1.my-replica-set-svc.mongodb.svc.cluster.local - my-replica-set-2 - my-replica-set-2.my-replica-set-svc.mongodb.svc.cluster.local duration: 240h0m0s issuerRef: name: ca-issuer renewBefore: 120h0m0s secretName: mdb-my-replica-set-cert usages: - server auth - client auth Para clústeres fragmentados, debe crear un certificado para cada StatefulSet. Para obtener más información sobre la configuración de clústeres fragmentados,consulte Implementar un clúster fragmentado.
Cree el certificado del agente MongoDB:
Nota
El
spec.issuerRef.nameparámetro hace referencia al CA ConfigMap creado previamente.apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: agent-certs namespace: mongodb spec: commonName: automation dnsNames: - automation duration: 240h0m0s issuerRef: name: ca-issuer renewBefore: 120h0m0s secretName: mdb-my-replica-set-agent-certs usages: - digital signature - key encipherment - client auth subject: countries: - US localities: - NY organizationalUnits: - a-1635241837-m5yb81lfnrz organizations: - cluster.local-agent provinces: - NY Cree el recurso MongoDB:
Nota
Si deja el
spec.security.tls.caparámetro sin especificar, el valor predeterminado{replica-set}-caserá.apiVersion: mongodb.com/v1 kind: MongoDB metadata: name: my-replica-set namespace: mongodb spec: type: ReplicaSet members: 3 version: 8.0.0 opsManager: configMapRef: name: my-project credentials: my-credentials security: certsSecretPrefix: mdb authentication: enabled: true modes: - X509 tls: ca: ca-issuer enabled: true
Cree certificados para Ops Manager y AppDB con TLS
Para proteger un recurso de Ops Manager, primero debe crear certificados para Ops Manager y AppDB y, luego, crear el recurso de Ops Manager.
Cree el certificado de Ops Manager:
Nota
El
spec.issuerRef.nameparámetro hace referencia al CA ConfigMap creado previamente.apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: cert-for-ops-manager namespace: mongodb spec: dnsNames: - om-with-https-svc.mongodb.svc.cluster.local duration: 240h0m0s issuerRef: name: ca-issuer renewBefore: 120h0m0s secretName: mdb-om-with-https-cert usages: - server auth - client auth Cree el certificado AppDB:
Nota
El
spec.issuerRef.nameparámetro hace referencia al CA ConfigMap creado previamente.apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: appdb-om-with-https-db-cert namespace: mongodb spec: dnsNames: - om-with-https-db-0 - om-with-https-db-0.om-with-https-db-svc.mongodb.svc.cluster.local - om-with-https-db-1 - om-with-https-db-1.om-with-https-db-svc.mongodb.svc.cluster.local - om-with-https-db-2 - om-with-https-db-2.om-with-https-db-svc.mongodb.svc.cluster.local duration: 240h0m0s issuerRef: name: ca-issuer renewBefore: 120h0m0s secretName: appdb-om-with-https-db-cert usages: - server auth - client auth Cree el recurso Ops Manager:
apiVersion: mongodb.com/v1 kind: MongoDBOpsManager metadata: name: om-with-https namespace: mongodb spec: adminCredentials: ops-manager-admin-secret applicationDatabase: members: 3 security: certsSecretPrefix: appdb tls: ca: ca-issuer version: 8.0.0-ubi8 replicas: 1 security: certsSecretPrefix: mdb tls: ca: ca-issuer
Renovación de certificados
cert-manager renovará los certificados en las siguientes circunstancias:
El certificado caduca según sus campos
spec.durationyspec.renewBefore.Elimina el secreto que contiene un certificado. En este caso, cert-manager recrea el secreto según la configuración de su recurso de certificado personalizado.
Se altera la configuración del recurso personalizado del certificado. En este caso, cert-manager recrea el secreto que contiene el certificado cuando detecta los cambios en su configuración.