Cloud Service Mesh (代管型) 的 VPC Service Controls

Cloud Service Mesh (代管) 支援 VPC Service Controls,這項功能已正式發布,適用於新的控制層。

如要檢查控制層是否支援 VPC Service Controls 正式發布,請檢查成員的網狀功能狀態是否符合 VPCSC_GA_SUPPORTED 條件。

gcloud container fleet mesh describe --project FLEET_PROJECT_ID

輸出內容類似如下:

(...)
membershipStates:
  projects/FLEET_PROJECT_NUMBER/locations/MEMBERSHIP_LOCATION/memberships/MEMBERSHIP_ID:
    servicemesh:
      conditions:
      - code: VPCSC_GA_SUPPORTED
        details: This control plane supports VPC Service Controls GA.
        documentationLink: http://cloud.google.com/service-mesh/docs/managed/VPC Service Controls
        severity: INFO
(...)

如果您現有的控制層未回報 VPCSC_GA_SUPPORTED 條件,且您想依賴 VPC Service Controls,請與支援團隊聯絡。

事前準備

VPC Service Controls 組織政策和服務範圍是在組織層級設定。確認您具備管理 VPC Service Controls 的適當角色

設定 VPC Service Controls 服務範圍

建立或更新您的service perimeter

  1. 將叢集專案和機群專案新增至服務範圍。不支援服務網格跨越多個 VPC Service Controls 服務範圍。

  2. 將受限服務新增至服務範圍。

    您必須在服務邊界的允許和限制服務清單中新增特定服務,Cloud Service Mesh 叢集才能存取這些服務。在叢集的虛擬私有雲 (VPC) 網路中,存取這些服務也會受到限制。

    如果未新增這些服務,可能會導致 Cloud Service Mesh 安裝失敗或無法正常運作。舉例來說,如果未將 Mesh Configuration API 新增至服務邊界,安裝作業就會失敗,且工作負載不會從受管理控制層接收 Envoy 設定。

    控制台

    1. 按照「更新 service perimeter」一文中的步驟編輯範圍。
    2. 按一下「Edit VPC Service Perimeter」(編輯 VPC 服務範圍) 頁面。
    3. 依序點選「受限制的服務」、「要保護的服務」,然後按一下「新增服務」
    4. 在「指定要限制的服務」對話方塊中,按一下「篩選服務」,然後輸入「Mesh Configuration API」
    5. 勾選服務的核取方塊。
    6. 按一下「新增 Mesh 設定 API」
    7. 重複步驟 c 到 f,新增:
      • Cloud Service Mesh Certificate Authority API
      • GKE Hub API
      • Cloud IAM API
      • Cloud Monitoring API
      • Cloud Trace API
      • Cloud Monitoring API
      • Google Cloud Resource Manager API
      • Google Compute Engine API
      • Google Container Registry API
      • Artifact Registry API
      • Google Cloud Storage API
      • Cloud Logging API
      • Security Token Service API
    8. 按一下 [儲存]

    gcloud

    如要更新受限服務清單,請使用 update 指令,並以半形逗號分隔清單指定要新增的服務:

    gcloud access-context-manager perimeters update PERIMETER_NAME \
      --add-restricted-services=meshconfig.googleapis.com,meshca.googleapis.com,gkehub.googleapis.com,iam.googleapis.com,monitoring.googleapis.com,cloudtrace.googleapis.com,monitoring.googleapis.com,cloudresourcemanager.googleapis.com,compute.googleapis.com,containerregistry.googleapis.com,artifactregistry.googleapis.com,storage.googleapis.com,logging.googleapis.com,sts.googleapis.com \
      --policy=POLICY_NAME

    其中:

    • PERIMETER_NAME 是要更新的 service perimeter 名稱。

    • POLICY_NAME 是組織存取權政策的數字名稱。例如:330193482019

  3. 按一下「可透過虛擬私有雲存取的服務」,並設為「所有受限制的服務」,這樣一來,在 VPC Service Controls 範圍內,仍可存取上一步驟中受限制的服務。

  4. 除非您是從 perimeter 內網路安裝 Cloud Service Mesh,否則請新增輸入規則,允許執行 asmcli 指令的身分存取 service perimeter。

    詳情請參閱「更新 service perimeter」。

在 VPC Service Controls 範圍內安裝代管 Cloud Service Mesh

請按照「設定代管型 Cloud Service Mesh」頁面的步驟操作。然後,確認控制層已順利佈建,且沒有與 VPC Service Controls 相關的錯誤。

疑難排解

無法使用最新的 GKE 1.22 映像檔建立叢集

已知問題:在 VPC Service Controls 受限環境中,無法使用最新的 1.22 映像檔建立叢集。解決方法是先使用預設 GKE 管道映像檔建立這個叢集,然後升級映像檔:

gcloud container clusters create CLUSTER \
  --region REGION \
  --release-channel=rapid \
  --workload-pool=PROJECT_ID.svc.id.goog \
  --project PROJECT_ID
gcloud container clusters upgrade CLUSTER \
  --region REGION \
  --master --cluster-version 1.22 \
  --project PROJECT_ID

容器無法下載映像檔。

如果圖片位於服務邊界外,就可能發生這種情況。您可以將圖片移至周邊範圍內的 bucket,或更新周邊範圍以新增輸出規則。一般來說,輸出規則會允許所選身分存取 Container Registry APIArtifact Registry APICloud Storage API

ControlPlaneRevision CRD 的「狀態」欄位會顯示 VPC Service Controls 錯誤

執行下列指令,進一步瞭解錯誤:

gcloud logging read --project=PROJECT_ID \
'protoPayload.metadata.@type=type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata'

其中:

  • PROJECT_ID 是發生錯誤的專案 ID。