Cuando crees un clúster de base de datos, se generará y configurará un certificado de servidor firmado por la AC predeterminada de GDC para que lo use tu servidor de base de datos. Para firmar y subir un certificado para tu base de datos que emita tu propia PKI, sigue el siguiente procedimiento. El emisor predeterminado de tu organización debe estar en el modo de certificado BYO para usar esta función.
API
Después de crear el clúster de base de datos y cuando esté listo, guarda la solicitud de firma de certificado generada como un archivo.
kubectl get certificate.pki.security.gdc.goog \ dbs-pg-cert-request-DBCLUSTER_NAME \ -n USER_PROJECT -o jsonpath='{.status.byoCertStatus.csrStatus.csr}' \ | base64 -d > DBCLUSTER_NAME.csrCrea un archivo de extensiones de CSR que contenga los SAN para tu clúster de base de datos.
export SAN=$(openssl req -in DBCLUSTER_NAME.csr -noout -text | grep 'DNS:' | sed -s 's/^[ ]*//')echo "keyUsage=digitalSignature,keyEncipherment extendedKeyUsage=serverAuth,clientAuth subjectAltName=${SAN:?}" > DBCLUSTER_NAME-csr.extCon el CSR y el archivo de extensión, genera el certificado firmado por tu AC. En la muestra de código, se usa
openssl, pero este paso se puede completar con otras herramientas.openssl x509 -req -in DBCLUSTER_NAME.csr -days 365 \ -CA CA_CERTIFICATE_FILE -CAkey CA_PRIVATE_KEY_FILE \ -CAcreateserial -extfile DBCLUSTER_NAME-csr.ext \ -out DBCLUSTER_NAME-signed.crtActualiza el recurso de certificado con el certificado firmado y el certificado de la AC.
echo "spec: byoCertificate: certificate: $(base64 -w0 DBCLUSTER_NAME-signed.crt) ca: $(base64 -w0 CA_CERTIFICATE_FILE)" > patch.txtkubectl patch certificate.pki.security.gdc.goog \ dbs-pg-cert-request-DBCLUSTER_NAME \ -n USER_PROJECT --patch-file patch.txt --type='merge'Verifica que el certificado haya alcanzado un estado listo después de la carga.
kubectl get certificate.pki.security.gdc.goog \ dbs-pg-cert-request-DBCLUSTER_NAME \ -n USER_PROJECT -o json | jq -r ' .status.conditions[] | select( .type as $id | "Ready" | index($id))'El resultado debería ser similar al siguiente ejemplo:
{ "lastTransitionTime": "2024-05-03T08:42:10Z", "message": "Certificate is issued", "observedGeneration": 2, "reason": "Issued", "status": "True", "type": "Ready" }
Reemplaza lo siguiente:
DBCLUSTER_NAME: Es el nombre del clúster de base de datos.USER_PROJECT: Es el nombre del proyecto de usuario en el que se creó el clúster de base de datos.CA_CERTIFICATE_FILE: Es la ruta de acceso al archivo del certificado de la AC de la base de datos.CA_PRIVATE_KEY_FILE: Es la ruta de acceso al archivo de claves privadas de la AC de la base de datos.