适用于 Cloud Service Mesh(托管式)的 VPC Service Controls
Cloud Service Mesh(托管式)支持将 VPC Service Controls 作为正式版 (GA) 功能提供给新的控制平面。
如需检查您的控制平面是否支持 VPC Service Controls GA,请检查您的成员资格的网格功能状态,以查看 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。