升級 Cloud Service Mesh

本頁面說明如何:

  • 執行 asmcli,從 Cloud Service Mesh 升級至 Cloud Service Mesh 1.26.4。

  • 視需要部署 Ingress 閘道。

  • 執行 Canary 升級,將工作負載遷移至新的控制層。

可升級的 Cloud Service Mesh 版本因平台而異。

GKE

您可以從下列版本直接升級至 Google Kubernetes Engine 的 Cloud Service Mesh 1.26.4-asm.1 :

1.24+

地端部署

您可以從下列版本直接升級至 Google Distributed Cloud (僅限軟體) 上的 Cloud Service Mesh 1.26.4-asm.1 ,適用於 VMware 和 Google Distributed Cloud (僅限軟體) for Bare Metal:

1.24+

GKE on AWS

您可以從下列版本直接升級至 GKE on AWS 上的 Cloud Service Mesh 1.26.4-asm.1 :

1.24+

GKE on Azure

Azure 上的 GKE 僅支援 Cloud Service Mesh 1.16。系統不支援從舊版 Cloud Service Mesh 升級。

Amazon EKS

如果您在 EKS 上安裝了 Cloud Service Mesh 1.7,則必須在新叢集上安裝 Cloud Service Mesh 1.26。不支援從 Cloud Service Mesh 1.7 升級至 Cloud Service Mesh 1.26 。

Microsoft AKS

如果您在 AKS 上安裝了 Cloud Service Mesh 1.7,則必須在新叢集上安裝 Cloud Service Mesh 1.26。不支援從 Cloud Service Mesh 1.7 升級至 Cloud Service Mesh 1.26 。

事前準備

開始之前,請先確認下列事項:

控制層自訂項目

如果您自訂了先前的安裝作業,升級至新版 Cloud Service Mesh 或從 Istio 遷移時,需要進行相同的自訂作業。如果您在 istioctl install 中加入 --set values 標記,藉此自訂安裝作業,則必須將這些設定加入 IstioOperator YAML 檔案 (稱為「疊加檔案」)。執行指令碼時,請使用 --custom_overlay 選項和檔案名稱指定疊加檔案。指令碼會將疊加層檔案傳遞至 istioctl install

憑證授權單位

升級期間變更憑證授權單位 (CA) 會導致停機。 升級期間,所有工作負載切換為使用新 CA 的新控制層之前,mTLS 流量都會中斷。

升級 Cloud Service Mesh

以下說明如何升級 Cloud Service Mesh:

  1. 如果您要升級 GKE 上使用 Cloud Service Mesh 憑證授權單位的多叢集網格,請執行 asmcli create-mesh,將多叢集網格設定為信任機群工作負載身分,以便在升級期間進行跨叢集負載平衡,不會發生停機情形。

  2. 執行 asmcli install,在單一叢集上安裝 Cloud Service Mesh。如需指令列範例,請參閱以下各節。範例中包含必要引數和選用引數,您可能會覺得實用。建議您一律指定 output_dir 引數,方便您輕鬆找到範例閘道和工具,例如 istioctl。如需範例清單,請參閱右側的導覽列。

  3. 您可以選擇安裝或升級 Ingress 閘道。根據預設,asmcli 不會安裝 istio-ingressgateway。建議您分別部署及管理控制層和閘道。如需隨叢集內控制層安裝預設 istio-ingressgateway,請加入 --option legacy-default-ingressgateway 引數。

  4. 如要完成 Cloud Service Mesh 設定,您需要啟用自動 Sidecar 插入功能,並部署或重新部署工作負載

設定多叢集網格,信任 Fleet Workload Identity

如果您要升級 GKE 上的多叢集網格,且該網格使用 Cloud Service Mesh 憑證授權機構做為憑證授權機構,則必須先執行 asmcli create-mesh,再升級每個叢集。升級後,這項指令會將 Cloud Service Mesh 憑證授權單位設定為使用機群 Workload Identity 集區 FLEET_PROJECT_ID.svc.id.goog 做為信任網域。asmcli create-mesh 指令:

  • 將所有叢集註冊至同一個機群。
  • 設定網格,以信任 Fleet Workload Identity。
  • 建立遠端密鑰。

您可以指定每個叢集的 URI,也可以指定 kubeconfig 檔案的路徑。

叢集 URI

在下列指令中,將 FLEET_PROJECT_ID 替換為車隊主機專案的專案 ID,並將叢集 URI 替換為每個叢集的叢集名稱、區域/地區和專案 ID。

./asmcli create-mesh \
    FLEET_PROJECT_ID \
    PROJECT_ID_1/CLUSTER_LOCATION_1/CLUSTER_NAME_1 \
    PROJECT_ID_2/CLUSTER_LOCATION_2/CLUSTER_NAME_2 # \
    # Add a line for each cluster in the mesh

kubeconfig 檔案

在下列指令中,將 FLEET_PROJECT_ID 替換為車隊主專案的專案 ID,並將 PATH_TO_KUBECONFIG 替換為每個 kubeconfig 檔案的路徑。

./asmcli create-mesh \
    FLEET_PROJECT_ID \
    PATH_TO_KUBECONFIG_1 \
    PATH_TO_KUBECONFIG_2 # \
    # Add a line for each cluster in the mesh

使用預設功能和 Mesh CA 升級

本節說明如何執行 asmcli,以升級 Cloud Service Mesh 並使用平台預設的支援功能,以及如何啟用 Cloud Service Mesh 憑證授權單位做為憑證授權單位。

GKE

執行下列指令,即可使用預設功能和 Cloud Service Mesh 憑證授權單位升級控制層。在提供的預留位置中輸入值。

./asmcli install \
  --project_id PROJECT_ID \
  --cluster_name CLUSTER_NAME \
  --cluster_location CLUSTER_LOCATION \
  --fleet_id FLEET_PROJECT_ID \
  --output_dir DIR_PATH \
  --enable_all \
  --ca mesh_ca
  • --project_id--cluster_name--cluster_location:指定叢集所在的專案 ID、叢集名稱,以及叢集可用區或區域。
  • --fleet_id 機群主專案的專案 ID。如果未加入這個選項,asmcli 會在註冊叢集時,使用建立叢集的專案。
  • --output_dir 加入這個選項即可指定目錄,asmcli 會將 anthos-service-mesh 套件下載至該目錄,並解壓縮安裝檔案,其中包含 istioctl、範例和資訊清單。否則,asmcli 會將檔案下載至 tmp 目錄。您可以指定相對路徑或完整路徑。環境變數 $PWD 在這裡無法運作。
  • --enable_all 允許指令碼執行下列操作:
    • 授予必要的 IAM 權限。
    • 啟用必要的 Google API。
    • 在叢集上設定標籤,識別網格。
    • 向機群註冊叢集 (如果尚未註冊)。
  • --ca mesh_ca 使用 Cloud Service Mesh 憑證授權單位做為憑證授權單位。升級期間變更憑證授權單位會導致停機。asmcli會設定 Cloud Service Mesh 憑證授權單位,以使用車隊工作負載身分

其他 GKE Enterprise 叢集

在其他 GKE Enterprise 叢集上執行下列指令,使用預設功能和 Cloud Service Mesh 憑證授權單位升級控制層。在提供的預留位置中輸入值。

  1. 將目前環境設為使用者叢集:

    kubectl config use-context CLUSTER_NAME
    
  2. 執行 asmcli install

    ./asmcli install \
      --fleet_id FLEET_PROJECT_ID \
      --kubeconfig KUBECONFIG_FILE \
      --output_dir DIR_PATH \
      --platform multicloud \
      --enable_all \
      --ca mesh_ca
    
    • --fleet_id 機群主專案的專案 ID
    • --kubeconfig kubeconfig 檔案的完整路徑。 環境變數 $PWD 在這裡無法運作。此外,使用 `~` 的相對 kubeconfig 檔案位置將無法運作。
    • --output_dir 加入這個選項即可指定目錄,asmcli 會將 anthos-service-mesh 套件下載至該目錄,並解壓縮安裝檔案,其中包含 istioctl、範例和資訊清單。否則,asmcli 會將檔案下載至 tmp 目錄。您可以指定相對路徑或完整路徑。環境變數 $PWD 在這裡無法運作。
    • --platform multicloud 指定平台不是 Google Cloud,例如內部部署或多雲。
    • --enable_all 允許指令碼執行下列操作:
      • 授予必要的 IAM 權限。
      • 啟用必要的 Google API。
      • 在叢集上設定標籤,識別網格。
      • 向機群註冊叢集 (如果尚未註冊)。
    • --ca mesh_ca 使用 Cloud Service Mesh 憑證授權單位做為憑證授權單位。在升級期間變更憑證授權單位會導致服務中斷。asmcli設定 Cloud Service Mesh 憑證授權單位,以使用車隊工作負載身分

透過 CA 服務升級預設功能

本節說明如何執行 asmcli,以升級 Cloud Service Mesh 並啟用憑證授權單位服務,同時使用平台支援的預設功能

GKE

執行下列指令,使用預設功能和憑證授權單位服務升級控制層。在提供的預留位置中輸入值。

./asmcli install \
  --project_id PROJECT_ID \
  --cluster_name CLUSTER_NAME \
  --cluster_location CLUSTER_LOCATION \
  --fleet_id FLEET_PROJECT_ID \
  --output_dir DIR_PATH \
  --enable_all \
  --ca gcp_cas \
  --ca_pool projects/PROJECT_NAME/locations/ca_region/caPools/CA_POOL
  • --project_id--cluster_name--cluster_location:指定叢集所在的專案 ID、叢集名稱,以及叢集可用區或區域。
  • --fleet_id 機群主專案的專案 ID。如果未加入這個選項,asmcli 會在註冊叢集時,使用建立叢集的專案。
  • --output_dir 加入這個選項即可指定目錄,asmcli 會將 anthos-service-mesh 套件下載至該目錄,並解壓縮安裝檔案,其中包含 istioctl、範例和資訊清單。否則,asmcli 會將檔案下載至 tmp 目錄。您可以指定相對路徑或完整路徑。環境變數 $PWD 在這裡無法運作。
  • --enable_all 允許指令碼執行下列操作:
    • 授予必要的 IAM 權限。
    • 啟用必要的 Google API。
    • 在叢集上設定標籤,識別網格。
    • 向機群註冊叢集 (如果尚未註冊)。
  • --ca gcp_cas 使用憑證授權單位服務做為憑證授權單位。在升級期間變更憑證授權單位會導致停機。asmcli會設定憑證授權單位服務,以使用車隊工作負載身分
  • --ca_pool 憑證授權單位服務 CA 集區的完整 ID。

地端部署

在 Google Distributed Cloud (僅限軟體) for VMware 或 Google Distributed Cloud (僅限軟體) for Bare Metal 上執行下列指令,即可使用預設功能和 Certificate Authority Service 升級控制層。在提供的預留位置中輸入值。

  1. 將目前環境設為使用者叢集:

    kubectl config use-context CLUSTER_NAME
    
  2. 執行 asmcli install

    ./asmcli install \
     --kubeconfig KUBECONFIG_FILE \
     --fleet_id FLEET_PROJECT_ID \
     --output_dir DIR_PATH \
     --enable_all \
     --ca gcp_cas \
     --platform multicloud \
     --ca_pool projects/PROJECT_NAME/locations/ca_region/caPools/CA_POOL
    
    • --fleet_id 機群主專案的專案 ID
    • --kubeconfig kubeconfig 檔案的完整路徑。 環境變數 $PWD 在這裡無法運作。此外,使用 `~` 的相對 kubeconfig 檔案位置將無法運作。
    • --output_dir 加入這個選項即可指定目錄,asmcli 會將 anthos-service-mesh 套件下載至該目錄,並解壓縮安裝檔案,其中包含 istioctl、範例和資訊清單。否則,asmcli 會將檔案下載至 tmp 目錄。您可以指定相對路徑或完整路徑。環境變數 $PWD 在這裡無法運作。
    • --platform multicloud 指定平台不是 Google Cloud,例如內部部署或多雲。
    • --enable_all 允許指令碼執行下列操作:
      • 授予必要的 IAM 權限。
      • 啟用必要的 Google API。
      • 在叢集上設定標籤,識別網格。
      • 向機群註冊叢集 (如果尚未註冊)。
    • --ca gcp_cas 使用憑證授權單位服務做為憑證授權單位。在升級期間變更憑證授權單位會導致停機。asmcli會設定憑證授權單位服務,以使用車隊工作負載身分
    • --ca_pool 憑證授權單位服務 CA 集區的完整 ID。

使用 Istio CA 升級預設功能

本節說明如何執行 asmcli,以升級 Cloud Service Mesh,並為平台啟用 Istio CA,以及預設支援的功能

GKE

執行下列指令,使用預設功能和 Istio CA 升級控制層。在提供的預留位置中輸入值。

./asmcli install \
  --project_id PROJECT_ID \
  --cluster_name CLUSTER_NAME \
  --cluster_location CLUSTER_LOCATION \
  --fleet_id FLEET_PROJECT_ID \
  --output_dir DIR_PATH \
  --enable_all \
  --ca citadel
  • --project_id--cluster_name--cluster_location:指定叢集所在的專案 ID、叢集名稱,以及叢集可用區或區域。
  • --fleet_id 機群主專案的專案 ID。如果未加入這個選項,asmcli 會在註冊叢集時,使用建立叢集的專案。
  • --output_dir 加入這個選項即可指定目錄,asmcli 會將 anthos-service-mesh 套件下載至該目錄,並解壓縮安裝檔案,其中包含 istioctl、範例和資訊清單。否則,asmcli 會將檔案下載至 tmp 目錄。您可以指定相對路徑或完整路徑。環境變數 $PWD 在這裡無法運作。
  • --enable_all 允許指令碼執行下列操作:
    • 授予必要的 IAM 權限。
    • 啟用必要的 Google API。
    • 在叢集上設定標籤,識別網格。
    • 向機群註冊叢集 (如果尚未註冊)。
  • --ca citadel 使用 Istio CA。升級期間變更憑證授權單位會導致服務中斷。

地端部署

在 Google Distributed Cloud (僅限軟體) for VMware 或 Google Distributed Cloud (僅限軟體) for Bare Metal 上執行下列指令,升級控制層,並使用預設功能和 Istio CA。在提供的預留位置中輸入值。

  1. 將目前環境設為使用者叢集:

    kubectl config use-context CLUSTER_NAME
    
  2. 執行 asmcli install

    ./asmcli install \
      --fleet_id FLEET_PROJECT_ID \
      --kubeconfig KUBECONFIG_FILE \
      --output_dir DIR_PATH \
      --platform multicloud \
      --enable_all \
      --ca citadel \
      --ca_cert FILE_PATH \
      --ca_key FILE_PATH \
      --root_cert FILE_PATH \
      --cert_chain FILE_PATH
    
    • --fleet_id 機群主專案的專案 ID
    • --kubeconfig kubeconfig 檔案的完整路徑。 環境變數 $PWD 在這裡無法運作。此外,使用 `~` 的相對 kubeconfig 檔案位置將無法運作。
    • --output_dir 加入這個選項即可指定目錄,asmcli 會將 anthos-service-mesh 套件下載至該目錄,並解壓縮安裝檔案,其中包含 istioctl、範例和資訊清單。否則,asmcli 會將檔案下載至 tmp 目錄。您可以指定相對路徑或完整路徑。環境變數 $PWD 在這裡無法運作。
    • --platform multicloud 指定平台不是 Google Cloud,例如內部部署或多雲。
    • --enable_all 允許指令碼執行下列操作:
      • 授予必要的 IAM 權限。
      • 啟用必要的 Google API。
      • 在叢集上設定標籤,識別網格。
      • 向機群註冊叢集 (如果尚未註冊)。
    • --ca citadel 使用 Istio CA 做為憑證授權單位。
    • --ca_cert 中繼憑證
    • --ca_key 中繼憑證的金鑰
    • --root_cert 根憑證
    • --cert_chain 憑證鏈結

AWS

在 GKE on AWS 上執行下列指令,使用預設功能和 Istio CA 升級控制層。在提供的預留位置中輸入值。您可以選擇為公開子網路或私有子網路啟用 Ingress。

公開

  1. 將目前環境設為使用者叢集:

    kubectl config use-context CLUSTER_NAME
    
  2. 執行 asmcli install

    ./asmcli install \
      --fleet_id FLEET_PROJECT_ID \
      --kubeconfig KUBECONFIG_FILE \
      --output_dir DIR_PATH \
      --platform multicloud \
      --enable_all \
      --ca citadel \
      --ca_cert FILE_PATH \
      --ca_key FILE_PATH \
      --root_cert FILE_PATH \
      --cert_chain FILE_PATH
    
    • --fleet_id 機群主專案的專案 ID
    • --kubeconfig kubeconfig 檔案的完整路徑。 環境變數 $PWD 在這裡無法運作。此外,使用 `~` 的相對 kubeconfig 檔案位置將無法運作。
    • --output_dir 加入這個選項即可指定目錄,asmcli 會將 anthos-service-mesh 套件下載至該目錄,並解壓縮安裝檔案,其中包含 istioctl、範例和資訊清單。否則,asmcli 會將檔案下載至 tmp 目錄。您可以指定相對路徑或完整路徑。環境變數 $PWD 在這裡無法運作。
    • --platform multicloud 指定平台不是 Google Cloud,例如內部部署或多雲。
    • --enable_all 允許指令碼執行下列操作:
      • 授予必要的 IAM 權限。
      • 啟用必要的 Google API。
      • 在叢集上設定標籤,識別網格。
      • 向機群註冊叢集 (如果尚未註冊)。
    • --ca citadel 使用 Istio CA 做為憑證授權單位。
    • --ca_cert 中繼憑證
    • --ca_key 中繼憑證的金鑰
    • --root_cert 根憑證
    • --cert_chain 憑證鏈結

私人

  1. 將目前環境設為使用者叢集:

    kubectl config use-context CLUSTER_NAME
    
  2. 請將以下 YAML 儲存為 istio-operator-internal-lb.yaml 檔案:

    apiVersion: install.istio.io/v1alpha1
    kind: IstioOperator
    spec:
      components:
        ingressGateways:
        - enabled: true
          k8s:
            serviceAnnotations:
              service.beta.kubernetes.io/aws-load-balancer-internal: "true"
          name: istio-ingressgateway
    
  3. 執行 asmcli install

    ./asmcli install \
      --fleet_id FLEET_PROJECT_ID \
      --kubeconfig KUBECONFIG_FILE \
      --output_dir DIR_PATH \
      --platform multicloud \
      --enable_all \
      --ca citadel \
      --ca_cert FILE_PATH \
      --ca_key FILE_PATH \
      --root_cert FILE_PATH \
      --cert_chain FILE_PATH
      --custom_overlay istio-operator-internal-lb.yaml
    
    • --fleet_id 機群主專案的專案 ID
    • --kubeconfig kubeconfig 檔案的完整路徑。 環境變數 $PWD 在這裡無法運作。此外,使用 `~` 的相對 kubeconfig 檔案位置將無法運作。
    • --output_dir 加入這個選項即可指定目錄,asmcli 會將 anthos-service-mesh 套件下載至該目錄,並解壓縮安裝檔案,其中包含 istioctl、範例和資訊清單。否則,asmcli 會將檔案下載至 tmp 目錄。您可以指定相對路徑或完整路徑。環境變數 $PWD 在這裡無法運作。
    • --platform multicloud 指定平台不是 Google Cloud,例如內部部署或多雲。
    • --enable_all 允許指令碼執行下列操作:
      • 授予必要的 IAM 權限。
      • 啟用必要的 Google API。
      • 在叢集上設定標籤,識別網格。
      • 向機群註冊叢集 (如果尚未註冊)。
    • --ca citadel 使用 Istio CA 做為憑證授權單位。
    • --ca_cert 中繼憑證
    • --ca_key 中繼憑證的金鑰
    • --root_cert 根憑證
    • --cert_chain 憑證鏈結

Amazon EKS

在 Amazon EKS 上執行下列指令,使用預設功能和 Istio CA 升級控制層。在提供的預留位置中輸入值。

  1. 將目前環境設為使用者叢集:

    kubectl config use-context CLUSTER_NAME
    
  2. 執行 asmcli install

    ./asmcli install \
      --fleet_id FLEET_PROJECT_ID \
      --kubeconfig KUBECONFIG_FILE \
      --output_dir DIR_PATH \
      --platform multicloud \
      --enable_all \
      --ca citadel \
      --ca_cert FILE_PATH \
      --ca_key FILE_PATH \
      --root_cert FILE_PATH \
      --cert_chain FILE_PATH
    
    • --fleet_id 機群主專案的專案 ID
    • --kubeconfig kubeconfig 檔案的完整路徑。 環境變數 $PWD 在這裡無法運作。此外,使用 `~` 的相對 kubeconfig 檔案位置將無法運作。
    • --output_dir 加入這個選項即可指定目錄,asmcli 會將 anthos-service-mesh 套件下載至該目錄,並解壓縮安裝檔案,其中包含 istioctl、範例和資訊清單。否則,asmcli 會將檔案下載至 tmp 目錄。您可以指定相對路徑或完整路徑。環境變數 $PWD 在這裡無法運作。
    • --platform multicloud 指定平台不是 Google Cloud,例如內部部署或多雲。
    • --enable_all 允許指令碼執行下列操作:
      • 授予必要的 IAM 權限。
      • 啟用必要的 Google API。
      • 在叢集上設定標籤,識別網格。
      • 向機群註冊叢集 (如果尚未註冊)。
    • --ca citadel 使用 Istio CA 做為憑證授權單位。
    • --ca_cert 中繼憑證
    • --ca_key 中繼憑證的金鑰
    • --root_cert 根憑證
    • --cert_chain 憑證鏈結

Microsoft AKS

在 Microsoft AKS 上執行下列指令,使用預設功能和 Istio CA 升級控制層。在提供的預留位置中輸入值。

  1. 將目前環境設為使用者叢集:

    kubectl config use-context CLUSTER_NAME
    
  2. 執行 asmcli install

    HUB_REGISTRATION_EXTRA_FLAGS=--has-private-issuer ./asmcli install \
      --fleet_id FLEET_PROJECT_ID \
      --kubeconfig KUBECONFIG_FILE \
      --output_dir DIR_PATH \
      --platform multicloud \
      --enable_all \
      --ca citadel \
      --ca_cert FILE_PATH \
      --ca_key FILE_PATH \
      --root_cert FILE_PATH \
      --cert_chain FILE_PATH
    
    • --fleet_id 機群主專案的專案 ID
    • --kubeconfig kubeconfig 檔案的完整路徑。 環境變數 $PWD 在這裡無法運作。此外,使用 `~` 的相對 kubeconfig 檔案位置將無法運作。
    • --output_dir 加入這個選項即可指定目錄,asmcli 會將 anthos-service-mesh 套件下載至該目錄,並解壓縮安裝檔案,其中包含 istioctl、範例和資訊清單。否則,asmcli 會將檔案下載至 tmp 目錄。您可以指定相對路徑或完整路徑。環境變數 $PWD 在這裡無法運作。
    • --platform multicloud 指定平台不是 Google Cloud,例如內部部署或多雲。
    • --enable_all 允許指令碼執行下列操作:
      • 授予必要的 IAM 權限。
      • 啟用必要的 Google API。
      • 在叢集上設定標籤,識別網格。
      • 向機群註冊叢集 (如果尚未註冊)。
    • --ca citadel 使用 Istio CA 做為憑證授權單位。
    • --ca_cert 中繼憑證
    • --ca_key 中繼憑證的金鑰
    • --root_cert 根憑證
    • --cert_chain 憑證鏈結

升級並使用選用功能

疊加層檔案是包含 IstioOperator 自訂資源 (CR) 的 YAML 檔案,您會將該檔案傳遞至 asmcli,以設定控制平面。您可以將 YAML 檔案傳遞至 asmcli,藉此覆寫預設控制平面設定,並啟用選用功能。您可以疊加更多覆疊,每個覆疊檔案都會覆寫先前圖層的設定。

GKE

執行下列指令,安裝控制平面和選用功能。如要新增多個檔案,請指定 --custom_overlay 和檔案名稱,例如:--custom_overlayoverlay_file1.yaml --custom_overlay overlay_file2.yaml --custom_overlay overlay_file3.yaml在提供的預留位置中輸入值。

./asmcli install \
  --project_id PROJECT_ID \
  --cluster_name CLUSTER_NAME \
  --cluster_location CLUSTER_LOCATION \
  --fleet_id FLEET_PROJECT_ID \
  --output_dir DIR_PATH \
  --enable_all \
  --ca mesh_ca \
  --custom_overlay OVERLAY_FILE
  • --project_id--cluster_name--cluster_location:指定叢集所在的專案 ID、叢集名稱,以及叢集可用區或區域。
  • --fleet_id 機群主專案的專案 ID。如果未加入這個選項,asmcli 會在註冊叢集時,使用建立叢集的專案。
  • --output_dir 加入這個選項即可指定目錄,asmcli 會將 anthos-service-mesh 套件下載至該目錄,並解壓縮安裝檔案,其中包含 istioctl、範例和資訊清單。否則,asmcli 會將檔案下載至 tmp 目錄。您可以指定相對路徑或完整路徑。環境變數 $PWD 在這裡無法運作。
  • --enable_all 允許指令碼執行下列操作:
    • 授予必要的 IAM 權限。
    • 啟用必要的 Google API。
    • 在叢集上設定標籤,識別網格。
    • 向機群註冊叢集 (如果尚未註冊)。
  • --ca mesh_ca 使用 Cloud Service Mesh 憑證授權單位做為憑證授權單位。升級期間變更憑證授權單位會導致停機。asmcli會設定 Cloud Service Mesh 憑證授權單位,以使用車隊工作負載身分
  • --custom_overlay 指定疊加檔案的名稱。

Google Cloud 以外

在 Google Distributed Cloud (僅限軟體) for VMware、Google Distributed Cloud (僅限軟體) for Bare Metal、AWS 上的 GKE、Amazon EKS 或 Microsoft AKS 上執行下列指令。在提供的預留位置中輸入值。

  1. 將目前環境設為使用者叢集:

    kubectl config use-context CLUSTER_NAME
    
  2. 執行 asmcli install

    ./asmcli install \
      --fleet_id FLEET_PROJECT_ID \
      --kubeconfig KUBECONFIG_FILE \
      --output_dir DIR_PATH \
      --platform multicloud \
      --enable_all \
      --ca mesh_ca \
      --custom_overlay OVERLAY_FILE
    
    • --fleet_id 機群主專案的專案 ID
    • --kubeconfig kubeconfig 檔案的完整路徑。 環境變數 $PWD 在這裡無法運作。此外,使用 `~` 的相對 kubeconfig 檔案位置將無法運作。
    • --output_dir 加入這個選項即可指定目錄,asmcli 會將 anthos-service-mesh 套件下載至該目錄,並解壓縮安裝檔案,其中包含 istioctl、範例和資訊清單。否則,asmcli 會將檔案下載至 tmp 目錄。您可以指定相對路徑或完整路徑。環境變數 $PWD 在這裡無法運作。
    • --platform multicloud 指定平台不是 Google Cloud,例如內部部署或多雲。
    • --enable_all 允許指令碼執行下列操作:
      • 授予必要的 IAM 權限。
      • 啟用必要的 Google API。
      • 在叢集上設定標籤,識別網格。
      • 向機群註冊叢集 (如果尚未註冊)。
    • --ca mesh_ca 使用 Cloud Service Mesh 憑證授權單位做為憑證授權單位。升級期間變更憑證授權單位會導致停機。asmcli會設定 Cloud Service Mesh 憑證授權單位,以使用車隊工作負載身分
    • --custom_overlay 指定疊加檔案的名稱。

升級閘道

如果已部署閘道,也需要升級這些閘道。如要進行簡單升級,請按照「安裝與升級閘道」指南中的「就地升級」一節操作。

切換至新版控制層

  1. 取得 istiod 上的修訂版本標籤。

    kubectl get pod -n istio-system -L istio.io/rev
    

    指令輸出內容如下所示。

    NAME                                                 READY   STATUS    RESTARTS   AGE   REV
    istiod-asm-1264-1-67998f4b55-lrzpz           1/1     Running   0          68m   asm-1254-0
    istiod-asm-1264-1-67998f4b55-r76kr           1/1     Running   0          68m   asm-1254-0
    istiod-1254-0-1-5cd96f88f6-n7tj9    1/1     Running   0          27s   asm-1264-1
    istiod-1254-0-1-5cd96f88f6-wm68b    1/1     Running   0          27s   asm-1264-1
    1. 在輸出內容的「REV」欄下方,記下新版本的修訂標籤值。在本例中,這個值為 asm-1264-1

    2. 另請注意舊版 istiod 的修訂標籤值。 完成將工作負載移至新版本後,您需要這個檔案才能刪除舊版 istiod。在範例輸出中,舊版修訂標籤的值為 asm-1254-0

  2. 將修訂版本標籤新增至應用程式命名空間,並移除 istio-injection 標籤 (如有)。在下列指令中,將 REVISION 變更為與 istiod 新修訂版本相符的值。

    kubectl label namespace NAMESPACE istio.io/rev=REVISION istio-injection- --overwrite

    如果輸出內容顯示 "istio-injection not found",可以忽略。也就是說,命名空間先前沒有 istio-injection 標籤。如果命名空間同時有 istio-injection 和修訂版本標籤,自動插入行為會不確定,因此 Cloud Service Mesh 文件中的所有 kubectl label 指令都會明確確保只設定其中一個標籤。

  3. 重新啟動 Pod,觸發重新注入。

    kubectl rollout restart deployment -n NAMESPACE
  4. 測試應用程式,確認工作負載是否正常運作。

  5. 如果其他命名空間也有工作負載,請重複上述步驟,為命名空間加上標籤並重新啟動 Pod。

  6. 如果確認應用程式運作正常,請繼續執行步驟,改用新版 istiod。如果應用程式有問題,請按照步驟進行回溯。

    完成轉換

    確認應用程式運作正常後,請移除舊版控制平面,完成遷移至新版作業。

    1. 切換至 anthos-service-mesh GitHub 存放區檔案所在的目錄。

    2. 移動預設代碼:

      <OUTPUT_DIR>/istioctl tag set default --revision <NEW REVISION NAME> --overwrite
      
    3. 刪除舊版 istiod。使用的指令取決於您是從 Istio 遷移,還是從舊版 Cloud Service Mesh 升級。

      遷移

      如果您是從 Istio 遷移,舊版 istio-ingressgateway 沒有修訂版本標籤:

      kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget,sa,rolebinding,role istiod -n istio-system --ignore-not-found=true
      

      升級

      1. 如果您是從舊版 Cloud Service Mesh 升級,請在下列指令中確認 OLD_REVISION 與舊版 istiod 的修訂版本標籤相符:

        kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget,sa,rolebinding,role istiod-OLD_REVISION -n istio-system --ignore-not-found=true
        
      2. 刪除舊版修訂的 validatingwebhookconfigurationmutatingWebhookConfigurationconfigMapclusterRoleclusterRoleBinding 資源:

        kubectl delete validatingwebhookconfiguration istio-validator-OLD_REVISION-istio-system --ignore-not-found
        kubectl delete mutatingWebhookConfiguration istio-sidecar-injector-OLD_REVISION --ignore-not-found
        kubectl delete configMap istio-OLD_REVISION istio-sidecar-injector-OLD_REVISION -n istio-system --ignore-not-found
        kubectl delete clusterRole,clusterRoleBinding istio-reader-clusterrole-OLD_REVISION-istio-system istiod-clusterrole-OLD_REVISION-istio-system istiod-gateway-controller-OLD_REVISION-istio-system --ignore-not-found
        
    4. 移除舊版 IstioOperator 設定:

      kubectl delete IstioOperator installed-state-OLD_REVISION -n istio-system
      

      預期輸出內容如下:

      istiooperator.install.istio.io "installed-state-OLD_REVISION" deleted

    復原

    如果您在使用新版 istiod 測試應用程式時遇到問題,請按照下列步驟還原至舊版:

    1. 重新標記命名空間,以啟用先前版本的 istiod 自動插入功能。使用的指令取決於您是否使用修訂版本標籤,或搭配舊版使用 istio-injection=enabled

      • 如果您使用修訂版本標籤自動插入:

        kubectl label namespace NAMESPACE istio.io/rev=OLD_REVISION --overwrite
        
      • 如果您使用 istio-injection=enabled

        kubectl label namespace NAMESPACE istio.io/rev- istio-injection=enabled --overwrite
        

      預期輸出內容:

      namespace/NAMESPACE labeled
    2. 確認命名空間的修訂版本標籤與先前版本的 istiod 修訂版本標籤相符:

      kubectl get ns NAMESPACE --show-labels
      
    3. 重新啟動 Pod,觸發重新注入程序,讓 Proxy 採用先前版本:

      kubectl rollout restart deployment -n NAMESPACE
      
    4. 移除新版 istiod。確認下列指令中的 REVISION 值正確無誤。

      kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-REVISION -n istio-system --ignore-not-found=true
      
    5. 移除新版 IstioOperator 設定。

      kubectl delete IstioOperator installed-state-REVISION -n istio-system
      

      預期輸出內容如下:

      istiooperator.install.istio.io "installed-state-REVISION" deleted
    6. 如果您未加入 --disable_canonical_service 旗標,asmcli 會啟用標準服務控制器。建議您保持啟用狀態,但如需停用,請參閱「啟用及停用標準服務控制器」。

    7. 如果您已部署閘道,請務必變更命名空間或部署作業的修訂版本標籤,以符合先前的 istiod 版本。請按照「安裝及升級閘道」指南中「就地升級」一節所述的程序進行。

部署與重新部署工作負載

您必須啟用自動 Sidecar 代理程式插入功能 (自動插入),才算完成安裝 (或升級)。從 OSS Istio 遷移及升級時,請按照修訂版本升級程序 (在 Istio 說明文件中稱為「Canary 升級」) 操作。透過修訂版本升級時,系統會一併安裝新版控制層和現有控制層。接著,您可以將部分工作負載移至新版本,這樣一來,您就能先監控一小部分工作負載的升級效果,再將所有流量遷移至新版本。

指令碼會在 istiod 上以 istio.io/rev=asm-1264-1 格式設定修訂版本標籤。如要啟用自動插入功能,請在命名空間中新增相符的修訂版本標籤。修訂版本標籤由 Sidecar 注入器 Webhook 使用,可將注入的 Sidecar 與特定istiod修訂版本建立關聯。新增標籤後,請重新啟動命名空間中的 Pod,以便注入 Sidecar。

  1. 取得 istiodistio-ingressgateway 上的修訂版本標籤。 在下列指令中,將 INGRESS_NAMESPACE 值變更為 Ingress 閘道執行的命名空間:

    kubectl get pod -n INGRESS_NAMESPACE -L istio.io/rev
    

    如果您的 Ingress 閘道名稱為 istio-ingressgateway,指令輸出內容會類似下列範例:

    NAME                                                READY   STATUS    RESTARTS   AGE   REV
    istio-ingressgateway-65d884685d-6hrdk               1/1     Running   0          67m
    istio-ingressgateway-65d884685d-94wgz               1/1     Running   0          67m
    istio-ingressgateway-asm-182-2-8b5fc8767-gk6hb      1/1     Running   0          5s    asm-1264-1
    istio-ingressgateway-asm-182-2-8b5fc8767-hn4w2      1/1     Running   0          20s   asm-1264-1
    istiod-asm-1264-1-67998f4b55-lrzpz          1/1     Running   0          68m   asm-1254-0
    istiod-asm-1264-1-67998f4b55-r76kr          1/1     Running   0          68m   asm-1254-0
    istiod-asm-1254-0-5cd96f88f6-n7tj9 1/1     Running   0          27s   asm-1264-1
    istiod-asm-1254-0-5cd96f88f6-wm68b 1/1     Running   0          27s   asm-1264-1
    1. 在輸出內容的「REV」欄下方,記下新版本的修訂標籤值。在本例中,這個值為 asm-1264-1

    2. 另請注意舊版 istiod 的修訂標籤值。 將工作負載移至新版 istiod 後,您需要這個 ID 才能刪除舊版 istiod。在範例輸出中,舊版的修訂版本標籤值為 asm-1254-0

  2. 將 Ingress 閘道切換至新修訂版本。在下列指令中,將 REVISION 變更為與新版本修訂標籤相符的值。將 INGRESS_NAMESPACE 改為 Ingress 閘道執行的命名空間,並將 INGRESS_NAME 改為 Ingress 閘道的名稱。

    kubectl patch service -n INGRESS_NAMESPACE INGRESS_NAME --type='json' -p='[{"op": "replace", "path": "/spec/selector/service.istio.io~1canonical-revision", "value": "REVISION"}]'

    預期的輸出內容: service/istio-ingressgateway patched

  3. 將修訂版本標籤新增至命名空間,並移除 istio-injection 標籤 (如有)。在下列指令中,將 REVISION 變更為與 istiod 新修訂版本相符的值。

    kubectl label namespace NAMESPACE istio.io/rev=REVISION istio-injection- --overwrite

    如果輸出內容顯示 "istio-injection not found",可以忽略。也就是說,命名空間先前沒有 istio-injection 標籤。如果命名空間同時有 istio-injection 和修訂版本標籤,自動插入行為會不確定,因此 Cloud Service Mesh 文件中的所有 kubectl label 指令都會明確確保只設定其中一個標籤。

  4. 重新啟動 Pod,觸發重新注入。

    kubectl rollout restart deployment -n NAMESPACE
  5. 測試應用程式,確認工作負載是否正常運作。

  6. 如果其他命名空間也有工作負載,請重複上述步驟,為命名空間加上標籤並重新啟動 Pod。

  7. 如果確認應用程式運作正常,請繼續執行步驟,改用新版 istiod。如果應用程式有問題,請按照步驟進行回溯。

    完成轉換

    確認應用程式運作正常後,請移除舊版控制平面,完成遷移至新版作業。

    1. 切換至 anthos-service-mesh GitHub 存放區檔案所在的目錄。

    2. 移動預設代碼。

      <OUTPUT_DIR>/istioctl tag set default --revision <NEW REVISION NAME> --overwrite
      
    3. 刪除舊的 Ingress 閘道部署作業。您執行的指令取決於要從 Istio 遷移,還是從舊版 Cloud Service Mesh 升級:

      遷移

      如果您是從 Istio 遷移,舊版 INGRESS_NAME 沒有修訂版本標籤。

      kubectl delete deploy/INGRESS_NAME -n INGRESS_NAMESPACE
      

      升級

      如果您是從舊版 Cloud Service Mesh 升級,請在下列指令中,將 OLD_REVISION 替換為舊版 INGRESS_NAME 的修訂版本標籤。

      kubectl delete deploy -l app=INGRESS_NAME,istio.io/rev=OLD_REVISION -n INGRESS_NAMESPACE --ignore-not-found=true
      
    4. 刪除舊版 istiod。使用的指令取決於您是從 Istio 遷移,還是從舊版 Cloud Service Mesh 升級。

      遷移

      如果您是從 Istio 遷移,舊版 istiod 沒有修訂版本標籤。

      kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget,sa,rolebinding,role istiod -n istio-system --ignore-not-found=true
      

      如果使用舊版控制層 (具有 OLD_REVISION 修訂版本標籤),請按一下「upgrade」分頁標籤,然後使用 OLD_REVISION 刪除 istiod 控制層。

      升級

      如果您是從舊版 Cloud Service Mesh 升級,請確保下列指令中的 OLD_REVISION 與舊版 istiod 的修訂版本標籤相符。

      kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget,sa,rolebinding,role istiod-OLD_REVISION -n istio-system --ignore-not-found=true
      

      刪除舊版修訂的 validatingwebhookconfigurationmutatingWebhookConfigurationconfigMapclusterRoleclusterRoleBinding 資源:

      kubectl delete validatingwebhookconfiguration istio-validator-OLD_REVISION-istio-system  --ignore-not-found
      kubectl delete mutatingWebhookConfiguration istio-sidecar-injector-OLD_REVISION --ignore-not-found
      kubectl delete configMap istio-OLD_REVISION istio-sidecar-injector-OLD_REVISION -n istio-system --ignore-not-found
      kubectl delete clusterRole,clusterRoleBinding istio-reader-clusterrole-OLD_REVISION-istio-system istiod-clusterrole-OLD_REVISION-istio-system istiod-gateway-controller-OLD_REVISION-istio-system --ignore-not-found
      
    5. 移除舊版 IstioOperator 設定。

      kubectl delete IstioOperator installed-state-OLD_REVISION -n istio-system --ignore-not-found=true
      

      預期輸出內容如下:

      istiooperator.install.istio.io "installed-state-OLD_REVISION" deleted

    復原

    如果您在使用新版 istiod 測試應用程式時遇到問題,請按照下列步驟還原至舊版:

    1. 重新標記命名空間,以啟用先前版本的 istiod 自動插入功能。使用的指令取決於您是否使用修訂版本標籤,或搭配舊版使用 istio-injection=enabled

      • 如果您使用修訂版本標籤自動插入:

        kubectl label namespace NAMESPACE istio.io/rev=OLD_REVISION --overwrite
        
      • 如果您使用 istio-injection=enabled

        kubectl label namespace NAMESPACE istio.io/rev- istio-injection=enabled --overwrite
        

      預期輸出內容:

      namespace/NAMESPACE labeled
    2. 確認命名空間的修訂版本標籤與先前版本的 istiod 修訂版本標籤相符:

      kubectl get ns NAMESPACE --show-labels
      
    3. 重新啟動 Pod,觸發重新注入程序,讓 Proxy 採用先前版本:

      kubectl rollout restart deployment -n NAMESPACE
      
    4. 移除新的 istio-ingressgateway Deployment。請確認下列指令中的 REVISION 值是否正確。

      kubectl delete deploy -l app=istio-ingressgateway,istio.io/rev=REVISION -n istio-system --ignore-not-found=true
      
    5. 移除新版 istiod。確認下列指令中的 REVISION 值正確無誤。

      kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-REVISION -n istio-system --ignore-not-found=true
      
    6. 移除新版 IstioOperator 設定。

     kubectl delete IstioOperator installed-state-REVISION -n istio-system --ignore-not-found=true
    

    預期輸出內容如下:

     istiooperator.install.istio.io "installed-state-REVISION" deleted

    1. 如果您未加入 --disable_canonical_service 旗標,指令碼會啟用標準服務控制器。建議您保持啟用狀態,但如需停用,請參閱「啟用及停用標準服務控制器」。