取得傳輸層安全標準 (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 控制台,然後登入帳戶。
  2. 選取安裝 Apigee Hybrid 的專案。
  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. 測試設定

    部署及測試 Proxy。請參閱「建構第一個 API Proxy 總覽」。