Istio 是当前生产环境应用最广泛的服务网格(Service Mesh)开源平台,由 Google、IBM、Lyft 联合发起,现为 CNCF 毕业项目。它解决的核心问题是:当微服务数量增长到几十上百个,服务间调用的重试、超时、熔断、灰度发布、流量加密、访问控制和链路追踪等横切关注点(cross-cutting concerns,即与业务逻辑无关、需要全局统一处理的系统性问题)会散落在每个服务的代码里,导致重复实现、难以统一治理。Istio 通过在每个 Pod 旁注入 Envoy 代理(sidecar,即与业务容器同 Pod 运行的辅助代理容器),将上述能力从业务代码中剥离到数据面,由独立控制面统一管控,实现流量的透明治理。 本篇攻略基于 Istio 官方文档(istio.io)整理,覆盖安装配置、Bookinfo 快速上手、流量管理/安全/可观测性核心能力、生产部署与运维,以及版本演进与选型对比,目标是让读者按步骤操作即可完成从零到生产可用的落地。

岗位关联

掌握 Istio 是云原生工程师和 SRE 的核心竞争力——服务网格是 Kubernetes 之上流量治理、零信任安全与统一可观测性的事实标准,熟练使用 Istio 意味着你能独立设计与运维生产级微服务基础设施。

目录
  1. 为什么需要 Istio:微服务通信治理之痛 → 透明流量管控
  2. 安装与环境配置:4 步就绪
  3. 快速上手:30 分钟跑通 Bookinfo 示例
  4. 核心能力详解:4 大支柱
  5. 生产部署与监控:从上线到运维
  6. 版本迭代
  7. AI 应用场景
  8. 常见误区
  9. 面试题
  10. 参考来源
工具类型
Service Mesh 服务网格开源平台
开发商
Google、IBM、Lyft 联合发起,CNCF 毕业项目
开源协议
Apache 2.0(可商用)
GitHub Stars
无
主要语言
Go(控制面)、C++(数据面基于 Envoy)
当前版本
1.25.x(截至 2025-02 正式发布)
安装方式
istioctl / Helm / Operator
下载地址
官方文档
上手难度
★★★★☆(较难)
适合人群
平台工程师、SRE、微服务架构师、K8s 开发者
同类工具
Linkerd、HashiCorp Consul、AWS App Mesh

速览卡是工具类内容的固定首屏模块:30 秒判断「这工具是什么、能不能商用、适不适合我」。

为什么需要 Istio:微服务通信治理之痛 → 透明流量管控

传统微服务架构中,服务间通信的可靠性问题(超时重试、熔断降级、流量镜像)、发布策略(金丝雀、蓝绿、灰度百分比)、安全管控(传输加密、服务身份认证、细粒度授权)和可观测性(HTTP 指标、分布式追踪、访问日志)都需要在每个服务中分别实现。这导致三类典型问题:一是重复劳动,每个语言栈(Java、Go、Python)都要各自写一套重试和熔断库;二是策略不一致,不同团队对超时时间、重试次数的配置各写各的,线上故障时难以统一排查;三是侵入性强,治理代码与业务代码耦合,升级治理逻辑必须重新发布业务服务。

Istio 的解决思路是把上述能力下沉到基础设施层。它在每个业务 Pod 中注入一个 Envoy sidecar 代理,业务容器所有进出流量都经由此代理转发;控制面组件(istiod)通过 Kubernetes API watch 服务与 Pod 变化,将 VirtualService、DestinationRule 等配置下发给所有 sidecar,统一执行流量规则。业务代码保持零侵入,治理逻辑升级只需改 CRD 配置并下发,无需重新发布服务。

与 Linkerd 相比,Istio 功能覆盖更全面(流量管理、安全、可观测性、多集群能力一体化),但默认配置下资源开销和学习成本更高;与自研网关或 API 网关方案相比,Istio 的优势在于东西向流量(服务间内部调用)的治理能力——API 网关只能管住南北向入口流量,管不了服务间网状调用。

安装与环境配置:4 步就绪

步骤一·安装 istioctl 工具。istioctl 是官方命令行工具,下载二进制并加入 PATH。

步骤二·安装控制面与数据面。使用 default profile 安装,包含 istiod 控制面组件和 ingress/egress 网关。

步骤三·启用自动注入。给目标命名空间打上 istio-injection=enabled 标签,此后新创建的 Pod 会自动注入 sidecar。

步骤四·验证安装。检查 istiod 与各网关 Pod 运行状态,并确认 istioctl 与集群版本兼容。

安装前需确认 Kubernetes 版本符合 Istio 支持矩阵(支持矩阵即各 Istio 版本兼容的 K8s 版本范围,见官方文档的 Supported Releases 页面),例如 Istio 1.25 支持 Kubernetes 1.31/1.32。

bash14 行
# 1. 下载并安装 istioctl(macOS/Linux)curl -L https://istio.io/downloadIstio | sh -cd istio-1.25.2export PATH=$PWD/bin:$PATH # 2. 安装 Istio(default profile 含 ingress/egress gateway)istioctl install --set profile=default -y # 3. 为 default 命名空间启用 sidecar 自动注入kubectl label namespace default istio-injection=enabled # 4. 验证istioctl versionkubectl get pods -n istio-system

快速上手:30 分钟跑通 Bookinfo 示例

Bookinfo 是 Istio 官方示例应用,由 productpage、details、reviews、ratings 四个服务组成,reviews 有 v1/v2/v3 三个版本。最小可用流程的思路是:先部署应用与 sidecar 注入,再创建 Gateway 和 VirtualService 把产品页面暴露到集群外部,最后通过 VirtualService 验证流量路由规则。

操作步骤如下:

1. 部署 Bookinfo 应用:kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml,此时 default 命名空间已开启自动注入,每个 Pod 会带 2 个容器(业务容器 + istio-proxy)。

2. 定义入口网关:kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml,此文件创建 Gateway 和匹配 host 的 VirtualService。

3. 获取访问入口:kubectl get gateway 查看网关地址,通过 http://{GATEWAY_IP}/productpage 访问。

4. 配置流量路由:应用以下 VirtualService,将对 reviews 的请求按权重 50/50 分流到 v1 和 v3。

刷新 productpage 页面并观察 Reviews 徽标颜色变化即可验证分流是否生效。进阶练习可改用 header 匹配(如 end-user: jason → v2)实现基于请求头的灰度。注意:DestinationRule 需先定义 subset(子集,即按 label 区分同一服务的不同版本组),VirtualService 才能按 subset 分发流量。

bash4 行
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yamlkubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yamlkubectl get gatewaykubectl get virtualservice
yaml18 行
# 金丝雀发布:reviews 流量 50% → v1、50% → v3apiVersion: networking.istio.io/v1kind: VirtualServicemetadata:  name: reviews-routespec:  hosts:  - reviews  http:  - route:    - destination:        host: reviews        subset: v1      weight: 50    - destination:        host: reviews        subset: v3      weight: 50

核心能力详解:4 大支柱

支柱一·流量管理。流量管理是 Istio 最核心的能力,由四类 CRD 协作实现:VirtualService(虚拟服务)定义路由规则——按 header、URI、权重将请求分发到目标服务的不同版本;DestinationRule(目标规则)定义流量到达目标后的策略——负载均衡算法、连接池大小、TLS 配置,以及 subset 子集划分;Gateway 定义网格边缘的南北向流量入口(Ingress)与出口(Egress);ServiceEntry 把网格外服务(如外部 API、遗留系统)注册进网格,使其可被统一治理。四者配合可实现金丝雀发布、故障注入(延迟/中断模拟)、超时重试、熔断等场景,且全部以声明式 CRD 下发,运行时动态生效。

支柱二·零信任安全。Istio 安全模型由三层构成:身份与加密层——istiod 为每个服务颁发 SPIFFE 格式的身份证书,sidecar 间通信默认启用双向 TLS(mTLS,即通信双方互相验证证书的加密机制),传输加密对业务代码完全透明;认证层——PeerAuthentication 定义服务间 mTLS 模式(STRICT/PERMISSIVE/DISABLE),RequestAuthentication 校验终端用户 JWT 令牌;授权层——AuthorizationPolicy 以来源(source)、请求属性(request)、操作(operation)为条件定义允许/拒绝规则。启用严格 mTLS 后,即使集群网络被渗透,攻击者也无法以明文窃听服务通信。

支柱三·可观测性。Istio 数据面自动生成三类遥测数据:指标(Metrics)——HTTP/HTTP2/gRPC 的请求量、延迟、错误率,基于 Prometheus 协议暴露,可接入 Prometheus + Grafana 或云厂商监控;分布式追踪(Distributed Tracing)——通过 sidecar 自动注入 trace 头(trace header,即贯穿一次请求全链路的唯一标识),与 Jaeger、Zipkin、SkyWalking 集成,无需业务埋点即可查看跨服务调用链;访问日志(Access Log)——每条请求的结构化日志,含来源、目标、响应码、延迟等字段。Kiali 是 Istio 官方的控制台,可可视化服务拓扑、查看健康状态并调试流量配置。业务代码无需任何埋点改造,这是 Istio 可观测性区别于应用层 APM 的关键差异。

支柱四·多集群与多网络。Istio 支持将多个 Kubernetes 集群纳入同一网格统一治理,适用于多云容灾、地域就近访问和隔离故障域场景。多集群有三种部署模型:多主(multi-primary,多个集群各自运行控制面并互为备份)、主-从(primary-remote,一个主集群控制面管理多个从集群)、外部控制面(external control plane,控制面独立于数据面集群)。跨集群流量可通过 ServiceEntry 或 DNS 代理实现,配合 failover(故障转移)策略可在集群不可用时自动切换流量。多网络(multi-network)场景(跨 VPC 或跨云厂商)需配置东西向网关(east-west gateway)打通网络。

生产部署与监控:从上线到运维

部署方式一·Helm 安装。生产环境推荐用 Helm Chart 管理 Istio 生命周期,便于版本回滚与配置模板化。先部署 istio-base(CRD 与基础资源),再部署 istiod 控制面,最后按需部署 gateway 组件。相比 istioctl 直装,Helm 方式可以将 Istio 纳入既有的 GitOps 发布流水线(GitOps 即以 Git 仓库为配置唯一来源的持续交付模式),用 CI/CD 工具审计变更。

部署方式二·金丝雀升级。Istio 控制面支持金丝雀升级:同时部署新旧两个版本 istiod,用 istioctl x upgrade revision 逐步迁移注入的 sidecar,观察业务指标无异常后再切换。升级前必须用 istioctl experimental analyze 检查 CRD 与配置兼容性,因为 Istio 会在次版本中移除实验 API(如 v1alpha1 标记部分的 VirtualService 字段),跨大版本升级(如 1.24 → 1.25)前应逐版本升级而非跳跃。

可观测性。生产网格至少需要四类监控:控制面健康——监听 istiod 的 Pod 指标、leader election 状态与版本一致性;数据面健康——通过 istioctl proxy-status 查看 sidecar 与 istiod 的配置同步状态,排查配置卡在 PUSH 队列的问题;业务 SLO——基于 Istio 生成的 RED 指标(Rate 请求率、Errors 错误率、Duration 延迟)配置告警,如 P99 延迟、5xx 比例;sidecar 资源水位——每个 Pod 多出的 istio-proxy 容器会占用 CPU 与内存,需监控其资源使用并设置 limits,防止节点内存压力。

<p class="para-label">避坑清单:</p>

<ul class="dash-list"><li>注入不生效:检查命名空间是否打了 istio-injection=enabled 标签,且注意该标签只对新建 Pod 生效,已有 Pod 需滚动重启(kubectl rollout restart);部分集群需确认 webhook 未被阻断</li><li>出站流量默认放行:meshConfig.outboundTrafficPolicy 默认 ALLOW_ANY(允许所有出站),外部服务调用失败时难以定位,生产应改为 REGISTRY_ONLY 并显式用 ServiceEntry 声明所依赖的外部服务</li><li>mTLS 配置冲突:PeerAuthentication 的 STRICT 模式与 DestinationRule 里的 TLS 设置互相覆盖可能导致流量中断,改动 mTLS 策略时应同时排查两类资源</li><li>多集群路由回环:多主部署中若 ServiceEntry 与集群本地服务定义重叠,可能产生流量路由回环,跨集群调度前先用 istioctl proxy-config endpoints 检查端点列表</li><li>忽略 sidecar 资源配额:默认 sidecar 无 CPU/memory limits,大流量下可能 OOM,应为 istio-proxy 显式设置 resources 与 concurrency 参数并配置 HPA 监控</li></ul>

bash4 行
helm repo add istio https://istio-release.storage.googleapis.com/chartshelm install istio-base istio/base -n istio-system --create-namespacehelm install istiod istio/istiod -n istio-system --waithelm install istio-ingressgateway istio/gateway -n istio-system
维度IstioLinkerdHashiCorp ConsulAWS App Mesh
定位全功能服务网格轻量级服务网格服务发现 + 网格一体化AWS 托管服务网格
数据面Envoy,功能全但资源开销较大自研 Rust 代理(linkerd2-proxy),内存占用约 Envoy 的 1/3Envoy(Consul 1.10+)自研 Envoy 变体
控制面istiod 单组件,CRD 声明式配置单一控制面,配置模型简化,无 VirtualServiceConsul Server,支持 Consul 原生与 K8s 注册中心同步AWS 控制面,与 ECS/EKS 深度绑定
学习曲线较陡,概念多(VirtualService/DestinationRule/Gateway)平缓,抽象层级少,文档精简中等,核心概念是 Service 与 Intentions中等,但需按 AWS 生态方式理解
生态集成Kubernetes 原生、多集群/多网络、可观测生态丰富K8s 为主,多集群支持较有限支持 K8s、VM、Consul 注册的多种工作负载深度绑定 ECS/EKS/EC2,不支持非 AWS 集群
生产部署istioctl/Helm/Operator,金丝雀升级机制完善Helm 一键安装,升级简单依赖 Consul 集群自身的运维AWS 托管,开箱即用但字段锁定
LicenseApache 2.0Apache 2.0Business Source License(部分功能商用受限)商业托管,按流量计费
适合谁需要高级流量治理+零信任+多云多集群的大型团队追求轻量、低运维成本的中小 K8s 团队已有 Consul 体系、需统一服务发现与网格的团队全栈 AWS 用户,希望托管的运维团队

选型建议:追求功能完整性与生产级多集群治理选 Istio,它是唯一同时覆盖流量管理、安全、可观测性且支持多网络异构场景的成熟方案;团队小、只想解决 mTLS 与基础可观测性,选 Linkerd 成本更低;已重度使用 Consul 或需跨 K8s/VM 混合工作负载,选 Consul;业务全部在 AWS 且不愿自运维控制面,选 App Mesh,但注意跨云扩展会受限。

版本迭代

Istio 版本演进主线是从“组件繁多”走向“单控制面 + 可扩展数据面”。1.5 弃用 Mixer 引入 Telemetry v2,1.6 合并为 istiod 单组件,1.10 开始逐步清理实验 API 并强化安全基线,1.18 起把 Kubernetes Gateway API 定位为主要流量配置入口,1.21+ 持续优化性能与 ambient mesh(无 sidecar 的数据面新模式)。(截至训练数据,可能已有更新版本)

版本时间变化提升
1.52020-03弃用 Mixer,引入 Telemetry v2移除独立 Mixer 组件,遥测直接在 Envoy 内生成,性能提升显著
1.62020-05控制面整合为 istiod 单组件Pilot、Citadel、Galley 合并为一个二进制,降低部署与运维复杂度
1.102021-03安全能力强化、稳定 API新增 WasmPlugin 规范,第三方 JWT 支持改进,部分 alpha API 转正
1.182023-06Kubernetes Gateway API 支持Gateway API 成为流量配置标准方式之一,废弃部分 v1alpha1 字段
1.212024-03性能优化与 ambient mesh 改进减少 sidecar 配置推送延迟,ambient mesh 功能增强,增强对 IPv4/IPv6 双栈支持
1.252025-02稳定支持 K8s 1.31/1.32、Gateway API v1.2默认启用更精简的 sidecar 配置,增强多集群安全策略,提升大规模集群稳定性
结论

Istio 的版本迭代呈现两个趋势——架构从重到轻(Mixer 移除、istiod 单进程、ambient mesh 降低数据面开销),配置从自定义 CRD 向 Kubernetes 标准 Gateway API 收敛。选型建议:生产环境优先使用距发布超过 2 个月的小版本(如 1.25.x 而非 1.25.0),跨版本升级遵循"N-1"策略(逐版本升级),不要跳跃 2 个以上次版本,避免实验 API 移除导致的配置失效。

AI 应用场景

微服务金丝雀发布与灰度治理

阶段:服务发布与流量编排

解决的问题:传统发布方式(滚动更新全量切换)在故障时影响面大、回滚慢。Istio 通过 VirtualService 权重路由,可将新版本流量从 5% 逐步提升至 100%,配合 DestinationRule 的连接池与熔断配置,在流量放大过程中自动隔离异常实例。

具体案例:某电商平台将订单服务的 v2 版本(重构了库存逻辑)以 10% 权重上线,用 Kiali 观察错误率与 P99 延迟,确认稳定后逐步提升到 100%,全程代码零改动,发布耗时从原 1 小时降至 20 分钟,期间无全量故障。

零信任服务间通信加密

阶段:安全策略实施

解决的问题:Kubernetes 集群内东西向流量(服务间调用)默认明文传输,一旦容器网络被横向渗透,攻击者可嗅探数据库密码、API Token 等敏感数据。Istio 自动为每个服务签发 SPIFFE 身份证书并启用 mTLS,无需业务代码改造。

具体案例:某金融科技公司在 200+ 微服务上启用 PeerAuthentication STRICT 模式后,通过实际抓包验证所有服务间流量均为 TLS 加密;配合 AuthorizationPolicy 按命名空间隔离租户,安全审计时能够回答“谁在什么条件下可以调用支付服务”。

全链路可观测性建设

阶段:监控与排障

解决的问题:微服务故障排查难——一次用户请求跨 5 个服务,任何一个环节慢都会影响整体体验,而业务日志中缺少统一的请求链路 ID。Istio sidecar 自动生成 RED 指标、注入分布式追踪头并输出结构化访问日志,三个数据源可互相关联。

具体案例:某在线教育团队接入 Istio 后,通过 Jaeger 定位到“直播服务 → 弹幕服务”的跨可用区调用延迟增加了 120ms 是问题根源;此前该问题排查耗时 2 天,接入后 30 分钟内定位。Istio 指标中 P99 延迟、每秒请求数和错误率成为团队发布评审的必要数据。

常见误区

误区Istio 有 Gateway 和 VirtualService,是不是可以直接替换 Kong、APISIX 这类 API 网关?

正解Istio Gateway 只是流量入口的“转发层”,负责将进入集群的流量按 host/port 路由到后端服务。它不具备 API 网关的完整能力:没有密钥管理与调用方应用层鉴权(只有 JWT 校验和 AuthorizationPolicy 的粗粒度授权),没有按消费者限流配额,没有 API 文档门户,没有请求/响应转换(如 XML→JSON)。生产架构通常是:API 网关(南北向,管外部用户与协议转换)位于 Istio Ingress Gateway 之前,Istio 管服务间流量与可观测性。

为何常见:两者都处理 HTTP 流量且名称都有 Gateway,且 Istio 官方示例里确实用 Gateway 暴露了产品页面,容易让人误以为它就是 API 网关。

误区只要给命名空间打了 istio-injection=enabled 标签,所有服务调用就会自动获得重试、熔断、负载均衡。

正解注入 sidecar 只是让流量代理就位,治理能力必须通过显式的 CRD 配置才能生效。侧如超时重试需要 VirtualService 中配置 retries/timeout,熔断需要 DestinationRule 配置 connectionPool 与 outlierDetection,负载均衡算法也需要在 DestinationRule 指定。未配置任何规则时,Istio 只提供基础的 TCP 转发和默认轮询负载均衡。

为何常见:Istio 宣传的“透明流量管理”被过度简化理解——透明的是流量拦截机制,而不是策略的自动生成。

误区Istio 小版本间兼容性有保证,直接从 1.20 升到 1.25 应该没问题。

正解Istio 官方明确要求逐次版本升级,且不支持跳过次版本。原因是多个 API 经历废弃周期——v1alpha1/v1beta1 的字段会标注为 deprecated 并在后续版本移除,1.20 的某些配置到 1.23 可能已无法解析。跨版本升级会让 istiod 拒绝加载无效 CRD,造成配置下发失败。正确路径是 1.20 → 1.21 → 1.22 → 1.25,每一步用 istioctl experimental analyze 预检。

为何常见:Kubernetes API 有较长的兼容窗口,用户将同样的假设迁移到了 Istio,忽略了它的废弃策略比 Kubernetes 激进得多。

误区给集群里所有命名空间都开启自动注入,反正 sidecar 很轻量。

正解每个注入的 istio-proxy 容器固定占用约 10-50MB 内存(不含流量缓冲),大流量下 CPU 占用与请求量成正比。全集群无差别注入会导致资源浪费和节点压力,且 Istio 控制面需要将配置推送到每个 sidecar,数千 Pod 时下发延迟明显增加。生产做法是按需注入:只为需要治理的命名空间开启,或用 sidecar.istio.io/inject: "true" Pod 注解精确控制。

为何常见:自动注入的开关在命名空间级别,只需打一个标签;官方文档也以 default 命名空间示例,容易让人误以为全开是推荐做法。

误区Istio 是 K8s 专属工具,VM/物理机上的服务用不了。

正解Istio 自 1.7 起支持虚拟机工作负载,通过 WorkloadGroup 和 WorkloadEntry 将 VM 注册进网格,由 istiod 下发证书和配置,VM 上的代理也可获得 mTLS 与监控能力。但 VM 接入配置复杂度明显高于 K8s——需要手动安装 sidecar 二进制、处理网络互通(通常需 VPN 或专线)、管理证书轮换。若 VM 比例高,可考虑用 Consul 这类原生支持混合负载的方案,而非 Istio。

为何常见:Istio 的社区文档和示例几乎全部基于 Kubernetes,官方快速开始页面也以 K8s 为前提,导致用户忽略了官方存在 VM 支持文档。

面试题

Q1. Istio 数据面的核心代理组件是什么?

单选题 · easy

  • A.Nginx
  • B.Envoy← 正确答案
  • C.HAProxy
  • D.Traefik

答案:B。Istio 数据面基于 Envoy 代理,以 sidecar 模式注入每个业务 Pod。Nginx 和 HAProxy 是传统反向代理,Traefik 常作为 Ingress Controller,三者都不是 Istio 数据面的组成部分。

Q2. 关于 Istio 控制面组件 istiod,下列说法正确的是?

单选题 · mid

  • A.istiod 由 Pilot、Citadel、Galley 三个独立组件组合而成,必须分别部署
  • B.istiod 是单一二进制,整合了服务发现、证书签发与配置管理能力← 正确答案
  • C.istiod 主要负责数据面流量转发
  • D.istiod 是 Envoy 的配置模板仓库,不作为守护进程运行

答案:B。自 Istio 1.6 起,Pilot(服务发现与配置下发)、Citadel(证书签发)和 Galley(配置校验)合并为 istiod 单一进程。A 描述的是 1.6 之前的架构;C 错在数据面转发由 Envoy sidecar 完成;D 错在 istiod 是常驻控制面服务。

Q3. 下列哪些资源用于配置 Istio 的 mTLS 双向认证策略?

多选题 · mid

  • A.PeerAuthentication← 正确答案
  • B.DestinationRule 中的 tls 字段← 正确答案
  • C.AuthorizationPolicy
  • D.VirtualService

答案:AB。PeerAuthentication 是网格级/命名空间级/工作负载级的 mTLS 模式声明(STRICT/PERMISSIVE/DISABLE);DestinationRule 的 tls 字段可在客户端 sidecar 侧声明对特定服务的 TLS 模式,两者需配合避免冲突。AuthorizationPolicy 是授权策略,VirtualService 是流量路由资源,均不直接控制 mTLS。

Q4. VirtualService 与 DestinationRule 的职责区别是什么?

单选题 · mid

  • A.两者功能相同,可互相替代
  • B.VirtualService 定义路由规则,DestinationRule 定义目标策略(负载均衡/连接池/subset 划分)← 正确答案
  • C.VirtualService 负责安全策略,DestinationRule 负责流量分发
  • D.VirtualService 只用于 Ingress,DestinationRule 只用于 Egress

答案:B。VirtualService 决定“请求如何路由到服务”,包括按 header/URI 匹配、权重分配、超时与重试;DestinationRule 决定“流量到达目标后如何处理”,包括负载均衡算法、连接池大小、熔断阈值和 subset 定义。A 混淆两者;C、D 对职责的描述均不准确。

Q5. 对命名空间执行 kubectl label namespace default istio-injection=enabled 后,哪个时刻 sidecar 会被注入?

单选题 · easy

  • A.该命名空间下所有已有 Pod 立即重启并注入
  • B.该命名空间下新创建的 Pod 会被自动注入← 正确答案
  • C.需要每个 Pod 手动执行注入命令
  • D.所有命名空间的 Pod 都会被注入

答案:B。命名空间标签只影响新创建 Pod 的准入控制(webhook 注入),已有 Pod 不会自动重建,需要 kubectl rollout restart 滚动重启才会注入。C 是手动注入方式(istioctl kube-inject);D 与命名空间标签的作用范围不符。

Q6. 关于 Istio 1.5 之后的架构演进,下列描述正确的有?

多选题 · hard

  • A.Mixer 组件已被移除,遥测在 Envoy 内直接生成← 正确答案
  • B.istiod 将原来多个控制面组件合并为单一二进制← 正确答案
  • C.所有 API 版本均保持永久兼容,升级无需担心废弃
  • D.引入 WasmPlugin,允许用户通过 WebAssembly 扩展 Envoy 能力← 正确答案

答案:ABD。1.5 移除 Mixer 并引入 Telemetry v2,遥测直接在 Envoy 数据面内完成;1.6 将控制面合并为 istiod;WasmPlugin 自 1.12 起成为正式 API,支持 WebAssembly 扩展。C 错误——Istio 会移除废弃的实验 API,升级需检查兼容性。

Q7. 用 Istio 实现金丝雀发布(5% 流量到新版本),最合适的配置组合是?

单选题 · mid

  • A.仅创建 ServiceEntry 指向两个版本
  • B.VirtualService 按权重路由到两个 subset + DestinationRule 定义 subset← 正确答案
  • C.Gateway 配置两个不同的 host
  • D.仅修改 Kubernetes Service 的 selector 指向新版本

答案:B。金丝雀发布需要 VirtualService 的 weight 字段将请求按比例分发,且 DestinationRule 中必须先用 labels 定义 subset(如 v1、v2),VirtualService 才能按 subset 路由。A 的 ServiceEntry 用于注册外部服务;C 的 Gateway 只管入口;D 直接改 Service selector 是蓝绿切换而非按比例灰度。

Q8. 网格内服务访问外部 HTTPS API(如 api.example.com),且生产环境将 outboundTrafficPolicy 设为 REGISTRY_ONLY,需要配置哪些资源?

单选题 · hard

  • A.无需配置,默认放行
  • B.ServiceEntry 将外部域名加入网格,必要时配合 VirtualService/DestinationRule 定义 TLS 策略← 正确答案
  • C.创建一个新的 Kubernetes Service 指向外部 IP
  • D.在 Gateway 上配置外部端口转发

答案:B。REGISTRY_ONLY 模式下,所有出站流量必须先在网格内有明确注册,ServiceEntry 是唯一方式。对于 HTTPS 外部服务,ServiceEntry 声明 host 和端口后,istio-proxy 通过 SNI 路由转发;若协议特殊还需配合 VirtualService 与 DestinationRule 指定 TLS 规则。A 是 ALLOW_ANY 行为;C 的 Service 无法跨集群解析外部域名;D 的 Gateway 是入口而不是出站配置。

Q9. 下列哪些工具属于 Istio 官方生态中用于可观测性展示的组件?

多选题 · mid

  • A.Kiali← 正确答案
  • B.Prometheus← 正确答案
  • C.Jaeger← 正确答案
  • D.HashiCorp Vault

答案:ABC。Kiali 是 Istio 官方可视化控制台,展示服务拓扑与健康状态;Prometheus 是 Istio 指标(Metrics)的默认存储与查询后端;Jaeger 是官方推荐集成的分布式追踪后端。Vault 是密钥管理工具,不属于 Istio 可观测性生态。

Q10. 修改了 VirtualService 配置后,如何快速确认所有 sidecar 已同步新配置?

单选题 · mid

  • A.kubectl get virtualservice 查看资源状态
  • B.istioctl proxy-status 查看 Proxy 与 istiod 的配置同步状态← 正确答案
  • C.重启所有业务 Pod
  • D.观察 Kiali 是否刷新拓扑图

答案:B。istioctl proxy-status 会列出每个代理的配置版本、状态和上次同步时间,能发现配置下发滞后或失败的代理。A 只能看到 CRD 是否被 API Server 接受;C 是粗暴做法;D 的拓扑刷新依赖配置同步,无法精确到单个代理。

参考来源

  • webpageIstio 官网项目介绍、下载入口与最新版本发布