Cloud Service Mesh(代管式)支持将 VPC Service Controls 作为新控制平面的正式版 (GA) 功能。
如需检查您的控制平面是否支持 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 服务边界
创建或更新服务边界:
添加集群项目和队列项目到服务边界。系统不支持将服务网格分布在多个 VPC Service Controls 边界上。
将受限服务添加到服务边界。
您必须将特定服务添加到服务边界的允许和受限服务列表中,以便您的 Cloud Service Mesh 集群可以访问它们。但仅可在集群的 Virtual Private Cloud (VPC) 网络内访问这些服务。
不添加这些服务可能会导致 Cloud Service Mesh 安装失败或无法正常运行。例如,如果您不将 Mesh Configuration API 添加到服务边界,则安装将失败,并且工作负载将不会从代管式控制平面接收其 Envoy 配置。
控制台
- 按照更新服务边界中的步骤修改边界。
- 点击修改 VPC 服务边界页面。
- 在受限服务的要保护的服务下,点击添加服务。
- 在指定要限制的服务对话框中,点击过滤服务,然后输入 Mesh Configuration API。
- 选中相应服务的复选框。
- 点击添加 Mesh Configuration API。
- 重复步骤 c - f,添加以下 API:
- 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
- 点击保存。
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 是要更新的服务边界的名称。
POLICY_NAME 是您的组织的访问权限政策的数字名称。例如
330193482019
。
点击 VPC 可访问服务,并将其设置为“所有受限服务”,这样用户仍然可以从 VPC Service Controls 边界内访问上述步骤中受限的服务。
除非您是从边界内网络安装 Cloud Service Mesh,否则请添加入站规则以允许运行
asmcli
命令的身份访问服务边界。如需了解详情,请参阅更新服务边界。
在 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
容器无法下载其映像。
如果映像位于服务边界以外,则可能会发生这种情况。您可以将映像移动到边界内的存储桶中,也可以更新边界以添加出站流量规则。通常,出站规则可能允许选定身份访问 Container Registry API、Artifact Registry API 和 Cloud 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。