使用 Network Service Tiers 設定外部流量

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

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

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

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

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

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

  • 建立新叢集時設定網路層級:建立新叢集時,您可以設定網路層級,不受 Google Cloud 專案層級設定影響。新節點集區會使用叢集層級的網路層級,即使升級節點集區,這項設定也會保留。

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

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

網路服務級別和負載平衡

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

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

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

事前準備

開始之前,請確認您已完成下列工作:

  • 啟用 Google Kubernetes Engine API。
  • 啟用 Google Kubernetes Engine API
  • 如要使用 Google Cloud CLI 執行這項工作,請安裝初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行 gcloud components update,取得最新版本。

限制

相關限制如下:

  • 您只能在專案或叢集層級設定網路層級設定。您無法直接設定節點集區的網路層級。
  • Standard 層級不支援全域外部雙重堆疊 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,負載平衡器會使用進階級。如要覆寫這項設定,請在服務資訊清單中設定 cloud.google.com/network-tier 註解。例如:

    ```yaml
    apiVersion: v1
    kind: Service
    metadata:
      name: store-v1-lb-svc
      annotations:
        cloud.google.com/l4-rbs: "enabled"
        cloud.google.com/network-tier: Standard
    spec:
      type: LoadBalancer
      selector:
        app: store
      ports:
      - name: tcp-port
        protocol: TCP
        port: 8080
        targetPort: 8080
    ```

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

靜態 IP 位址:建立具有靜態 IP 位址的服務時,靜態 IP 位址的網路層必須與 LoadBalancer 服務的網路層相符。如果版本不符,執行 kubectl describe service 指令時會看到下列錯誤訊息:

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

後續步驟