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, ten en cuenta que esta es una guía partidista y CertManager no cuenta con el apoyo de MongoDB. Además, CertManager es sólo una de las muchas formas en las que puede añadir certificados TLS a sus 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 tu organización. Si requiere certificados confiables públicamente, configure su Emisor en consecuencia o proporcione directamente el certificado TLS. Para obtener más información, consulte Configurar una integración de cert-manager.
Requisitos previos
Antes de empezar, realiza las siguientes tareas:
Instale
kubectl.Instala Helm.
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
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-cert/includes/code-examples/outputs/test_gke_multi_cluster_snippets/ra-05_0221_verify_issuer.out
certificate.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.
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