适用于 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 服务边界

创建或更新服务边界

  1. 添加集群项目和队列项目到服务边界。不支持将服务网格分布在多个 VPC Service Controls 边界内。

  2. 将受限服务添加到服务边界。

    您必须将特定服务添加到服务边界内的允许和受限服务列表中,这样 Cloud Service Mesh 集群才能访问它们。但仅可在集群的 Virtual Private Cloud (VPC) 网络内访问这些服务。

    如果不添加这些服务,可能会导致 Cloud Service Mesh 安装失败或无法正常运行。例如,如果不将 Mesh Configuration API 添加到服务边界,安装将会失败,工作负载将不会从代管式控制平面接收到其 Envoy 配置。

    控制台

    1. 按照更新服务边界中的步骤修改边界。
    2. 点击修改 VPC 服务边界页面。
    3. 受限服务要保护的服务下,点击添加服务
    4. 指定要限制的服务对话框中,点击过滤服务,然后输入 Mesh Configuration API
    5. 选中相应服务的复选框。
    6. 点击添加 Mesh Configuration API
    7. 重复步骤 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
    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 是要更新的服务边界的名称。

    • POLICY_NAME 是您的组织的访问权限政策的数字名称。例如 330193482019

  3. 点击 VPC 可访问服务并将其设置为“所有受限服务”,以保证在 VPC Service Controls 边界内仍然可以访问上述步骤中的受限服务。

  4. 除非您从边界内安装 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 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。