取得傳輸層安全標準 (TLS) 憑證:範例

本主題僅供參考。本文說明如何從憑證授權單位 (CA) Let's Encrypt 取得 TLS 憑證。如果您沒有其他現成方法可取得 CA 授權的憑證/金鑰組,主要可參考這些步驟。這個範例說明如何使用 Let's Encrypt CA、Certbot 用戶端和 Google Cloud Platform Cloud DNS 產生憑證。

這些憑證的適用範圍

您必須為叢集外部公開的兩個 Istio Ingress 閘道提供 TLS 憑證:

閘道 傳輸層安全標準 (TLS) 規定
執行階段輸入閘道 您可以使用自行簽署的憑證/金鑰組或授權的 TLS 憑證。
MART 進入閘道 (未使用 Apigee Connect 時為選用) 需要授權的 TLS 憑證/金鑰配對或 Kubernetes 密鑰。
另請參閱「外部連線」。

需求條件

您需要透過網域名稱註冊商取得網域名稱。您可以透過 Google Domains 或選擇的其他網域註冊商來註冊網域名稱。

設定 Cloud DNS

如要取得授權的 TLS 憑證,您必須擁有合格的網域名稱。以下步驟說明如何使用 Google Cloud DNS 取得網域名稱,以及管理網域伺服器。
  1. 開啟 Google Cloud 控制台,並使用您在步驟 1:建立 Google Cloud 帳戶中建立的帳戶登入。
  2. 選取您在「步驟 2:建立專案」 Google Cloud 中建立的專案。
  3. 如果尚未啟用 Cloud DNS API,請執行此操作。請參閱「啟用 API」。
  4. 建立靜態 IP 位址:
    • 如果您使用 GKE,請按照「 保留靜態外部 IP 位址」一文中的說明建立靜態 IP 位址,供外部程序用來與混合式執行階段 Ingress 通訊。您可以為地址命名,例如 apigee-hybrid-runtime。完成後,您會在下一個步驟的叢集設定中使用 IP 編號。例如:34.66.75.196
    • 如果您使用 Anthos GKE,請按照 Anthos GKE 說明文件中的操作說明建立靜態 IP 位址。
  5. 取得您剛保留的外部 IP。
  6. 為執行階段 Istio Ingress 端點建立記錄集。這是用來向混合式閘道發出 API 呼叫的位址。輸入您在上一個步驟中取得的外部 IP,並為網域名稱新增前置字元,例如 example-endpoint。如需操作說明,請參閱「建立新記錄」。
    1. 建立代管公開區域。如需操作說明,請參閱「 建立代管公開區域」。
    2. 使用下列項目建立新的記錄集:
      • DNS 名稱:端點外部 API 呼叫會與其通訊的名稱,例如 api-servicesexample-endpoint
      • 資源記錄類型A
      • 「存留時間」和「存留時間單位」:接受預設值
      • IP 位址:您建立的靜態 IP。
  7. 「區域詳細資料」檢視畫面會列出四個 DNS 伺服器,做為新區域的 NS 資料。複製 DNS 記錄資料,如下列範例所示:

  8. 返回註冊商的網域頁面 (例如 Google Domains)。
  9. 選取您的網域。
  10. 選取「DNS」
  11. 在「名稱伺服器」部分中,按一下「編輯」
  12. 輸入從「Network Services Cloud DNS」(網路服務 Cloud DNS) 頁面複製的網域名稱伺服器。例如:

現在,Google Cloud DNS 會管理網域的 DNS 記錄。

在 VM 上安裝 Certbot

現在您已設定 Cloud DNS 來管理網域伺服器,接下來請在 Cloud VM 上安裝 Certbot 用戶端和 dns_google 外掛程式。這個用戶端可讓您從 Let's Encrypt 端點取得網域的授權憑證。

  1. 開啟 Google Cloud 控制台,並使用您在步驟 1:建立 Google Cloud 帳戶中建立的帳戶登入。
  2. 選取您在「步驟 2:建立專案」 Google Cloud 中建立的專案。
  3. 依序選取「IAM 與管理」>「服務帳戶」

    「服務帳戶」檢視畫面會顯示專案的服務帳戶清單。

  4. 如要建立新的服務帳戶,請按一下檢視畫面頂端的「+建立服務帳戶」

    系統會顯示「服務帳戶詳細資料」檢視畫面。

  5. 在「Service account name」(服務帳戶名稱) 欄位中,輸入服務帳戶的名稱。

    你也可以在「服務帳戶說明」欄位中新增說明。說明有助於提醒您特定服務帳戶的用途。

  6. 按一下 [建立]。

    Google Cloud 會建立新的服務帳戶,並顯示「服務帳戶權限」檢視畫面。使用這個檢視畫面,將角色指派給新的服務帳戶。

  7. 按一下「選取角色」下拉式清單。
  8. 選取「專案擁有者」角色。
  9. 按一下「繼續」
  10. 按一下 [完成]
  11. 在 Google Cloud 控制台中,依序選取「Compute Engine」>「VM Instances」(VM 執行個體)
  12. 建立名為 certmanager 的 VM 執行個體。
  13. 在「開機磁碟」部分下方,選擇 CentOS7 和 20 GB 的 SSD 永久磁碟。
  14. 將服務帳戶設為您在上方建立的帳戶。
  15. 在機器上安裝 Certbot 和 dns_google 外掛程式,然後執行 Certbot 用戶端:
      sudo su -
      yum -y install yum-utils
      yum install certbot -y
      yum install certbot-dns-google -y
      certbot certonly --dns-google -d *.your_domain_name,*.your_domain_name --server https://acme-v02.api.letsencrypt.org/directory
      

    例如:

    sudo su -
    yum -y install yum-utils
    yum install certbot -y
    yum install certbot-dns-google -y
    certbot certonly --dns-google -d *.apigee-hybrid-docs.net,*.apigee-hybrid-docs.net --server https://acme-v02.api.letsencrypt.org/directory
  16. 您現在可以在這個目錄中找到授權憑證和私密金鑰檔案: cd /etc/letsencrypt/live/your_domain_name/

    例如:

    cd /etc/letsencrypt/live/apigee-hybrid-docs.net
    ls
      cert.pem  chain.pem  fullchain.pem  privkey.pem  README
  17. fullchain.pemprivkey.pem 檔案複製到本機電腦。
  18. 選用:使用憑證/金鑰組建立 Kubernetes 密鑰。請參閱「運用 Istio Ingress 設定傳輸層安全標準 (TLS) 和 mTLS」中的「選項 2:Kubernetes Secret」一節。
  19. 更新覆寫檔案,指向憑證和私密金鑰。

    例如:

    ...
    envs:
      - name: test
        serviceAccountPaths:
          synchronizer: "your_keypath/synchronizer-manager-service-account.json
          udca: "your_keypath/analytic-agent-service-account.json
    
    virtualhosts:
      - name: my-env-group
        sslCertPath: "$HOME/hybrid/apigee-hybrid-setup/tls/fullchain.pem"
        sslKeyPath: "$HOME/hybrid/apigee-hybrid-setup/tls/privkey.pem"
    
    mart: # Assuming you are not using Apigee Connect
      nodeSelector:
        key: cloud.google.com/gke-nodepool
        value: apigee-runtime
      sslCertPath: "$HOME/hybrid/apigee-hybrid-setup/tls/fullchain.pem"
      sslKeyPath: "$HOME/hybrid/apigee-hybrid-setup/tls/privkey.pem"
      replicaCountMin: 1
      replicaCountMax: 1

    或者,如果使用 Kubernetes Secret:

    ...
    envs:
      - name: test
        serviceAccountPaths:
          synchronizer: "your_keypath/synchronizer-manager-service-account.json
          udca: "your_keypath/analytic-agent-service-account.json
    
    virtualhosts:
      - name: my-env-group
        tlsMode: SIMPLE  # Note: SIMPLE is the default, MUTUAL is also an available value.
        sslSecret: myorg-test-policy-secret"
    
    mart: # Assuming you are not using Apigee Connect
      nodeSelector:
        key: cloud.google.com/gke-nodepool
        value: apigee-runtime
        sslSecret: myorg-test-policy-secret"
      replicaCountMin: 1
      replicaCountMax: 1
    
    ...  
  20. 套用變更:

    如果您變更了 mart 設定,請套用變更:

    apigeectl apply -f your_overrides_file --all-envs

    如果您變更了 envs 設定,請套用變更:

    apigeectl apply -f your_overrides_file --all-envs
  21. 測試設定

    按照「建立及部署新的 API Proxy」一文中的說明,部署及測試 Proxy。