瞭解健康狀態檢查
Cloud Service Mesh 會使用健康狀態檢查判斷工作負載的健康狀態,並據此轉送流量。本頁說明 Cloud Service Mesh 的健康狀態檢查運作方式,以及如何管理必要的防火牆規則。
關於健康狀態檢查
在服務網格中,控制層需要瞭解工作負載 (Pod) 的健康狀態,確保流量只會轉送至健康狀態良好的端點。
- 代管 Cloud Service Mesh (
TRAFFIC_DIRECTOR控制層實作):Cloud Service Mesh 會使用 Google Cloud 的集中式健康狀態檢查基礎架構執行健康狀態檢查。這項基礎架構位於叢集外部,會將健康狀態檢查探測傳送至叢集節點。此外,我們會在kube-system命名空間中安裝名為snk的 DaemonSet,攔截通訊埠 7877 上的所有流量,並顯示所有工作負載的健康狀態。 - Istiod 控制層:健康狀態檢查是在叢集內使用 Kubernetes 機制完成。
代管健康狀態檢查的防火牆規則
如要允許 Managed Cloud Service Mesh 的外部健康狀態檢查探測連線至 GKE 節點,必須有適當的防火牆規則。
防火牆規則規格
如要使用 Cloud Service Mesh,機群中的每個代管 Cloud Service Mesh 叢集,都需要虛擬私有雲網路專案中的防火牆規則。這些規則允許來自 Google 健康狀態檢查探測器的輸入流量,傳輸至 GKE 叢集節點上的專用健康狀態檢查通訊埠:
- 「Source Ranges」(來源範圍):
35.191.0.0/16、130.211.0.0/22 - 「Allowed Protocols/Ports」(允許的通訊協定/通訊埠):
tcp:7877
我是否需要採取行動?
您是否需要手動設定權限或防火牆規則,取決於虛擬私有雲網路相對於機群和 GKE 叢集專案的位置:
虛擬私有雲網路位於機群專案中 => 不需要採取任何行動。系統會自動授予 Cloud Service Mesh 服務代理人
roles/anthosservicemesh.serviceAgent,其中包含這些權限。虛擬私有雲網路位於 GKE 叢集專案中 => 不需要採取任何行動。您在啟用期間授予了
roles/anthosservicemesh.serviceAgent給 Cloud Service Mesh 服務代理人。虛擬私有雲網路位於獨立主專案 (例如 Shared VPC 主專案),既不是機群專案也不是叢集專案 => 敬請採取行動。您必須授予服務代理人權限,才能管理該專案中的防火牆規則。
為協助您在下列操作說明中識別這些專案,請注意下列角色:
- 機群專案:註冊 GKE 叢集的專案。 Cloud Service Mesh 服務代理人位於此處。
- 虛擬私有雲網路專案:包含連線至 GKE 叢集的虛擬私有雲網路的專案 (如果您使用 Shared VPC,這就是主專案)。
- 叢集專案:GKE 叢集所在的專案。
系統代管防火牆規則
根據預設,Cloud Service Mesh 會自動建立及管理健康狀態檢查所需的防火牆規則。系統會在新手上路期間為每個叢集建立一項規則,並在解除安裝時刪除該規則。
所需權限
如要管理系統管理的防火牆規則,Cloud Service Mesh 服務代理必須在虛擬私有雲網路專案中具備下列權限:
compute.firewalls.get(檢查防火牆規則是否已存在)compute.firewalls.create(建立防火牆規則,如果不存在的話)compute.firewalls.update(如果防火牆規則已修改,可將其還原為預期設定)compute.firewalls.delete(在停用服務時刪除防火牆規則)compute.networks.updatePolicy(兩層授權檢查的一部分,用於在虛擬私有雲網路上附加、修改或移除防火牆規則)
車隊或叢集專案中的虛擬私有雲網路 (自動)
如果虛擬私有雲網路位於機群專案或 GKE 叢集專案中,則不需要採取任何行動。Cloud Service Mesh 服務代理會自動取得管理防火牆規則的必要權限。
位於不同專案的虛擬私有雲網路 (例如 Shared VPC)
如果虛擬私有雲網路位於其他專案,機群專案中的服務代理預設沒有權限管理該專案中的資源。您必須授予服務代理程式管理 VPC 網路專案中防火牆規則的權限。
授予這些權限的方法有兩種:
方法 1:授予範圍較小的防火牆權限 (最佳做法)
如要讓 Google 管理防火牆規則,但想限制授予虛擬私有雲網路專案服務代理程式的權限,可以建立僅具備必要防火牆權限的自訂 IAM 角色。
在虛擬私有雲網路專案中,建立具有必要防火牆權限的自訂 IAM 角色:
gcloud iam roles create LIMITED_IAM_ROLE_NAME \ --project=NETWORK_PROJECT_ID \ --title="Service Mesh Firewall Role" \ --permissions="compute.firewalls.get,compute.firewalls.create,compute.firewalls.update,compute.firewalls.delete,compute.networks.updatePolicy" \ --stage="GA"將 VPC 網路專案中的角色授予車隊專案的 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 "projects/NETWORK_PROJECT_ID/roles/LIMITED_IAM_ROLE_NAME"替換預留位置:
NETWORK_PROJECT_ID:虛擬私有雲網路專案的 ID。FLEET_PROJECT_NUMBER:車隊專案的專案編號。LIMITED_IAM_ROLE_NAME:您要為自訂角色指定的名稱。
選項 2:授予 Service Mesh 服務代理人角色 (最簡單)
最簡單的方法是將現有的 Service Mesh 服務代理程式角色 (roles/anthosservicemesh.serviceAgent) 授予車隊專案的服務帳戶。
將 VPC 網路專案中的角色授予車隊專案的 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替換預留位置:
NETWORK_PROJECT_ID:虛擬私有雲網路專案的 ID。FLEET_PROJECT_NUMBER:車隊專案的專案編號。
使用者管理的防火牆規則
如果您不想在 VPC 網路專案中授予 Cloud Service Mesh 服務代理任何寫入權限 (create、update、delete),可以自行預先建立防火牆規則,並只授予 Google 讀取 (get) 權限。
如果防火牆規則已存在且符合必要規格,Cloud Service Mesh 會直接使用,不會嘗試修改。
步驟 1:建立防火牆規則
尋找 SHORT_CLUSTER_ID:
gcloud container clusters describe CLUSTER_NAME \
--location=LOCATION \
--project=CLUSTER_PROJECT_ID \
--format="value(id)" | cut -c1-8
使用下列範本建立防火牆規則:
gcloud compute firewall-rules create gke-csm-thc-SHORT_CLUSTER_ID \
--project=NETWORK_PROJECT_ID \
--network=NETWORK_NAME \
--description="Firewall rule for service mesh health checks" \
--direction=INGRESS \
--action=ALLOW \
--rules=tcp:7877 \
--source-ranges="35.191.0.0/16,130.211.0.0/22" \
--target-tags=gke-CLUSTER_NAME-SHORT_CLUSTER_ID-node
替換預留位置:
SHORT_CLUSTER_ID:您在上一個步驟中找到的 GKE 叢集 ID 前 8 個字元。NETWORK_PROJECT_ID和NETWORK_NAME:專案 (虛擬私有雲網路專案) 和虛擬私有雲網路的名稱。CLUSTER_NAME:GKE 叢集名稱。
針對機群中的每個代管 Cloud Service Mesh 叢集,重複執行步驟 1。
步驟 2:授予 Google 唯讀權限
將 compute.firewalls.get 權限授予 Cloud Service Mesh 服務代理程式。
在虛擬私有雲網路專案中,建立僅具備
get權限的自訂角色:gcloud iam roles create READONLY_IAM_ROLE_NAME \ --project=NETWORK_PROJECT_ID \ --title="Service Mesh Firewall Read-Only Role" \ --permissions="compute.firewalls.get" \ --stage="GA"將角色授予 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 "projects/NETWORK_PROJECT_ID/roles/READONLY_IAM_ROLE_NAME"
在刪除叢集時,或從 Cloud Service Mesh 停用叢集時,刪除防火牆規則
如果您是手動建立防火牆規則 (使用者管理的防火牆規則),刪除叢集或從服務網格中移除時,Cloud Service Mesh 無法自動刪除這些規則。您必須手動刪除防火牆規則,以免留下未使用的資源。
如要刪除防火牆規則,請按照下列步驟操作:
gcloud compute firewall-rules delete gke-csm-thc-SHORT_CLUSTER_ID \
--project=NETWORK_PROJECT_ID