在 Cloud Run on GKE 叢集上啟用 HTTPS

本頁面說明如何設定 Cloud Run on GKE,以便在網域上使用 SSL/TLS 憑證,來啟用 HTTPS 連線。

事前準備

這些操作說明假設您已經完成對應 Cloud Run on GKE 服務,以使用自訂網域。

使用 Let's Encrypt 取得 SSL/TLS 憑證

若您已經擁有需要的 SSL/TLS 憑證,請略過這些操作說明。

若您目前沒有 SSL/TLS 憑證,可以使用 Let's Encrypt certbot 手動取得憑證:

  1. Certbot 網站,將自動 certbot 指令碼安裝到本機或專案中的 Cloud Shell 上:

    wget https://dl.eff.org/certbot-auto
    chmod a+x ./certbot-auto
    ./certbot-auto --help
  2. 利用 DNS 驗證,使用 certbot 請求憑證。certbot 工具會透過在網域中建立 TXT 記錄,帶領您完成網路擁有權的驗證:

    ./certbot-auto certonly --manual --preferred-challenges dns -d '*.default.yourdomain.com'
  3. certbot 完成後,您就擁有兩個輸出檔案 privkey.pemfullchain.pem。當您將 TLS 憑證/私密金鑰匯入到 Kubernetes 密鑰時,就會使用這些檔案。

將 TLS 憑證/私密金鑰匯入到 Kubernetes 密鑰

如要將憑證匯入到密鑰:

  1. 將憑證複製到目前的目錄。

  2. 使用下列指令以建立儲存憑證的密鑰:

    kubectl create --namespace istio-system secret tls istio-ingressgateway-certs \
    --key privkey.pem \
    --cert fullchain.pem
    

    其中

    • privkey.pem 包含您的憑證私密金鑰
    • fullchain.pem 包含公開憑證

    如範例所示,您必須使用 istio-ingressgateway-certs 做為密鑰名稱。

設定閘道

您必須設定 knative-ingress-gateway 閘道規格,以使用包含憑證的新密鑰。

如要設定閘道:

  1. 開啟共用的閘道規格以供編輯:

    kubectl edit gateway knative-ingress-gateway --namespace knative-serving
  2. 變更閘道規格以納入 tls: 區段,如下所示:

    # Edit the object below. Lines beginning with a # will be ignored.
    # and an empty file will abort the edit. If an error occurs while saving this file will be
    # reopened with the relevant failures.
    apiVersion: networking.istio.io/v1alpha3
    kind: Gateway
    metadata:
    # ... skipped ...
    spec:
    selector:
    knative: ingressgateway
    servers:
    - hosts:
        - "*"
      port:
        name: http
        number: 80
        protocol: HTTP
    - hosts:
        - "*"
      port:
        name: https
        number: 443
        protocol: HTTPS
      tls:
        mode: SIMPLE
        privateKey: /etc/istio/ingressgateway-certs/tls.key
        serverCertificate: /etc/istio/ingressgateway-certs/tls.crt
    
  3. 儲存變更。

變更完成後,您就可以使用 HTTPS 通訊協定來存取已部署的服務。