签署并上传服务器证书

创建数据库集群时,系统会生成一个由默认 GDC CA 签名的服务器证书,并将其配置为供数据库服务器使用。如需为由您自己的 PKI 颁发的数据库签名并上传证书,请执行以下步骤。贵组织的默认签发者必须处于自带证书模式,才能使用此功能。

API

  1. 创建数据库集群并准备就绪后,将生成的证书签名请求另存为文件。

    kubectl get certificate.pki.security.gdc.goog \
    dbs-DBENGINE_SHORT_NAME-cert-request-DBCLUSTER_NAME \
    -n USER_PROJECT -o jsonpath='{.status.byoCertStatus.csrStatus.csr}' \
    | base64 -d > DBCLUSTER_NAME.csr
    
  2. 创建一个包含数据库集群 SAN 的 CSR 扩展文件。

    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.ext
    
  3. 使用 CSR 和扩展文件生成由 CA 签名的证书。 此代码示例使用 openssl,但您也可以使用其他工具完成此步骤。

    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.crt
    
  4. 使用已签名的证书和 CA 证书更新证书资源。

    echo "spec:
      byoCertificate:
        certificate: $(base64 -w0 DBCLUSTER_NAME-signed.crt)
        ca: $(base64 -w0 CA_CERTIFICATE_FILE)" > patch.txt
    
    kubectl patch certificate.pki.security.gdc.goog \
    dbs-DBENGINE_SHORT_NAME-cert-request-DBCLUSTER_NAME \
    -n USER_PROJECT --patch-file patch.txt --type='merge'
    
  5. 验证证书在上传后是否已达到就绪状态。

    kubectl get certificate.pki.security.gdc.goog \
    dbs-DBENGINE_SHORT_NAME-cert-request-DBCLUSTER_NAME \
    -n USER_PROJECT -o json | jq -r ' .status.conditions[] | select( .type as $id | "Ready" | index($id))'
    

    输出应类似如下所示:

    {
      "lastTransitionTime": "2024-05-03T08:42:10Z",
      "message": "Certificate is issued",
      "observedGeneration": 2,
      "reason": "Issued",
      "status": "True",
      "type": "Ready"
    }
    
  6. 仅当您使用的是 Oracle 数据库时,才需要停止并重新启动数据库集群,以便重新加载监听器的 SSL 配置。

替换以下内容:

  • DBENGINE_SHORT_NAME:数据库引擎的缩写名称。这是 al (AlloyDB Omni)、pg (PostgreSQL) 或 ora (Oracle) 之一。
  • DBCLUSTER_NAME:数据库集群的名称。
  • USER_PROJECT:创建数据库集群的用户项目的名称。
  • CA_CERTIFICATE_FILE:数据库 CA 证书文件的路径。
  • CA_PRIVATE_KEY_FILE:数据库 CA 私钥文件的路径。