升級 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:
如果您要升級 GKE 上使用 Cloud Service Mesh 憑證授權單位的多叢集網格,請執行
asmcli create-mesh
,將多叢集網格設定為信任機群工作負載身分,以便在升級期間進行跨叢集負載平衡,不會發生停機情形。執行
asmcli install
,在單一叢集上安裝 Cloud Service Mesh。如需指令列範例,請參閱以下各節。範例中包含必要引數和選用引數,您可能會覺得實用。建議您一律指定output_dir
引數,方便您輕鬆找到範例閘道和工具,例如istioctl
。如需範例清單,請參閱右側的導覽列。您可以選擇安裝或升級 Ingress 閘道。根據預設,
asmcli
不會安裝istio-ingressgateway
。建議您分別部署及管理控制層和閘道。如需隨叢集內控制層安裝預設istio-ingressgateway
,請加入--option legacy-default-ingressgateway
引數。如要完成 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 憑證授權單位升級控制層。在提供的預留位置中輸入值。
將目前環境設為使用者叢集:
kubectl config use-context CLUSTER_NAME
執行
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 升級控制層。在提供的預留位置中輸入值。
將目前環境設為使用者叢集:
kubectl config use-context CLUSTER_NAME
執行
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。在提供的預留位置中輸入值。
將目前環境設為使用者叢集:
kubectl config use-context CLUSTER_NAME
執行
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。
公開
將目前環境設為使用者叢集:
kubectl config use-context CLUSTER_NAME
執行
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
憑證鏈結
私人
將目前環境設為使用者叢集:
kubectl config use-context CLUSTER_NAME
請將以下 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
執行
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 升級控制層。在提供的預留位置中輸入值。
將目前環境設為使用者叢集:
kubectl config use-context CLUSTER_NAME
執行
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 升級控制層。在提供的預留位置中輸入值。
將目前環境設為使用者叢集:
kubectl config use-context CLUSTER_NAME
執行
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 上執行下列指令。在提供的預留位置中輸入值。
將目前環境設為使用者叢集:
kubectl config use-context CLUSTER_NAME
執行
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
指定疊加檔案的名稱。
升級閘道
如果已部署閘道,也需要升級這些閘道。如要進行簡單升級,請按照「安裝與升級閘道」指南中的「就地升級」一節操作。
切換至新版控制層
取得
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
在輸出內容的「
REV
」欄下方,記下新版本的修訂標籤值。在本例中,這個值為asm-1264-1
。另請注意舊版
istiod
的修訂標籤值。 完成將工作負載移至新版本後,您需要這個檔案才能刪除舊版istiod
。在範例輸出中,舊版修訂標籤的值為asm-1254-0
。
將修訂版本標籤新增至應用程式命名空間,並移除
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
指令都會明確確保只設定其中一個標籤。重新啟動 Pod,觸發重新注入。
kubectl rollout restart deployment -n NAMESPACE
測試應用程式,確認工作負載是否正常運作。
如果其他命名空間也有工作負載,請重複上述步驟,為命名空間加上標籤並重新啟動 Pod。
如果確認應用程式運作正常,請繼續執行步驟,改用新版
istiod
。如果應用程式有問題,請按照步驟進行回溯。完成轉換
確認應用程式運作正常後,請移除舊版控制平面,完成遷移至新版作業。
切換至
anthos-service-mesh
GitHub 存放區檔案所在的目錄。移動預設代碼:
<OUTPUT_DIR>/istioctl tag set default --revision <NEW REVISION NAME> --overwrite
刪除舊版
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
升級
如果您是從舊版 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
刪除舊版修訂的
validatingwebhookconfiguration
、mutatingWebhookConfiguration
、configMap
、clusterRole
和clusterRoleBinding
資源: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
移除舊版
IstioOperator
設定:kubectl delete IstioOperator installed-state-OLD_REVISION -n istio-system
預期輸出內容如下:
istiooperator.install.istio.io "installed-state-OLD_REVISION" deleted
復原
如果您在使用新版
istiod
測試應用程式時遇到問題,請按照下列步驟還原至舊版:重新標記命名空間,以啟用先前版本的
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
確認命名空間的修訂版本標籤與先前版本的
istiod
修訂版本標籤相符:kubectl get ns NAMESPACE --show-labels
重新啟動 Pod,觸發重新注入程序,讓 Proxy 採用先前版本:
kubectl rollout restart deployment -n NAMESPACE
移除新版
istiod
。確認下列指令中的REVISION
值正確無誤。kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-REVISION -n istio-system --ignore-not-found=true
移除新版
IstioOperator
設定。kubectl delete IstioOperator installed-state-REVISION -n istio-system
預期輸出內容如下:
istiooperator.install.istio.io "installed-state-REVISION" deleted
如果您未加入
--disable_canonical_service
旗標,asmcli
會啟用標準服務控制器。建議您保持啟用狀態,但如需停用,請參閱「啟用及停用標準服務控制器」。如果您已部署閘道,請務必變更命名空間或部署作業的修訂版本標籤,以符合先前的
istiod
版本。請按照「安裝及升級閘道」指南中「就地升級」一節所述的程序進行。
部署與重新部署工作負載
您必須啟用自動 Sidecar 代理程式插入功能 (自動插入),才算完成安裝 (或升級)。從 OSS Istio 遷移及升級時,請按照修訂版本升級程序 (在 Istio 說明文件中稱為「Canary 升級」) 操作。透過修訂版本升級時,系統會一併安裝新版控制層和現有控制層。接著,您可以將部分工作負載移至新版本,這樣一來,您就能先監控一小部分工作負載的升級效果,再將所有流量遷移至新版本。
指令碼會在 istiod
上以 istio.io/rev=asm-1264-1
格式設定修訂版本標籤。如要啟用自動插入功能,請在命名空間中新增相符的修訂版本標籤。修訂版本標籤由 Sidecar 注入器 Webhook 使用,可將注入的 Sidecar 與特定istiod
修訂版本建立關聯。新增標籤後,請重新啟動命名空間中的 Pod,以便注入 Sidecar。
取得
istiod
和istio-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
在輸出內容的「
REV
」欄下方,記下新版本的修訂標籤值。在本例中,這個值為asm-1264-1
。另請注意舊版
istiod
的修訂標籤值。 將工作負載移至新版istiod
後,您需要這個 ID 才能刪除舊版istiod
。在範例輸出中,舊版的修訂版本標籤值為asm-1254-0
。
將 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
將修訂版本標籤新增至命名空間,並移除
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
指令都會明確確保只設定其中一個標籤。重新啟動 Pod,觸發重新注入。
kubectl rollout restart deployment -n NAMESPACE
測試應用程式,確認工作負載是否正常運作。
如果其他命名空間也有工作負載,請重複上述步驟,為命名空間加上標籤並重新啟動 Pod。
如果確認應用程式運作正常,請繼續執行步驟,改用新版
istiod
。如果應用程式有問題,請按照步驟進行回溯。完成轉換
確認應用程式運作正常後,請移除舊版控制平面,完成遷移至新版作業。
切換至
anthos-service-mesh
GitHub 存放區檔案所在的目錄。移動預設代碼。
<OUTPUT_DIR>/istioctl tag set default --revision <NEW REVISION NAME> --overwrite
刪除舊的 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
刪除舊版
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
刪除舊版修訂的
validatingwebhookconfiguration
、mutatingWebhookConfiguration
、configMap
、clusterRole
和clusterRoleBinding
資源: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
移除舊版
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
測試應用程式時遇到問題,請按照下列步驟還原至舊版:重新標記命名空間,以啟用先前版本的
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
確認命名空間的修訂版本標籤與先前版本的
istiod
修訂版本標籤相符:kubectl get ns NAMESPACE --show-labels
重新啟動 Pod,觸發重新注入程序,讓 Proxy 採用先前版本:
kubectl rollout restart deployment -n NAMESPACE
移除新的
istio-ingressgateway
Deployment。請確認下列指令中的REVISION
值是否正確。kubectl delete deploy -l app=istio-ingressgateway,istio.io/rev=REVISION -n istio-system --ignore-not-found=true
移除新版
istiod
。確認下列指令中的REVISION
值正確無誤。kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-REVISION -n istio-system --ignore-not-found=true
移除新版
IstioOperator
設定。
kubectl delete IstioOperator installed-state-REVISION -n istio-system --ignore-not-found=true
預期輸出內容如下:
istiooperator.install.istio.io "installed-state-REVISION" deleted
- 如果您未加入
--disable_canonical_service
旗標,指令碼會啟用標準服務控制器。建議您保持啟用狀態,但如需停用,請參閱「啟用及停用標準服務控制器」。