使用您自己的 TLS 证书

本页面介绍如何设置 Cloud Run for Anthos,以使用您自己的 SSL/TLS 证书(适用于您不想使用代管式 TLS 证书功能的场合)。

将证书存储到 Kubernetes Secret 并在 Istio Ingress Gateway 规范中指定证书后,Istio Ingress Gateway 可以支持从您的证书提供的 TLS 协议。

准备工作

这些说明假定您已拥有自己的 TLS 证书。

将 TLS 证书/私钥存储到 Kubernetes Secret 中

如需将证书存储到 Secret 中,请执行以下操作:

  1. 将证书复制到当前目录中。

  2. 使用以下命令创建用于存储证书的 Secret,其中 privkey.pem 包含您的证书私钥,而 fullchain.pem 包含公共证书:

    kubectl create --namespace gke-system secret tls SECRET_NAME \
      --key privkey.pem \
      --cert fullchain.pem

为 Istio Ingress Gateway 指定 TLS 证书

修改 Istio Ingress Gateway 规范以使用包含 TLS 证书的 Kubernetes Secret:

  1. 打开共享网关规范以进行修改:

    kubectl edit gateway gke-system-gateway --namespace knative-serving
  2. 将以下部分添加到您的网关规范,使用您先前创建的 Secret 指定 TLS 证书:

    - hosts:
      - "*"
      port:
        name: https
        number: 443
        protocol: HTTPS
      tls:
        mode: SIMPLE
        credentialName: SECRET_NAME
    

    您的网关规范应如下所示:

    apiVersion: networking.istio.io/v1alpha3
    kind: Gateway
    metadata:
    # ... skipped ...
    spec:
      selector:
        istio: ingressgateway
      servers:
        - hosts:
          - "*"
          port:
            name: http
            number: 80
            protocol: HTTP
        - hosts:
          - "*"
          port:
            name: https
            number: 443
            protocol: HTTPS
          tls:
            mode: SIMPLE
            credentialName: SECRET_NAME
    

    如果您要为不同命名空间中的两种不同服务添加多个 TLS 证书,则您的网关规范可能如下所示:

    apiVersion: networking.istio.io/v1alpha3
    kind: Gateway
    metadata:
    # ... skipped ...
    spec:
      selector:
        istio: ingressgateway
      servers:
      - hosts:
        - "*"
        port:
          name: http
          number: 80
          protocol: HTTP
      - port:
          number: 443
          name: https-SERVICE1_NAME
          protocol: HTTPS
        tls:
          mode: SIMPLE
          credentialName: SECRET1_NAME
        hosts:
        - SERVICE1_NAME.NAMESPACE1.example.com
      - port:
          number: 443
          name: https-SERVICE2_NAME
          protocol: HTTPS
        tls:
          mode: SIMPLE
          credentialName: SECRET2_NAME
        hosts:
        - SERVICE2_NAME.NAMESPACE2.example.com
    
  3. 保存更改。

完成此更改后,您就可以使用 HTTPS 协议访问已部署的服务。