在 GKE 上佈建代管 Cloud Service Mesh 控制層
Google Cloud 詳情請參閱 Cloud Service Mesh 總覽。Cloud Service Mesh 是 Google 代管的服務網格,只要啟用即可使用。Google 會為您處理穩定性、升級、資源調度和安全性工作。
本頁說明如何使用 fleet API,透過 Istio API 設定受管理 Cloud Service Mesh。
必要條件
本指南假設您已具備以下條件:
- Cloud 專案
- Cloud Billing 帳戶
- 取得佈建 Cloud Service Mesh 的必要權限
- 在叢集和節點集區上啟用 Workload Identity。
需求條件
- 一或多個叢集,且叢集使用支援的 GKE 版本,並位於支援的區域。
請注意,受管理 Cloud Service Mesh 會使用 GKE 發布管道,在穩定性和升級速度之間取得平衡。Cloud Service Mesh 叢集內元件 (包括 CNI、MDPC、Proxy 和 Istio CRD) 的新變更,會先推出給訂閱 GKE Rapid 發布管道的叢集。如果穩定性足夠,就會升級至 GKE 一般版,最後再升級至 GKE 穩定版。
- 受管理 Cloud Service Mesh 不支援安全地變更 GKE 發布管道。
- 如果您變更 GKE 發布管道,Cloud Service Mesh 會自動升級/降級叢集內元件 (CNI、MDPC、預設注入的 Proxy 版本和 Istio CRD),以配合目前的 GKE 發布管道。
請確保叢集有足夠的容量,可容納受管理 Cloud Service Mesh 在叢集中安裝的必要元件。
kube-system
命名空間中的mdp-controller
Deployment 要求 CPU:50m,記憶體:128Mi。kube-system
命名空間中的istio-cni-node
daemonset 會在每個節點上要求 cpu: 100m、memory: 100Mi。
確認機構政策
constraints/compute.disableInternetNetworkEndpointGroup
已停用。 如果啟用這項政策,ServiceEntry 可能無法運作。確認您用於佈建受管理 Cloud Service Mesh 的用戶端電腦,已連上 API 伺服器。
叢集必須註冊至機群。 如果裝置在佈建前尚未註冊,這項資訊會包含在說明中。
專案必須啟用 Service Mesh 機群功能。如果尚未啟用,操作說明中會包含這項步驟。
GKE Autopilot 僅支援 GKE 1.21.3 以上版本。
Cloud Service Mesh 可在單一專案單一網路環境或多專案單一網路環境中使用多個 GKE 叢集。
- 如果加入的叢集不在同一個專案中,則必須註冊至同一個機群主專案,且叢集必須位於共用虛擬私有雲設定中,並位於同一個網路上。
- 如果是單一專案的多叢集環境,機群專案可以與叢集專案相同。如要進一步瞭解車隊,請參閱「車隊總覽」。
- 如果是多專案環境,建議您在叢集專案以外的專案中託管機群。如果機構政策和現有設定允許,建議您使用共用虛擬私有雲專案做為車隊主專案。詳情請參閱「透過共用虛擬私有雲設定叢集」。
安裝 Cloud Service Mesh 的必要角色
下表說明安裝受管理 Cloud Service Mesh 時所需的角色。
角色名稱 | 角色 ID | 授予位置資訊存取權 | 說明 |
---|---|---|---|
GKE Hub 管理員 | roles/gkehub.admin | 機群專案 | 具備 GKE Hub 和相關資源的完整存取權限。 |
服務使用情形管理員 | roles/serviceusage.serviceUsageAdmin | 機群專案 | 可啟用、停用及檢查服務狀態、檢查作業,以及消耗消費者專案的配額和帳單。(附註) |
CA 服務管理員 Beta 版 | roles/privateca.admin | 機群專案 | 具備所有 CA 服務資源的完整存取權。 (Note 2) |
執行 Cloud Service Mesh 時所需的角色
下表說明服務帳戶執行受管理 Cloud Service Mesh 時所需角色。如果網路或叢集專案與機群主專案不同,您必須在其他專案中,授予機群專案的服務帳戶這些角色。
角色名稱 | 角色 ID | 授予位置資訊存取權 | 說明 |
---|---|---|---|
Anthos 服務網格服務代理 | roles/anthosservicemesh.serviceAgent | 機群專案 | |
網格代管控制層服務代理 (舊版) | roles/meshcontrolplane.serviceAgent | 機群專案 | 這是舊版角色,屬於舊版 Cloud Service Mesh 安裝作業的一部分。如果您的安裝項目有這個服務角色,可以保留原狀。新安裝項目不需要這個角色。 |
限制
建議您參閱 Cloud Service Mesh 支援的功能和限制清單。請特別注意下列事項:
IstioOperator
API 不受支援,因為其主要用途是控制叢集內元件。如要使用憑證授權單位服務 (CA 服務),必須為每個叢集設定 Cloud Service Mesh,且 GKE Enterprise 不支援使用機群預設設定。
如果是 GKE Autopilot 叢集,只有 GKE 1.23 以上版本支援跨專案設定。
對於 GKE Autopilot 叢集,為了配合 GKE Autopilot 資源限制,預設的 Proxy 資源要求和限制會設為 500 m CPU 和 512 MB 記憶體。您可以使用自訂插入覆寫預設值。
如果是 GKE Autopilot 叢集,在叢集的 NodePool 擴充前,Cloud Service Mesh 元件可能會出現「DaemonSet has no nodes selected」警告。
在代管控制層的佈建程序中,系統會在指定叢集中佈建 Istio CRD。如果叢集中已有 Istio CRD,系統會覆寫這些 CRD。
Istio CNI 和 Cloud Service Mesh 與 GKE Sandbox 不相容。因此,
TRAFFIC_DIRECTOR
實作的代管 Cloud Service Mesh 不支援已啟用 GKE Sandbox 的叢集。
事前準備
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- 設定
gcloud
(即使您使用 Cloud Shell 也是如此)。 -
使用 Google Cloud CLI 進行驗證,其中 FLEET_PROJECT_ID 是 Fleet 主機專案的 ID。一般來說,系統會預設建立 FLEET_PROJECT_ID,且名稱與專案相同。
gcloud auth login --project FLEET_PROJECT_ID
- 更新元件:
gcloud components update
-
在機群主專案中啟用必要的 API。
gcloud services enable mesh.googleapis.com \ --project=FLEET_PROJECT_ID
前往 Google Cloud 控制台的「Feature Manager」頁面。
在「Service Mesh」(服務網格) 窗格中,按一下「設定」。
在 Google Cloud 控制台中建立並註冊至機群的所有新叢集,都會沿用這些設定。
如要套用這些設定,請按一下「設定」。
在確認對話方塊中,按一下「確認」。
選用步驟:將現有叢集與預設設定同步:
- 在「機群中的叢集」清單中,選取要同步的叢集。您只能選取已安裝 Cloud Service Mesh 的叢集。
- 按一下「Sync to fleet settings」(同步處理至車隊設定),然後在隨即顯示的確認對話方塊中,按一下「Confirm」(確認)。這項作業可能要幾分鐘才能完成。
機群層級設定
建立只包含單行
management: automatic
的mesh.yaml
檔案:echo "management: automatic" > mesh.yaml
為機群啟用 Cloud Service Mesh:
gcloud container fleet mesh enable --project FLEET_PROJECT_ID \ --fleet-default-member-config mesh.yaml
如果看到下列錯誤,請啟用 GKE Enterprise。
ERROR: (gcloud.container.fleet.mesh.enable) FAILED_PRECONDITION: The [anthos.googleapis.com] service is required for this operation and is not enabled for the project [PROJECT_NUMBER]. Please use the Google Developers Console to enable it.: failed precondition
網路層級設定
如果網路專案與機群主專案不同 (例如使用共用虛擬私有雲),則必須允許機群專案中的 Cloud Service Mesh 服務帳戶存取網路專案。這項操作只需要為網路專案執行一次。
授予機群專案中的服務帳戶存取網路專案的權限:
gcloud projects add-iam-policy-binding "NETWORK_PROJECT_ID" \ --member "serviceAccount:service-FLEET_PROJECT_NUMBER@gcp-sa-servicemesh.iam.gserviceaccount.com" \ --role roles/anthosservicemesh.serviceAgent
叢集層級設定
準備好建立叢集以搭配 Cloud Service Mesh 使用時,請透過 Google Cloud CLI 建立並註冊叢集,即可使用預設設定。例如:
gcloud container clusters create-auto CLUSTER_NAME \ --fleet-project FLEET_PROJECT_ID \ --location=LOCATION
您可以執行下列指令,取得車隊專案的專案編號:
gcloud projects list --filter="FLEET_PROJECT_ID" --format="value(PROJECT_ID)"
--location
旗標是叢集的運算區域或地區 (例如us-central1-a
或us-central1
)。如果叢集專案與車隊主機專案不同,您必須允許車隊專案中的 Cloud Service Mesh 服務帳戶存取叢集專案,並在叢集專案中啟用必要 API。每個叢集專案只需要執行一次這項操作。
授予機群專案中的服務帳戶存取叢集專案的權限:
gcloud projects add-iam-policy-binding "CLUSTER_PROJECT_ID" \ --member "serviceAccount:service-FLEET_PROJECT_NUMBER@gcp-sa-servicemesh.iam.gserviceaccount.com" \ --role roles/anthosservicemesh.serviceAgent
在叢集的專案中啟用 Mesh API:
gcloud services enable mesh.googleapis.com \ --project=CLUSTER_PROJECT_ID
將 CLUSTER_PROJECT_ID 替換為叢集專案的專屬 ID。如果您在與機群相同的專案中建立叢集,則 CLUSTER_PROJECT_ID 與 FLEET_PROJECT_ID 相同。
使用機群 Workload Identity 註冊 GKE 叢集。
--location
標記是叢集的運算區域或地區 (例如us-central1-a
或us-central1
)。gcloud container clusters update CLUSTER_NAME \ --location CLUSTER_LOCATION \ --fleet-project FLEET_PROJECT_ID
確認叢集已註冊:
gcloud container fleet memberships list --project FLEET_PROJECT_ID
輸出內容範例:
NAME EXTERNAL_ID LOCATION cluster-1 1d8e255d-2b55-4df9-8793-0435461a2cbc us-central1
請記下 MEMBERSHIP_NAME,因為啟用自動管理時需要用到。
如果叢集網路的專案與車隊主專案不同 (例如您使用共用虛擬私有雲),則必須允許車隊專案中的 Cloud Service Mesh 服務帳戶存取網路專案。這項操作只需要為網路專案執行一次。
授予機群專案中的服務帳戶存取網路專案的權限:
gcloud projects add-iam-policy-binding "NETWORK_PROJECT_ID" \ --member "serviceAccount:service-FLEET_PROJECT_NUMBER@gcp-sa-servicemesh.iam.gserviceaccount.com" \ --role roles/anthosservicemesh.serviceAgent
如果叢集專案與機群主專案不同,您必須允許機群專案中的 Cloud Service Mesh 服務帳戶存取叢集專案,並在叢集專案中啟用必要 API。
每個叢集專案只需要執行一次這項操作。如果您先前已為這組叢集和車隊專案設定受管理 Cloud Service Mesh,這些變更就已套用,您不必執行下列指令。
授予機群專案中的服務帳戶存取叢集專案的權限:
gcloud projects add-iam-policy-binding "CLUSTER_PROJECT_ID" \ --member "serviceAccount:service-FLEET_PROJECT_NUMBER@gcp-sa-servicemesh.iam.gserviceaccount.com" \ --role roles/anthosservicemesh.serviceAgent
在叢集的專案中啟用 Mesh API:
gcloud services enable mesh.googleapis.com \ --project=CLUSTER_PROJECT_ID
- MEMBERSHIP_NAME 是您驗證叢集是否已註冊至機群時列出的成員名稱。
MEMBERSHIP_LOCATION 是會員方案的適用地區 (區域或
global
)。如果您最近使用本指南中的指令建立成員資格,這應該是叢集的區域。如果您有可用區叢集,請使用與叢集可用區對應的區域。舉例來說,如果您在
us-central1-c
中有區域叢集,請使用us-central1
值。如果您是在 2023 年 5 月前註冊,或是註冊會員時指定了
global
位置,這個值可能為global
。你可以使用gcloud container fleet memberships list --project FLEET_PROJECT_ID
檢查會員的所在位置。- 未注入的 Pod
- 手動插入的 Pod
- 工作
- StatefulSets
- DaemonSets
前往「Communication」(通訊) 頁面。
在「Cloud Service Mesh Upgrade」(Cloud Service Mesh 升級) 列的「Email」(電子郵件) 欄下方,選取單選按鈕,將維護通知設為「開啟」。
- 將預設插入標籤套用至命名空間:
執行下列指令,找出可用的發布管道:
kubectl -n istio-system get controlplanerevision
輸出結果會與下列內容相似:
NAME AGE asm-managed-rapid 6d7h
注意:如果上述清單中出現兩個控制層修訂版本,請移除其中一個。叢集不支援多個控制層通道。
在輸出內容中,「
NAME
」欄下方的值是與 Cloud Service Mesh 版本可用發布管道對應的修訂版本標籤。將修訂版本標籤套用至命名空間:
kubectl label namespace NAMESPACE \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
- Kubernetes 要求在執行插入作業前設定
image
欄位。 雖然您可以設定特定映像檔來覆寫預設映像檔,但我們建議將image
設為auto
,這樣一來,Sidecar 注入器就會自動選取要使用的映像檔。 containers
中的部分欄位取決於相關設定。舉例來說,必須小於或等於 CPU 限制。如果這兩個欄位都未正確設定,Pod 可能無法啟動。- Kubernetes 可讓您為 Pod
spec
中的資源設定requests
和limits
。GKE Autopilot 只會考量requests
。詳情請參閱「在 Autopilot 中設定資源限制」。 - 如果是 GKE Standard,請務必明確設定
sidecar.istio.io/proxyCPULimit
,sidecar.istio.io/proxyCPU
否則,系統會將 Sidecar 的 CPU 限制設為無上限。 - 如果是 GKE Standard,且已設定
sidecar.istio.io/proxyMemory
,請務必明確設定sidecar.istio.io/proxyMemoryLimit
。否則,系統會將 Sidecar 的記憶體限制設為無上限。 - 如果是 GKE Autopilot,使用註解設定資源
requests
和limits
可能會過度佈建資源。請使用圖片範本方法,避免發生這種情況。請參閱「Autopilot 中的資源修改範例」。 - 取代目前的命名空間標籤。步驟取決於控制層實作。
- 將預設插入標籤套用至命名空間:
執行下列指令,找出可用的發布管道:
kubectl -n istio-system get controlplanerevision
輸出結果會與下列內容相似:
NAME AGE asm-managed-rapid 6d7h
注意:如果上述清單中出現兩個控制層修訂版本,請移除其中一個。叢集不支援多個控制層通道。
在輸出內容中,「
NAME
」欄下方的值是與 Cloud Service Mesh 版本可用發布管道對應的修訂版本標籤。將修訂版本標籤套用至命名空間:
kubectl label namespace NAMESPACE \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
在命名空間中執行部署的滾動升級:
kubectl rollout restart deployment -n NAMESPACE
測試應用程式,確認工作負載是否正常運作。
如果其他命名空間也有工作負載,請針對每個命名空間重複上述步驟。
如果您在多叢集設定中部署應用程式,請在所有叢集中複製 Kubernetes 和 Istio 設定,除非您只想將該設定限制在部分叢集。套用至特定叢集的設定是該叢集的真理來源。
更新工作負載,以便注入舊版控制層。在下列指令中,修訂版本值
asm-191-1
僅做為範例。請將範例值換成先前控制平面的修訂版本標籤。kubectl label namespace NAMESPACE istio-injection- istio.io/rev=asm-191-1 --overwrite
重新啟動 Pod,觸發重新注入程序,讓 Proxy 採用先前的版本:
kubectl rollout restart deployment -n NAMESPACE
啟用 mesh.googleapis.com 會啟用下列 API:
API | 目的 | 可停用 |
---|---|---|
meshconfig.googleapis.com |
Cloud Service Mesh 會使用 Mesh Configuration API,將網格中的設定資料轉送至 Google Cloud。此外,啟用 Mesh Configuration API 後,您就能在 Google Cloud 控制台中存取 Cloud Service Mesh 頁面,並使用 Cloud Service Mesh 憑證授權單位。 | 否 |
meshca.googleapis.com |
與代管 Cloud Service Mesh 使用的 Cloud Service Mesh 憑證授權單位相關。 | 否 |
container.googleapis.com |
建立 Google Kubernetes Engine (GKE) 叢集時必須具備這項權限。 | 否 |
gkehub.googleapis.com |
如要以機群形式管理網格,則必須提供。 | 否 |
monitoring.googleapis.com |
擷取網格工作負載的遙測資料時,必須使用這項服務。 | 否 |
stackdriver.googleapis.com |
使用服務 UI 時必須提供。 | 否 |
opsconfigmonitoring.googleapis.com |
必須使用 Services UI 才能關閉叢集。Google Cloud | 否 |
connectgateway.googleapis.com |
這是必要步驟,代管 Cloud Service Mesh 控制層才能存取網格工作負載。 | 是* |
trafficdirector.googleapis.com |
啟用高可用性且可擴充的代管控制層。 | 是* |
networkservices.googleapis.com |
啟用高可用性且可擴充的代管控制層。 | 是* |
networksecurity.googleapis.com |
啟用高可用性且可擴充的代管控制層。 | 是* |
設定代管型 Cloud Service Mesh
使用 Fleet API 佈建代管 Cloud Service Mesh 時,所需步驟取決於您偏好為新的機群叢集預設啟用,還是為每個叢集啟用。
為機群設定
您必須啟用 Google Kubernetes Engine (GKE) Enterprise 版,才能為車隊啟用代管式 Cloud Service Mesh 做為預設設定。也就是說,在建立叢集時註冊的每個新 GKE on Google Cloud 叢集,都會在叢集上啟用代管 Cloud Service Mesh。如要進一步瞭解機群預設設定,請參閱「管理機群層級功能」。
為機群啟用代管 Cloud Service Mesh 做為預設設定,並在建立叢集時向機群註冊叢集,僅支援 Mesh CA。如要使用 Certificate Authority Service,建議為每個叢集啟用這項服務。
如要為代管式 Cloud Service Mesh 啟用機群層級預設值,請完成下列步驟:
控制台
gcloud
如要使用 Google Cloud CLI 設定機群層級預設值,請建立下列設定:
請繼續確認控制層已佈建完成。
設定每個叢集
請按照下列步驟,為網格中的每個叢集個別設定受管理 Cloud Service Mesh。
啟用 Cloud Service Mesh 艦隊功能
在車隊專案中啟用 mesh
功能。請注意,如果您打算註冊多個叢集,啟用 Cloud Service Mesh 機群功能是在機群層級進行,因此您只需要執行一次這個指令。
gcloud container fleet mesh enable --project FLEET_PROJECT_ID
將叢集註冊至機群
設定憑證授權單位服務 (選用)
如果服務網格部署作業需要憑證授權單位服務 (CA 服務),請按照「為受管理 Cloud Service Mesh 設定憑證授權單位服務」一文的說明,為車隊啟用這項服務。請務必完成所有步驟,再繼續進行下一個部分。
啟用自動管理功能
執行下列指令來啟用自動管理功能:
gcloud container fleet mesh update \
--management automatic \
--memberships MEMBERSHIP_NAME \
--project FLEET_PROJECT_ID \
--location MEMBERSHIP_LOCATION
其中:
Terraform 支援
Cloud Service Mesh 支援透過 Terraform 佈建,方法是使用 GKE Hub 功能成員資格模組。
如需詳細操作說明,請參閱佈建受管理服務網格教學課程。
確認控制層已佈建完成
幾分鐘後,確認控制層狀態為 ACTIVE
:
gcloud container fleet mesh describe --project FLEET_PROJECT_ID
輸出內容類似如下:
...
membershipSpecs:
projects/746296320118/locations/us-central1/memberships/demo-cluster-1:
mesh:
management: MANAGEMENT_AUTOMATIC
membershipStates:
projects/746296320118/locations/us-central1/memberships/demo-cluster-1:
servicemesh:
controlPlaneManagement:
details:
- code: REVISION_READY
details: 'Ready: asm-managed'
state: ACTIVE
implementation: ISTIOD | TRAFFIC_DIRECTOR
dataPlaneManagement:
details:
- code: OK
details: Service is running.
state: ACTIVE
state:
code: OK
description: 'Revision(s) ready for use: asm-managed.'
...
請注意 implementation
欄位中顯示的控制層,可能是 ISTIOD
或 TRAFFIC_DIRECTOR
。如要瞭解控制層差異和支援的設定,以及如何選取控制層實作方式,請參閱「Cloud Service Mesh 支援的功能」。
設定 kubectl
指向叢集
接下來的幾個小節會說明如何針對每個叢集執行 kubectl
指令。在繼續閱讀下列各節之前,請為每個叢集執行下列指令,將 kubectl
設定為指向該叢集。
gcloud container clusters get-credentials CLUSTER_NAME \
--location CLUSTER_LOCATION \
--project CLUSTER_PROJECT_ID
請注意,控制平面不會自動部署 Ingress 閘道。將 Ingress 閘道和控制層的部署作業分離,即可在正式環境中管理閘道。如要使用 Istio 輸入閘道或輸出閘道,請參閱「部署閘道」。如要使用 Kubernetes Gateway API,請參閱「為網格準備 Gateway」。如要啟用其他選用功能,請參閱「啟用 Cloud Service Mesh 的選用功能」。
代管資料層
如果您使用代管 Cloud Service Mesh,Google 會全面管理 Proxy 升級作業。
啟用受管理資料平面功能後,系統會與受管理控制平面同步,主動且自動更新 Sidecar Proxy 和注入的閘道,方法是重新啟動工作負載,重新注入新版 Proxy。這項作業會在控制層升級後開始,通常會在開始後 2 週內完成。
請注意,代管資料平面依賴 GKE 發布管道。如果啟用代管資料層時變更 GKE 發布管道,代管 Cloud Service Mesh 會更新所有現有工作負載的 Proxy,就像代管資料層推出一樣。
如果停用,系統會被動管理 Proxy,也就是由叢集中 Pod 的自然生命週期驅動,且使用者必須手動觸發,才能控制更新頻率。
受管理資料層會逐出執行舊版 Proxy 的 Pod,藉此升級 Proxy。系統會逐步執行驅逐作業,遵守 Pod 中斷預算,並控制變更率。
代管資料層不會管理下列項目:
停用受管理資料層 (選用)
如果您要在新叢集上佈建代管 Cloud Service Mesh,可以完全停用代管資料層,或針對個別命名空間或 Pod 停用。如果現有叢集預設或手動停用受管理資料層,系統會繼續停用。
如要在叢集層級停用代管資料平面,並還原為自行管理 Sidecar Proxy,請變更註解:
kubectl annotate --overwrite controlplanerevision -n istio-system \
mesh.cloud.google.com/proxy='{"managed":"false"}'
如要為命名空間停用代管資料平面,請按照下列步驟操作:
kubectl annotate --overwrite namespace NAMESPACE \
mesh.cloud.google.com/proxy='{"managed":"false"}'
如要停用 Pod 的代管資料層,請按照下列步驟操作:
kubectl annotate --overwrite pod POD_NAME \
mesh.cloud.google.com/proxy='{"managed":"false"}'
為受管理資料層啟用維護期間
如果您已設定 GKE 維護期間,系統會在下一個可用的維護期間開始時啟動升級作業,並持續進行,直到所有受管理 Pod 都更新完畢為止 (通常需要 12 小時)。與 CVE 相關的推出作業不會遵守維護期間。
Cloud Service Mesh 會使用 GKE 維護時間視窗,與 GKE 保持一致。
啟用受管理資料層的維護通知
您可以要求在預定維護作業前一週收到通知,掌握即將進行的受管理資料平面維護作業。根據預設,系統不會傳送維護通知。您也必須設定 GKE 維護期,才能收到通知。啟用後,系統會在升級作業前至少兩天傳送通知。
如要啟用代管資料平面維護通知,請按照下列步驟操作:
如要接收通知,每位使用者都必須個別選擇啟用。如要為這些通知設定電子郵件篩選器,主旨行為:
Upcoming upgrade for your Cloud Service Mesh cluster "CLUSTER_LOCATION/CLUSTER_NAME"
。
以下範例顯示典型的受管理資料平面維護通知:
主旨:Cloud Service Mesh 叢集「
<location/cluster-name>
」即將升級Cloud Service Mesh 使用者,您好:
叢集 ${instance_id} (https://console.cloud.google.com/kubernetes/clusters/details/${instance_id}/details?project=${project_id}) 中的 Cloud Service Mesh 元件已排定於 ${scheduled_date_human_readable} ${scheduled_time_human_readable} 升級。
如想查看最新的更新資訊,請前往「版本資訊」頁面:https://cloud.google.com/service-mesh/docs/release-notes
如果這項維護作業取消,您會收到另一封電子郵件。
祝一切順心!
Cloud Service Mesh 團隊敬上
(c) 2023 Google LLC 1600 Amphitheater Parkway, Mountain View, CA 94043, USA Google Cloud Platform 或您的帳戶設定有重大變更,系統特此發送這則公告通知您。 如要停止接收維護期間通知,可至下列網址編輯使用者偏好設定:https://console.cloud.google.com/user-preferences/communication?project=${project_id}
設定端點探索 (僅適用於多叢集安裝作業)
如果網格只有一個叢集,請略過這些多叢集步驟,直接前往「部署應用程式」或「遷移應用程式」。
繼續操作前,請確認每個叢集都已設定 Cloud Service Mesh。
使用 Fleet API 啟用 Cloud Service Mesh 後,這個叢集就會啟用端點探索功能。不過,您必須開啟防火牆通訊埠。如要為一或多個叢集停用端點探索功能,請參閱「透過宣告式 API 進行叢集間的端點探索」一文中的停用指示。
如需包含兩個叢集的範例應用程式,請參閱「HelloWorld 服務範例」。
部署應用程式
如果車隊中有多個叢集使用受管理 Cloud Service Mesh,請先確認端點探索或防火牆連接埠已依預期設定,再繼續部署應用程式。啟用要用於注入的命名空間。步驟取決於控制層實作。
受管理 (TD)
kubectl label namespace NAMESPACE \
istio.io/rev- istio-injection=enabled --overwrite
受管理 (Istiod)
建議:執行下列指令,將預設的插入標籤套用至命名空間:
kubectl label namespace NAMESPACE \
istio.io/rev- istio-injection=enabled --overwrite
如果您是使用受管理 Istiod 控制平面的現有使用者: 建議您使用預設注入,但系統也支援以修訂版本為準的注入。請按照下列指示操作:
使用下列指令,驗證命名空間標籤是否已正確套用。
kubectl get namespace -L istio-injection
輸出內容範例:
NAME STATUS AGE ISTIO-INJECTION
default Active 5m9s enabled
此時,您已成功設定代管型 Cloud Service Mesh。如果標籤命名空間中已有工作負載,請重新啟動這些工作負載,讓系統注入 Proxy。
如果您在多叢集設定中部署應用程式,請在所有叢集中複製 Kubernetes 和控制層設定,除非您打算將特定設定限制在叢集子集中。套用至特定叢集的設定,就是該叢集的可靠資料來源。
自訂插入內容 (選用)
您可以覆寫預設值並自訂插入設定,但這可能會導致無法預期的設定錯誤,以及連帶容器的問題。自訂插入作業前,請先閱讀範例後方的資訊,瞭解特定設定和建議。
您可以針對個別 Pod 覆寫這些選項,進行 Pod 專屬設定。方法是在 Pod 中新增 istio-proxy
容器。Sidecar 插入作業會將這裡定義的任何設定,視為預設插入範本的覆寫項目。
舉例來說,下列設定會自訂各種設定,包括降低 CPU 要求、新增磁碟區掛接,以及新增 preStop
Hook:
apiVersion: v1
kind: Pod
metadata:
name: example
spec:
containers:
- name: hello
image: alpine
- name: istio-proxy
image: auto
resources:
requests:
cpu: "200m"
memory: "256Mi"
limits:
cpu: "200m"
memory: "256Mi"
volumeMounts:
- mountPath: /etc/certs
name: certs
lifecycle:
preStop:
exec:
command: ["sleep", "10"]
volumes:
- name: certs
secret:
secretName: istio-certs
一般來說,Pod 中的任何欄位都可以設定。不過,請務必注意下列欄位:
此外,您也可以透過 Pod 上的註解設定特定欄位,但建議使用上述方法自訂設定。請特別留意下列註解:
例如,請參閱下列資源註解:
spec:
template:
metadata:
annotations:
sidecar.istio.io/proxyCPU: "200m"
sidecar.istio.io/proxyCPULimit: "200m"
sidecar.istio.io/proxyMemory: "256Mi"
sidecar.istio.io/proxyMemoryLimit: "256Mi"
將應用程式遷移至代管 Cloud Service Mesh
如要將應用程式從叢內 Cloud Service Mesh 遷移至代管 Cloud Service Mesh,請執行下列步驟:
受管理 (TD)
kubectl label namespace NAMESPACE \
istio.io/rev- istio-injection=enabled --overwrite
受管理 (Istiod)
建議:執行下列指令,將預設的插入標籤套用至命名空間:
kubectl label namespace NAMESPACE \
istio.io/rev- istio-injection=enabled --overwrite
如果您是使用受管理 Istiod 控制平面的現有使用者: 建議您使用預設注入,但系統也支援以修訂版本為準的注入。請按照下列指示操作:
如果確認應用程式運作正常,您可以將所有命名空間切換至代管控制平面後,移除叢內 istiod
,或保留做為備份。istiod
會自動縮減規模,以減少資源用量。如要移除,請跳至「刪除舊版控制平面」。
如果遇到問題,可以參考「解決受管理控制層問題」一文中的資訊找出並解決問題,必要時還可還原至先前版本。
刪除舊的控制層
安裝並確認所有命名空間都使用 Google 管理的控制層後,即可刪除舊控制層。
kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod -n istio-system --ignore-not-found=true
如果您使用 istioctl kube-inject
而非自動插入,或是安裝了其他閘道,請檢查控制層的指標,並確認連線端點數量為零。
復原
如要復原至先前的控制平面版本,請按照下列步驟操作:
如果沒有使用,受管理控制層會自動將資源調度降至零,不會使用任何資源。變動 Webhook 和佈建作業會保留,且不會影響叢集行為。
閘道現已設為「asm-managed
」修訂版本。如要回溯,請重新執行 Cloud Service Mesh 安裝指令,系統會重新部署閘道,並將其指回叢內控制層:
kubectl -n istio-system rollout undo deploy istio-ingressgateway
成功時的預期輸出內容:
deployment.apps/istio-ingressgateway rolled back
解除安裝 Cloud Service Mesh
如果沒有任何命名空間使用代管控制層,系統會自動將其資源調度降至零。如需詳細步驟,請參閱解除安裝 Cloud Service Mesh。