Esta sección proporciona orientación sobre la creación de certificados TLS para cada componente de MongoDB y la creación de secretos de Kubernetes en cada uno de los clústeres de Kubernetes para montar de forma segura los certificados TLS en los Pods de Kubernetes adecuados.
El proceso descrito a continuación utiliza Cert Manager para crear los certificados TLS. Sin embargo, tenga en cuenta que esta es una guÃa basada en opiniones y que MongoDB no admite CertManager. Además, CertManager es solo una de las muchas formas en las que puedes agregar certificados TLS a tus clústeres de Kubernetes. Además, los certificados autofirmados pueden no ser adecuados para implementaciones en producción, dependiendo de los requisitos de seguridad de su organización. Si requiere certificados de confianza pública, configure su Emisor en consecuencia o proporcione directamente el certificado TLS. Para obtener más información, consulta Configuración de la integración con cert-manager.
Requisitos previos
Antes de empezar, realiza las siguientes tareas:
Instale
kubectl.Establece las variables de entorno
K8S_CLUSTER_*_CONTEXT_NAMEcomo se explica en la GuÃa de clústeres GKE.
Código fuente
Se puede encontrar todo el código fuente incluido en el repositorio de MongoDB Kubernetes operador.
Procedimiento
Usar Helm para instalar cert-manager.
helm upgrade --install \ cert-manager jetstack/cert-manager \ --kube-context "${K8S_CLUSTER_0_CONTEXT_NAME}" \ --namespace cert-manager \ --create-namespace \ --set crds.enabled=trueRelease "cert-manager" does not exist. Installing it now.NAME: cert-managerLAST DEPLOYED: Tue Oct 20 08:52:33 2026NAMESPACE: cert-managerSTATUS: deployedREVISION: 1TEST SUITE: NoneNOTES:cert-manager v1.21.2 has been deployed successfully!
In order to begin issuing certificates, you will need to set up a ClusterIssueror Issuer resource (for example, by creating a 'letsencrypt-staging' issuer).
More information on the different types of issuers and how to configure themcan be found in our documentation:
https://cert-manager.io/docs/configuration/
For information on how to configure cert-manager to automatically provisionCertificates for Ingress resources, take a look at the `ingress-shim`documentation:
https://cert-manager.io/docs/usage/ingress/
For information on how to configure cert-manager to automatically provisionCertificates for Gateway API resources, take a look at the `gateway resource`documentation:
https://cert-manager.io/docs/usage/gateway/Crear un emisor de certificados.
kubectl apply --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -f - <<EOFapiVersion: cert-manager.io/v1kind: ClusterIssuermetadata: name: selfsigned-cluster-issuerspec: selfSigned: {}EOF
kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" wait --for=condition=Ready clusterissuer selfsigned-cluster-issuer
kubectl apply --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -f - <<EOFapiVersion: cert-manager.io/v1kind: Certificatemetadata: name: my-selfsigned-ca namespace: cert-managerspec: isCA: true commonName: my-selfsigned-ca secretName: root-secret privateKey: algorithm: ECDSA size: 256 issuerRef: name: selfsigned-cluster-issuer kind: ClusterIssuerEOF
kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" wait --for=condition=Ready -n cert-manager certificate my-selfsigned-ca
kubectl apply --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -f - <<EOFapiVersion: cert-manager.io/v1kind: ClusterIssuermetadata: name: my-ca-issuerspec: ca: secretName: root-secretEOF
kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" wait --for=condition=Ready clusterissuer my-ca-issuerVerificar la creación del emisor.
kubectl apply --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -f - <<EOFapiVersion: cert-manager.io/v1kind: Certificatemetadata: name: test-selfsigned-cert namespace: cert-managerspec: dnsNames: - example.com secretName: test-selfsigned-cert-tls issuerRef: name: my-ca-issuer kind: ClusterIssuerEOF
kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" wait -n cert-manager --for=condition=Ready certificate test-selfsigned-cert
kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" delete -n cert-manager certificate test-selfsigned-certcertificate.cert-manager.io/test-selfsigned-cert createdcertificate.cert-manager.io/test-selfsigned-cert condition metcertificate.cert-manager.io "test-selfsigned-cert" deleted from cert-manager namespaceCrear CA configMap.
Si el certificado TLS de su MongoDB Ops Manager está firmado por una CA personalizada, el certificado CA también debe contener certificados adicionales que permitan a los agentes descargar binarios de MongoDB desde Internet. Para crear el (los) certificado(s) TLS, cree un ConfigMap para contener el certificado CA:
mkdir -p certs
openssl s_client -showcerts -verify 2 \-connect downloads.mongodb.com:443 -servername downloads.mongodb.com < /dev/null \| awk '/BEGIN/,/END/{ if(/BEGIN/){a++}; out="certs/cert"a".crt"; print >out}'
kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" get secret root-secret -n cert-manager -o jsonpath="{.data['ca\.crt']}" | base64 --decode > certs/ca.crtcat certs/ca.crt certs/cert2.crt certs/cert3.crt >> certs/mms-ca.crt
kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" create cm ca-issuer -n "${MDB_NAMESPACE}" --from-file=ca-pem=certs/mms-ca.crt --from-file=mms-ca.crt=certs/mms-ca.crtkubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" create cm ca-issuer -n "${OM_NAMESPACE}" --from-file=ca-pem=certs/mms-ca.crt --from-file=mms-ca.crt=certs/mms-ca.crt