了解 Cloud Service Mesh 兼容性
ISTIOD 控制平面实现已弃用,您必须在支持结束期限之前评估兼容性、解决整个舰队中的阻塞情况并进行现代化改造。
本指南详细介绍了如何评估舰队是否适合进行控制平面现代化改造,方法是确认其配置、基础架构和规模是否与 TRAFFIC_DIRECTOR 控制平面实现兼容。
选择启用或停用兼容性检查
如需启动兼容性检查,请为舰队启用验证模式,这会触发对所有 Istio 配置、基础架构配置和规模参数的持续审核。启用这些检查不会对您的舰队或集群进行任何更改;只会启用兼容性报告。
启用检查
如需开始进行兼容性审核,请运行以下 gcloud 命令:
gcloud alpha container fleet mesh update --modernization-compatibility validation-enabled --project FLEET_PROJECT_ID
将 FLEET_PROJECT_ID 替换为您的舰队宿主项目的 ID。
通常,FLEET_PROJECT_ID 与项目的名称相同。
启用后,Cloud Service Mesh 会开始评估舰队和舰队中所有已配置 Cloud Service Mesh 的集群的现代化兼容性。
停用检查
如需停止报告兼容性结果,请运行以下命令:
gcloud alpha container fleet mesh update --modernization-compatibility validation-disabled --project FLEET_PROJECT_ID
此命令会从成员资格状态中移除现代化兼容性条件,并从各个 Istio CR 中移除 ModernizationCompatible 状态。
了解兼容性
现代化改造兼容性是通过舰队级和成员(集群)级条件报告的。系统会在不同时间执行各种检查,所有检查每天至少运行一次。启用检查或应用修复后,状态最多可能需要一天时间才能更新。
如需查看这些结果,请使用以下命令检索最新的网格状态:
gcloud container fleet mesh describe --project FLEET_PROJECT_ID
舰队级兼容性
在 state.servicemesh.conditions 下查看舰队的总体现代化改造状态。
舰队兼容:如果您的舰队兼容,您会看到代码为
MODERNIZATION_COMPATIBLE的条件:name: projects/project_id/locations/global/features/servicemesh state: servicemesh: conditions: - code: MODERNIZATION_COMPATIBLE details: 'Fleet is eligible for modernization.' documentationLink: https://cloud.google.com/service-mesh/... severity: INFO舰队不兼容:如果您的舰队尚不兼容现代化改造,您会看到代码为
MODERNIZATION_INCOMPATIBLE的条件:name: projects/project_id/locations/global/features/servicemesh state: servicemesh: conditions: - code: MODERNIZATION_INCOMPATIBLE details: 'Fleet is not yet eligible for modernization.' documentationLink: https://cloud.google.com/service-mesh/... severity: INFO如果您的车队不兼容,请查看特定差距的条件。 检查是否存在其他
WARNING或ERROR严重程度的舰队级条件以及membershipStates.servicemesh下的集群级条件,以解决任何阻碍因素。
集群级兼容性
在舰队中每个已配置 Cloud Service Mesh 的集群的 membershipStates.servicemesh 下,查找严重程度为 WARNING 或 ERROR 的状况。如果存在不兼容问题,则输出类似于以下内容:
membershipSpecs:
projects/project_id/locations/global/memberships/cluster-a:
mesh:
management:MANAGEMENT_AUTOMATIC
membershipStates:
projects/project_id/locations/global/memberships/cluster-a:
servicemesh:
conditions:
- code: MODERNIZATION_INCOMPATIBLE_POD_ANNOTATION
details: 'Pod pod-a in namespace test-namespace: invalid annotations: ["status.sidecar.istio.io/port": failed to parse port - "invalid", port must be a number and should be in the range 1..65535]; unsupported annotations: ["ambient.istio.io/redirection"] .'
documentationLink: https://cloud.google.com/service-mesh/...
severity: WARNING
- code: WORKLOAD_IDENTITY_REQUIRED
details: 'Workload Identity is not enabled for the cluster or at least one of the node pools.'
documentationLink: https://cloud.google.com/...
severity: ERROR
...
按照每种情况中提供的 documentationLink 了解并解决具体的不兼容问题。
解决兼容性问题
解决不兼容的 pod 注释
MODERNIZATION_INCOMPATIBLE_POD_ANNOTATION 代码表示集群无法升级到 TRAFFIC_DIRECTOR 控制平面,因为某些 Pod 具有不受支持或无效的 Istio 注释。
gcloud container fleet mesh describe 命令的示例输出,其中为会员资格设置了条件 MODERNIZATION_INCOMPATIBLE_POD_ANNOTATION:
membershipStates:
projects/project_id/locations/global/memberships/membership-a:
servicemesh:
conditions:
- code: MODERNIZATION_INCOMPATIBLE_POD_ANNOTATION
details: 'Pod pod-a in namespace test-namespace: invalid annotations: ["status.sidecar.istio.io/port": failed to parse port - "invalid", port must be a number and should be in the range 1..65535]; unsupported annotations: ["ambient.istio.io/redirection"] .'
documentationLink: https://cloud.google.com/service-mesh/...
severity: WARNING
如需解决这些 pod 注释问题,请执行以下操作:
识别有问题的注解:检查状态条件的
details字段,找到不受支持或无效的注解键。查找具有问题注解键的所有 Pod。修正并验证:
- 修改 Deployment 或 Pod 的 YAML 规范,确保它们仅使用受支持的注释(所有其他注释均不受支持)。移除所有不受支持的注释,更正所有无效值,然后将更新后的 YAML 重新应用于集群。
- 更正所有 Pod 注释后,相应会员资格将不再显示
MODERNIZATION_INCOMPATIBLE_POD_ANNOTATION条件。
解决不兼容的配置
MODERNIZATION_INCOMPATIBLE_CONFIG 代码表示由于配置不兼容,集群无法现代化为 TRAFFIC_DIRECTOR 控制平面。这些不兼容问题可能源于:
- 使用不受支持的功能或字段或包含无效值的特定 Istio 自定义资源 (CR)。
- Istio MeshConfig 设置无效或不受支持。
- 超出可伸缩性限制。
- 使用不受支持的服务或命名空间注释。
gcloud container fleet mesh describe 命令的示例输出,其中为会员资格设置了条件 MODERNIZATION_INCOMPATIBLE_CONFIG:
membershipSpecs:
projects/project_id/locations/global/memberships/membership-a:
mesh:
management:MANAGEMENT_AUTOMATIC
membershipStates:
projects/project_id/locations/global/memberships/membership-a:
servicemesh:
conditions:
- code: MODERNIZATION_INCOMPATIBLE_CONFIG
details: 'One or more configs have warnings. Due to the following reason(s): Istio sidecar scale exceeds limit, MeshConfig "accessLogFile" is unsupported. Invalid Config Types: [Gateway, ServiceEntry], where more details are shown on individual config resources.See documentation link for more detail.'
documentationLink: https://cloud.google.com/service-mesh/...
severity: WARNING
如需解决这些配置问题,请执行以下操作:
分析条件详情:检查状态条件的
details字段。它会汇总各个错误,并找出存在配置问题的资源类型。对于所提供的详细信息示例,您需要解决规模和 MeshConfig 问题,并检查Gateway和ServiceEntry资源是否存在错误。识别并调查不兼容的资源:使用以下示例脚本列出未通过兼容性检查的 Istio 自定义资源 (CR)。此脚本仅作为示例提供;在集群中运行之前,请先检查并分析该脚本,确保其符合您的环境和运营要求。该脚本需要安装
kubectl和jq。输出内容包括每项资源在status.conditions下找到的具体错误详情(类型:ModernizationCompatible,状态:"False")。for resource in authorizationpolicies destinationrules envoyfilters gateways peerauthentications proxyconfigs requestauthentications serviceentries sidecars telemetries virtualservices wasmplugins workloadentries workloadgroups; do echo "--- Checking $resource ---" kubectl get $resource --all-namespaces -o json | \ jq -r '.items[] | select(.status.conditions != null and any(.status.conditions[]; .type == "ModernizationCompatible" and .status == "False")) | {"kind": .kind, "name": .metadata.name, "namespace": .metadata.namespace, "message": [.status.conditions[] | select(.type == "ModernizationCompatible").message]}' done输出示例:
--- Checking serviceentries --- { "kind": "ServiceEntry", "name": "demo-service-entry", "namespace": "se", "message": [ "WARNING: unsupported resolution type: DNS_ROUND_ROBIN" ] } .. --- Checking workloadentries --- { "kind": "WorkloadEntry", "name": "demo-we", "namespace": "default", "message": [ "WARNING: This API is not supported" ] }修复并应用配置:修改 YAML,移除不受支持的字段或将无效值替换为兼容的值。如需帮助,请参阅托管式 Cloud Service Mesh 支持的功能和不受支持的 Istio API 文档。(例如,在提供的示例中,将
ServiceEntry分辨率从DNS_ROUND_ROBIN更新为DNS)。验证修复:应用修复后,请等待最多 24 小时,以便定期检查更新状态。
固定资源上的
ModernizationCompatible条件应更改为状态:"True"。使用以下命令检查资源的状态:kubectl get resource name -n namespace -o yaml输出示例:
status: conditions: - lastTransitionTime: "2026-06-05T06:12:52.219963391Z" message: Resource is compatible for modernization reason: Compatible status: "True" type: ModernizationCompatible重新运行
gcloud container fleet mesh describe命令。所有相关问题解决后,相应会员方案将不再显示MODERNIZATION_INCOMPATIBLE_CONFIG状态。
解决不兼容的舰队规模
MODERNIZATION_INCOMPATIBLE_FLEET_SCALE 代码表示,由于整个舰队的资源规模超出了现代化改造支持的限制,因此无法将舰队现代化改造为 TRAFFIC_DIRECTOR 控制平面。
在此阶段,我们支持在以下限制范围内实现车队的现代化:
- 整个舰队最多 1,500 个数据平面端点(代理)。
- 整个舰队最多可有 200 个 Cloud Service Mesh 服务。