使用網路服務級別設定外部流量

本頁面說明如何使用網路服務級別,控管外部流量如何連至 Google Kubernetes Engine (GKE) 叢集上的 Service。網路服務級別可讓您選擇進階級服務,將網路流量效能最佳化;或是選擇標準級服務,盡可能節省成本。

進階級服務透過 Google 的進階骨幹網路傳輸流量,提供優異的速度和穩定性。相較之下,標準級使用一般的網際網路服務供應商 (ISP) 網路,提供更具成本效益的解決方案。

本文適用於負責設計及建構機構網路的雲端架構師和網路專家。如要進一步瞭解 Google Cloud 內容中提及的常見角色和工作範例,請參閱「常見的 GKE 使用者角色和工作」。

網路服務級別在 GKE 的運作方式

本節說明如何在 GKE 中管理網路服務級別。

  • 在專案層級設定網路級別:您可以為 Google Cloud 專案設定預設網路級別,使用標準級或進階級。所有新叢集都會使用 network-default 設定建立,並沿用專案層級的層級設定。這項設定在叢集升級後仍會保留。在叢集內建立的節點集區會沿用專案層級設定的網路級別。

  • 建立新叢集時設定網路級別:建立新叢集時,無論 Google Cloud 專案的級別設定為何,您都可以設定網路級別。新的節點集區會使用叢集層級的網路級別,即使升級節點集區,這項設定仍會保留。

  • 在更新叢集時設定網路級別:您可以在更新現有叢集時設定網路級別。新的節點集區和新的 LoadBalancer 服務會沿用更新後的級別設定,而現有的節點集區和服務則會繼續使用原始網路級別設定。升級叢集後,更新的層級設定會保留。

  • 更新 LoadBalancer Service 時設定網路級別:LoadBalancer Service 會繼承叢集的網路級別。不過,您可以覆寫這項設定,並在服務資訊清單中更新網路層級。

網路服務級別和負載平衡

根據預設,區域性外部直通式網路負載平衡器會使用進階級。您可以更新這項設定,讓 LoadBalancer 服務改用標準級。

如果將應用程式負載平衡器與閘道搭配使用,則無法設定網路服務級別。Gateway 的網路服務級別由 GatewayClass 資源控管。詳情請參閱「閘道 IP 位址」。

外部應用程式負載平衡器的 GKE Ingress 不支援標準級流量轉送。

事前準備

開始之前,請務必先完成下列工作:

  • 啟用 Google Kubernetes Engine API。
  • 啟用 Google Kubernetes Engine API
  • 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行 gcloud components update 指令,取得最新版本。較舊的 gcloud CLI 版本可能不支援執行本文件中的指令。

限制

相關限制如下:

  • 您只能在專案或叢集層級設定網路級別。您無法直接設定節點集區的網路級別。
  • 全域外部雙重堆疊 IPv4 或 IPv6 位址不支援標準級。如要進一步瞭解 IP 位址類型,請參閱「IP 位址」。

建立具備網路服務級別的叢集

如要建立叢集並指定網路級別,請執行下列指令:

 gcloud container clusters create CLUSTER_NAME \
     --network-tier=NETWORK_TIER \
     ...

替換下列值:

  • CLUSTER_NAME:叢集名稱。
  • NETWORK_TIER:網路層級設定。使用 network-default,可採用與 Google Cloud 專案相同的級別設定;使用 Standard,可採用標準級;使用 Premium,可採用進階級。

將現有叢集遷移至其他層級

更新叢集的網路層級不會影響現有資源的網路層級。現有資源會繼續使用與舊網路層級相關聯的 IP 位址。為避免服務中斷,請在將叢集遷移至新的網路級別時,按照下列步驟操作:

  1. 更新叢集:如要更新現有叢集的網路級別,請執行下列指令:

    gcloud container clusters update CLUSTER_NAME \
        --network-tier=NETWORK_TIER \
        ...
    

    替換下列值:

    • CLUSTER_NAME:叢集名稱。
    • NETWORK_TIER:網路層級設定。使用network-default,設定與 Google Cloud 專案相同的層級,Standard代表標準層級,Premium 則代表進階層級。
  2. 建立新的節點集區和服務:為了讓外部用戶端使用與新網路級別相關聯的新 IP 位址,您必須建立新的節點集區和新的 LoadBalancer 服務。新的節點集區和 LoadBalancer 服務會沿用更新後的層級設定,現有節點集區和服務則會繼續使用原始網路層級設定。

  3. 更新 DNS 記錄:變更 DNS 記錄,指向新 LoadBalancer 服務的新 IP 位址。

  4. 等待 DNS 傳播:等待 DNS 存留時間 (TTL) 到期,確保用戶端導向新服務,並避免提供過時記錄。

使用網路服務級別更新外部負載平衡器

如果是區域外部直通式網路負載平衡器,GKE 預設會使用叢集上為外部轉送規則和 IP 位址設定的網路層級。如果叢集的網路級別設為 network-default,負載平衡器會使用進階級。如要覆寫這項設定,請在 Service 資訊清單中設定 cloud.google.com/network-tier 註解。例如:

    ```yaml
    apiVersion: v1
    kind: Service
    metadata:
      name: store-v1-lb-svc
      annotations:
        cloud.google.com/network-tier: Standard
    spec:
      type: LoadBalancer
      loadBalancerClass: networking.gke.io/l4-regional-external
      selector:
        app: store
      ports:
      - name: tcp-port
        protocol: TCP
        port: 8080
        targetPort: 8080
    ```

如要進一步瞭解 LoadBalancer 服務使用的參數,請參閱「服務參數」。

靜態 IP 位址:使用靜態 IP 位址建立 Service 時,靜態 IP 位址的網路級別必須與 LoadBalancer Service 的網路級別相符。如果不相符,執行 kubectl describe service 指令時會看到下列錯誤訊息:

Error syncing load balancer: failed to ensure load balancer: requested ip "standard-service" is neither static nor assigned to the LB

後續步驟