使用 Istio API 支持的功能(托管式控制平面)
本页面介绍了使用 TRAFFIC_DIRECTOR 或 ISTIOD 作为控制平面的 Cloud Service Mesh 支持的功能和限制,以及每种实现之间的差异。请注意,您无法选择这些选项。ISTIOD 实现仅适用于现有用户。新安装尽可能使用 TRAFFIC_DIRECTOR 实现。
如需查看受托管式 Cloud Service Mesh (TRAFFIC_DIRECTOR) 支持的 Istio 和 Google Cloud API 的列表,请参阅托管式 Cloud Service Mesh 中的 API 支持。
如需查看集群内控制平面的 Cloud Service Mesh 支持的功能列表,请参阅使用 Istio API(集群内 istiod 控制平面)。
如果您不确定自己使用的是哪个 Cloud Service Mesh 控制平面,可以按照识别控制平面实现中的说明检查您的控制平面实现。
限制
存在以下限制:
- GKE 集群必须位于受支持的区域之一中。
- GKE 版本必须是受支持的版本。
- 仅支持在环境中列出的平台。
- 不支持使用
hostNetwork: true运行的 Pod。 - 不得在同时具有 OSS Istio 集群内部署或集群内 Cloud Service Mesh 控制平面的集群中部署托管式 Cloud Service Mesh。
- 不支持更改发布渠道。
- 不支持从具有
asmcli的托管式 Cloud Service Mesh 迁移到具有 Fleet API 的 Cloud Service Mesh。同样,不支持将具有 Fleet API 的托管式 Cloud Service Mesh 从--management manual配置为--management automatic。 - 仅支持使用 Canary 集群迁移策略从集群内 Cloud Service Mesh 进行迁移。
- 只有使用 Mesh CA 或 Certificate Authority Service 且属于受支持版本的集群内 Cloud Service Mesh 版本才支持迁移和升级。使用 Istio CA(以前称为 Citadel)进行的安装必须先迁移到 Mesh CA。
- 本指南概述了扩缩限制
- 仅支持多集群的多主要部署选项:多集群的主要远程部署选项不受支持。
- 不支持
istioctl ps。您可以改用问题排查中所述的gcloud beta container fleet mesh debug命令。 不受支持的 API:
WasmPluginAPIIstioOperatorAPIKubernetes IngressAPI
如需详细了解所有 Istio API 的字段级支持和限制,请参阅 Cloud Service Mesh API 支持。
您可以在不订阅 GKE Enterprise 的情况下使用托管式控制平面,但 Google Cloud 控制台中的某些界面元素和功能仅限 GKE Enterprise 订阅者使用。如需了解订阅者和非订阅者可以使用的内容,请参阅 GKE Enterprise 和 Cloud Service Mesh 界面差异。
在代管式控制平面的预配过程中,与所选渠道对应的 Istio CRD 将安装在指定集群中。如果集群中已有 Istio CRD,则它们将会被覆盖。
托管式 Cloud Service Mesh 仅支持默认 DNS 域名
.cluster.local。托管式 Cloud Service Mesh 的新安装仅使用 Envoy 提取 JWKS,除非该舰队包含未启用此行为的其他集群。这等同于
PILOT_JWT_ENABLE_REMOTE_JWKS=envoyIstio 选项。与没有 VPCSC_GA_SUPPORTED 条件(见下文)的安装相比,您可能需要为ServiceEntry和DestinationRule配置进行额外配置。有关示例,请查看requestauthn-with-se.yaml.tmpl。您可以通过确定控制平面是否支持 VPC Service Controls(即显示 VPCSC_GA_SUPPORTED 条件),来确定当前操作模式是否等同于PILOT_JWT_ENABLE_REMOTE_JWKS=envoy。只有不包含其他边车(Cloud Service Mesh 边车除外)的工作负载才支持托管式数据平面。
控制平面差异
受支持的功能在 ISTIOD 和 TRAFFIC_DIRECTOR 控制平面实现之间存在差异。如需检查您使用的实现,请参阅识别控制平面实现。
- - 表示该功能可用且默认处于启用状态。
- † - 表示功能 API 在不同平台之间可能存在差异。
- – 表示平台支持该功能且可启用,如启用可选功能或功能表中链接的功能指南中所述。
- - 表示该功能不可用或不受支持。
默认功能和可选功能完全受 Google Cloud支持团队的支持。该表中未明确列出的功能会得到全力支持。
确定控制平面实现的因素
当您在舰队中首次配置托管式 Cloud Service Mesh 时,我们会确定要使用哪个控制平面实现。在该舰队中,所有用于配置托管式 Cloud Service Mesh 的集群都使用相同的实现。
加入托管式 Cloud Service Mesh 的新舰队会收到 TRAFFIC_DIRECTOR 控制平面实现,但存在以下几种例外情况:
- 如果您是现有的托管式 Cloud Service Mesh 用户,则在将同一 Google Cloud组织中的新舰队加入托管式 Cloud Service Mesh 中时,至少在 2024 年 6 月 30 日之前,您会收到
ISTIOD控制平面实现。 如果您是这类用户,可以与支持团队联系,以便微调此行为。 如果用户的现有使用情况与TRAFFIC_DIRECTOR实现不兼容,则在 2024 年 9 月 8 日之前,用户将继续收到ISTIOD实现。(这些用户收到了服务通告。) - 如果在您配置托管式 Cloud Service Mesh 时,您的舰队中的任何 GKE on Google Cloud 集群都包含集群内 Cloud Service Mesh 控制平面,您将收到
ISTIOD控制平面实现。 - 如果您的舰队中的任何集群都使用 GKE Sandbox,在您配置托管式 Cloud Service Mesh 时,将收到
ISTIOD控制平面实现。
代管式控制平面支持的功能
安装、升级和回滚
| 功能 | 托管式 (TD) | 托管式 (istiod) 已弃用 |
|---|---|---|
| 使用舰队功能 API 在 GKE 集群上安装 | ||
| 从使用 Mesh CA 的 ASM 1.9 版升级 | ||
| 来自 1.9 之前 Cloud Service Mesh 版本的直接(跳过层级)升级(请参阅间接升级的说明) | ||
| 从 Istio OSS 直接升级(跳过层级)(请参阅间接升级的说明) | ||
| 从 Istio-on-GKE 插件直接升级(跳过层级)(请参阅间接升级的说明) | ||
| 启用可选功能 |
环境
| 功能 | 托管式 (TD) | 托管式 (istiod) 已弃用 |
|---|---|---|
| 当前在发布渠道中提供的 GKE 版本,位于其中一个受支持的区域 | ||
| 当前在发布渠道中提供的 GKE 版本,位于其中一个受支持的区域,GKE Autopilot 集群 | ||
| Google Cloud 以外的环境(本地 GKE Enterprise、其他公有云上的 GKE Enterprise、Amazon EKS、Microsoft AKS 或其他 Kubernetes 集群) |
扩缩
请参阅“可扩缩性限制”页面
平台环境
| 功能 | 托管式 (TD) | 托管式 (istiod) 已弃用 |
|---|---|---|
| 单网络 | ||
| 多网络 | ||
| 单项目 | ||
| 使用共享 VPC 的多项目 |
多集群部署
| 功能 | 托管式 (TD) | 托管式 (istiod) 已弃用 |
|---|---|---|
| 多主模式 | ||
| 主远程 | ||
| 使用声明式 API 进行多集群端点发现 | ||
| 使用远程 Secret 进行多集群端点发现 | ||
| 使用声明式 API 和简单拓扑进行多集群端点发现 |
有关术语的注意事项
- 多主配置意味着必须在所有集群中复制配置。
- 主远程配置意味着单个集群包含配置,并视为可靠来源。
- Cloud Service Mesh 会根据通用连接使用简化的网络定义。如果工作负载实例无需使用网关就可以直接通信,则它们位于同一网络上。
- 多集群端点发现的简单拓扑意味着,舰队中的每个集群要么参与端点发现,要么不参与端点发现。不受支持的复杂拓扑包括:(a) 单向端点发现(例如,集群 A 可以发现集群 B 中的端点,但反之则不行)和 (b) 分散的端点发现网络(例如,集群 A 和 B 可以发现彼此的端点,集群 C 和 D 可以发现彼此的端点,但 A/B 和 C/D 无法发现彼此的端点)。
基础映像
| 功能 | 托管式 (TD) | 托管式 (istiod) 已弃用 |
|---|---|---|
| Distroless 代理映像 | † |
† Istio 发布 default、debug 和 distroless 代理映像。对于使用托管式 (TRAFFIC_DIRECTOR) 控制平面的 Cloud Service Mesh:直接加入的集群默认使用 distroless,且无法更改。迁移后的集群默认使用 default 映像,并且可以使用 MeshConfig 或 Pod 注解选择启用 distroless。不支持对其他图片类型 (debug) 进行替换。
请注意,distroless 映像具有最小的二进制文件,因此您无法执行 bash 或 curl 等常规命令,因为它们不在 distroless 映像中。 不过,您可以使用临时容器附加到正在运行的工作负载 Pod,以便检查 Pod 并运行自定义命令。例如,请参阅收集 Cloud Service Mesh 日志。
安全
VPC Service Controls
| 功能 | 托管式 (TD) | 托管式 (istiod) 已弃用 |
|---|---|---|
| VPC Service Controls |
证书分发和轮替机制
| 功能 | 托管式 (TD) | 托管式 (istiod) 已弃用 |
|---|---|---|
| 工作负载证书管理 | ||
| 入站流量和出站流量网关的外部证书管理。 |
证书授权机构 (CA) 支持
| 功能 | 托管式 (TD) | 托管式 (istiod) 已弃用 |
|---|---|---|
| Cloud Service Mesh 证书授权机构 | ||
| Certificate Authority Service | ||
| Istio CA | ||
| 与自定义 CA 集成 |
安全功能
除了支持 Istio 安全功能之外,Cloud Service Mesh 还提供了更多功能来帮助您保护应用。
| 功能 | 托管式 (TD) | 托管式 (istiod) 已弃用 |
|---|---|---|
| IAP 集成 | ||
| 最终用户身份验证 | ||
| 试运行模式 | ||
| 拒绝日志记录 | ||
| 审核政策(不支持) |
授权政策
| 功能 | 托管式 (TD) | 托管式 (istiod) 已弃用 |
|---|---|---|
| 授权 v1beta1 政策 | ||
| CUSTOM 授权政策 |
对等身份验证
| 功能 | 托管式 (TD) | 托管式 (istiod) 已弃用 |
|---|---|---|
| 自动 mTLS | ||
| mTLS PERMISSIVE 模式 | ||
| mTLS STRICT 模式 | * | * |
| mTLS DISABLE 模式 |
注意:虽然 PeerAuthentication API 不支持 TRAFFIC_DIRECTOR 控制平面实现的 DISABLE 模式,但您可以使用 DestinationRule API 作为解决方法,为特定工作负载停用 mTLS。如需了解详情,请参阅为受管理的 CSM 停用 mTLS。
请求身份验证
| 功能 | 托管式 (TD) | 托管式 (istiod) 已弃用 |
|---|---|---|
| JWT 身份验证(备注 1) | ||
| 基于 JWT 声明的路由 | ||
| JWT 将声明复制到标头 |
注意:
- 第三方 JWT 默认处于启用状态。
- 在定义 RequestAuthentication API 时,在 JWKSURI 中添加完整的 fqdn/主机名。
- 托管式控制平面会在指定 JWKS URI 时强制 Envoy 提取 JWKS。
- 使用
TRAFFIC_DIRECTOR控制平面实现时,内嵌 JWKS 中不允许使用 AES CBC 算法 A128CBC-HS256、A192CBC-HS384 和 A256CBC-HS512。
Telemetry
指标
| 功能 | 托管式 (TD) | 托管式 (istiod) 已弃用 |
|---|---|---|
| Cloud Monitoring(HTTP 代理中指标) | ||
| Cloud Monitoring(TCP 代理中指标) | ||
| Prometheus 指标导出到 Grafana(仅限 Envoy 指标) | * | * |
| 将 Prometheus 指标导出到 Kiali | ||
| Google Cloud Managed Service for Prometheus,不包括 Cloud Service Mesh 信息中心 | * | * |
| Istio Telemetry API | † | |
| 自定义适配器/后端,出入进程 | ||
| 任意遥测和日志记录后端 |
† TRAFFIC_DIRECTOR 控制平面支持用于配置访问日志和跟踪记录的 Istio 遥测 API 子集。
代理请求日志记录
| 功能 | 托管式 (TD) | 托管式 (istiod) 已弃用 |
|---|---|---|
| 流量日志 | ||
| 访问日志 | * | * |
跟踪
| 功能 | 托管式 (TD) | 托管式 (istiod) 已弃用 |
|---|---|---|
| Cloud Trace | * | * |
| Jaeger 跟踪(允许使用客户管理的 Jaeger) | 兼容 | |
| Zipkin 跟踪(允许使用客户管理的 Zipkin) | 兼容 |
网络
流量拦截和重定向机制
| 功能 | 托管式 (TD) | 托管式 (istiod) 已弃用 |
|---|---|---|
通过具有 CAP_NET_ADMIN 的 init 容器来使用 iptables |
† | |
| Istio 容器网络接口 (CNI) | ||
| 白盒 Sidecar |
† 我们强烈建议您使用容器网络接口 (CNI),而不是 init 容器。
协议支持
| 功能 | 托管式 (TD) | 托管式 (istiod) 已弃用 |
|---|---|---|
| IPv4 | ||
| HTTP/1.1 | ||
| HTTP/2 | ||
| TCP 字节流(备注 1) | ||
| gRPC | ||
| IPv6 | † |
注意:
- 虽然 TCP 是受支持的网络协议,并且会收集 TCP 指标,但不会报告这些指标。系统仅针对 Google Cloud 控制台中的 HTTP 服务显示指标。
- 不支持将配置有第 7 层功能的服务用于以下协议:WebSocket、MongoDB、Redis、MySQL、Kafka、Cassandra、RabbitMQ、Cloud SQL。您可以通过 TCP 字节流支持来使协议正常工作。如果 TCP 字节流无法支持协议(例如,Kafka 在特定于协议的回复中发送重定向地址,并且此重定向与 Cloud Service Mesh 的路由逻辑不兼容),则协议不受支持。 虽然可以使用 Mongo、MySQL 和 Redis 协议创建网关端口,但网格会将生成的流量视为标准 TCP,缺乏特定于协议的处理。
- † 在无代理 gRPC 中,IPv6 双栈功能仅在 C++ 和 Python 中的 gRPC 1.66.1 或更高版本、gRPC Go v1.71 和 gRPC Node.js v1.12 中受支持。 如果您尝试使用不支持双栈的 gRPC 版本配置双栈功能,客户端将仅使用 Traffic Director 发送的第一个地址。
Envoy 部署
| 功能 | 托管式 (TD) | 托管式 (istiod) 已弃用 |
|---|---|---|
| Sidecar | ||
| 入站流量网关 | ||
| 直接从 Sidecar 出站 | ||
| 使用出站流量网关出站 | * | * |
CRD 支持
| 功能 | 托管式 (TD) | 托管式 (istiod) 已弃用 |
|---|---|---|
| Sidecar 资源 | ||
| 服务条目资源 | ||
| 百分比、故障注入、路径匹配、重定向、重试、重写、超时、重试、镜像、标头操纵和 CORS 路由规则 | ||
| “WasmPlugin”API | ||
| Istio Operator |
Istio 入站流量网关的负载均衡器
| 功能 | 托管式 (TD) | 托管式 (istiod) 已弃用 |
|---|---|---|
| 第三方外部负载均衡器 | ||
| Google Cloud 内部负载均衡器 | * | * |
服务网格云网关
| 功能 | 托管式 (TD) | 托管式 (istiod) 已弃用 |
|---|---|---|
| 服务网格云网关 |
Kubernetes Gateway API
| 功能 | 托管式 (TD) | 托管式 (istiod) 已弃用 |
|---|---|---|
| Kubernetes Gateway API |
负载均衡政策
| 功能 | 托管式 (TD) | 托管式 (istiod) 已弃用 |
|---|---|---|
| 轮循机制 | ||
| 最少连接 | ||
| 随机 | ||
| 直通式 | ||
| 一致的哈希 | ||
| 市行政区 | ||
| GCPTrafficDistributionPolicy | ||
| GCPBackendPolicy |
负载均衡模式
| 功能 | 托管式 (TD) | 托管式 (istiod) 已弃用 |
|---|---|---|
| RATE | ||
| 利用率 | ||
| CUSTOM_METRICS | ||
| IN-FLIGHT |
如需详细了解均衡模式,请参阅后端服务概览。
服务条目
| 功能 | 托管式 (TD) | 托管式 (istiod) 已弃用 |
|---|---|---|
| ServiceEntry v1beta1 | † |
† TRAFFIC_DIRECTOR 控制平面实现支持 ServiceEntry 字段的子集。如需查看受支持的字段、不受支持的字段和配置限制的完整列表,请参阅 API 支持:ServiceEntry。
目标规则
| 功能 | 托管式 (TD) | 托管式 (istiod) 已弃用 |
|---|---|---|
| DestinationRule v1beta1 | † |
† TRAFFIC_DIRECTOR 控制平面实现要求定义子集的目标规则与 Kubernetes 服务或 ServiceEntry 位于同一命名空间和集群中。如需查看支持的字段、不支持的字段和配置限制的完整列表,请参阅 API 支持:DestinationRule。
Sidecar
| 功能 | 托管式 (TD) | 托管式 (istiod) 已弃用 |
|---|---|---|
| Sidecar v1beta1 | † |
† TRAFFIC_DIRECTOR 控制平面实现支持 Sidecar 字段的子集。如需查看支持的字段、不支持的字段和配置限制的完整列表,请参阅 API 支持:边车。
DNS 代理
| 功能 | 托管式 (TD) | 托管式 (istiod) 已弃用 |
|---|---|---|
跨集群的 Service 域名解析 |
† | |
集群中 ServiceEntry 的域名解析 |
† | |
无头 Service 的域名解析 |
||
| 地址自动分配 | † |
† 需要使用 1.21.5-asm.39 或更高版本的边车。
EnvoyFilter
| 功能 | 托管式 (TD) | 托管式 (istiod) 已弃用 |
|---|---|---|
| EnvoyFilter v1alpha3 | † |
† 如需了解支持的字段和可配置的扩展程序,请参阅数据平面可扩展性页面
MeshConfig
| 功能 | 托管式 (TD) | 托管式 (istiod) 已弃用 |
|---|---|---|
| DiscoverySelectors | ||
| clusterLocal | ||
| LocalityLB | † | |
| ExtensionProviders | ||
| CACert | ||
| ImageType - distroless | † | |
| OutboundTrafficPolicy | ||
| defaultProviders.accessLogging | ||
| defaultProviders.tracing | ||
| defaultConfig.tracing.stackdriver | ||
| accessLogFile | † | |
| accessLogFormat | † | |
| accessLogEncoding | † |
† 如需详细了解配置行为,请参阅 Distroless 代理映像。
† 如需详细了解配置行为和限制,请参阅配置本地性负载均衡。
† 如需详细了解配置行为和限制,请参阅自定义 Envoy 访问日志格式和编码。
ProxyConfig
| 功能 | 托管式 (TD) | 托管式 (istiod) 已弃用 |
|---|---|---|
| HTTP/1.0 支持 (ISTIO_META_NETWORK) | ||
| 映像选择(distroless 或基础映像) | ||
| Kubernetes 原生边车 (ENABLE_NATIVE_SIDECARS) |
区域
GKE 集群必须位于以下区域之一中或以下区域内的任何可用区中。
| 区域 | 位置 |
|---|---|
africa-south1 |
约翰内斯堡 |
asia-east1 |
台湾 |
asia-east2 |
香港 |
asia-northeast1 |
日本东京 |
asia-northeast2 |
日本大阪 |
asia-northeast3 |
韩国 |
asia-south1 |
印度孟买 |
asia-south2 |
德里(印度) |
asia-southeast1 |
新加坡 |
asia-southeast2 |
雅加达 |
australia-southeast1 |
澳大利亚悉尼 |
australia-southeast2 |
澳大利亚墨尔本 |
europe-central2 |
波兰 |
europe-north1 |
芬兰 |
europe-north2 |
斯德哥尔摩 |
europe-southwest1 |
西班牙 |
europe-west1 |
比利时 |
europe-west2 |
英格兰 |
europe-west3 |
德国法兰克福 |
europe-west4 |
荷兰 |
europe-west6 |
瑞士 |
europe-west8 |
意大利米兰 |
europe-west9 |
法国 |
europe-west10 |
德国柏林 |
europe-west12 |
意大利都灵 |
me-central1 |
多哈 |
me-central2 |
沙特阿拉伯达曼 |
me-west1 |
特拉维夫 |
northamerica-northeast1 |
加拿大蒙特利尔 |
northamerica-northeast2 |
加拿大多伦多 |
northamerica-south1 |
墨西哥 |
southamerica-east1 |
巴西 |
southamerica-west1 |
智利 |
us-central1 |
艾奥瓦 |
us-east1 |
南卡罗来纳 |
us-east4 |
北弗吉尼亚 |
us-east5 |
俄亥俄州 |
us-south1 |
达拉斯 |
us-west1 |
俄勒冈 |
us-west2 |
洛杉矶 |
us-west3 |
盐湖城 |
us-west4 |
拉斯维加斯 |
界面
| 功能 | 托管式 (TD) | 托管式 (istiod) 已弃用 |
|---|---|---|
| Google Cloud 控制台中的 Cloud Service Mesh 信息中心 | ||
| Cloud Monitoring | ||
| Cloud Logging |
工具
| 功能 | 托管式 (TD) | 托管式 (istiod) 已弃用 |
|---|---|---|
gcloud beta container fleet mesh debug 工具 |