简体中文版经机器翻译而成,仅供参考。如与英语版出现任何冲突,应以英语版为准。

添加自定义 TLS 证书

您可以删除现有的自签名 TLS 证书,并将其替换为由证书颁发机构( CA )签名的 TLS 证书。

您需要什么? #8217 ;将需要什么
  • 安装了 Astra 控制中心的 Kubernetes 集群

  • 对集群上的命令 Shell 进行管理访问,以运行 kubectl 命令

  • CA 中的专用密钥和证书文件

删除自签名证书

删除现有的自签名 TLS 证书。

  1. 使用 SSH ,以管理用户身份登录到托管 Astra 控制中心的 Kubernetes 集群。

  2. 使用以下命令查找与当前证书关联的 TLS 密钥,并将 ` <Acc-deployment-namespace>` 替换为 Astra Control Center 部署命名空间:

    kubectl get certificate -n <ACC-deployment-namespace>
  3. 使用以下命令删除当前安装的密钥和证书:

    kubectl delete cert cert-manager-certificates -n <ACC-deployment-namespace>
    kubectl delete secret secure-testing-cert -n <ACC-deployment-namespace>

添加新证书

添加一个由 CA 签名的新 TLS 证书。

  1. 使用以下命令使用 CA 中的专用密钥和证书文件创建新的 TLS 密钥,并将括号 <> 中的参数替换为相应的信息:

    kubectl create secret tls <secret-name> --key <private-key-filename> --cert <certificate-filename> -n <ACC-deployment-namespace>
  2. 使用以下命令和示例编辑集群自定义资源定义( CRD )文件,并将 spec.selfSigned 值更改为 spec.ca.secretName ,以引用您先前创建的 TLS 密钥:

    kubectl edit clusterissuers.cert-manager.io/cert-manager-certificates -n <ACC-deployment-namespace>
    ....
    
    #spec:
    #  selfSigned: {}
    
    spec:
      ca:
        secretName: <secret-name>
  3. 使用以下命令和示例输出验证所做的更改是否正确以及集群是否已准备好验证证书,并将 ` <Acc-deployment-namespace>` 替换为 Astra Control Center 部署命名空间:

    kubectl describe clusterissuers.cert-manager.io/cert-manager-certificates -n <ACC-deployment-namespace>
    ....
    
    Status:
      Conditions:
        Last Transition Time:  2021-07-01T23:50:27Z
        Message:               Signing CA verified
        Reason:                KeyPairVerified
        Status:                True
        Type:                  Ready
    Events:                    <none>
  4. 使用以下示例创建 certificate.yaml 文件,将括号中的占位值替换为相应的信息:

    apiVersion: cert-manager.io/v1
    kind: Certificate
    metadata:
      name: <certificate-name>
      namespace: <ACC-deployment-namespace>
    spec:
      secretName: <certificate-secret-name>
      duration: 2160h # 90d
      renewBefore: 360h # 15d
      dnsNames:
      - <astra.dnsname.example.com> #Replace with the correct Astra Control Center DNS address
      issuerRef:
        kind: ClusterIssuer
        name: cert-manager-certificates
  5. 使用以下命令创建证书:

    kubectl apply -f certificate.yaml
  6. 使用以下命令和示例输出,验证是否已正确创建证书以及是否使用您在创建期间指定的参数(例如名称,持续时间,续订截止日期和 DNS 名称)。

    kubectl describe certificate -n <ACC-deployment-namespace>
    ....
    
    Spec:
      Dns Names:
        astra.example.com
      Duration:  125h0m0s
      Issuer Ref:
        Kind:        ClusterIssuer
        Name:        cert-manager-certificates
      Renew Before:  61h0m0s
      Secret Name:   <certificate-secret-name>
    Status:
      Conditions:
        Last Transition Time:  2021-07-02T00:45:41Z
        Message:               Certificate is up to date and has not expired
        Reason:                Ready
        Status:                True
        Type:                  Ready
      Not After:               2021-07-07T05:45:41Z
      Not Before:              2021-07-02T00:45:41Z
      Renewal Time:            2021-07-04T16:45:41Z
      Revision:                1
    Events:                    <none>
  7. 使用以下命令和示例编辑传入 CRD TLS 选项以指向新的证书密钥,并将括号 <> 中的占位符值替换为相应的信息:

    kubectl edit ingressroutes.traefik.containo.us -n <ACC-deployment-namespace>
    ....
    
    # tls:
    #    options:
    #      name: default
    #    secretName: secure-testing-cert
    #    store:
    #      name: default
    
     tls:
        options:
          name: default
        secretName: <certificate-secret-name>
        store:
          name: default
  8. 使用 Web 浏览器浏览到 Astra 控制中心的部署 IP 地址。

  9. 验证证书详细信息是否与您安装的证书的详细信息匹配。

  10. 导出证书并将结果导入到 Web 浏览器中的证书管理器中。