Istio 流量治理与安全

共 17 题
📑 题目列表 17 题
#
★★★

1. Istio mTLS 的自动双向认证与 PeerAuthentication/AuthorizationPolicy 如何实现零信任?

Istio 的 mTLS 如何实现自动双向认证,PeerAuthentication 与 AuthorizationPolicy 是如何协同实现零信任的?

  • PeerAuthentication 的 mTLS 模式(PERMISSIVE/STRICT)
  • SPIFFE 身份与双向认证
  • AuthorizationPolicy 的默认拒绝与授权

Istio 的自动 mTLS 通过 PeerAuthentication 配置:PERMISSIVE 模式允许明文与 mTLS 并存(迁移期),STRICT 模式强制服务间所有流量走双向 mTLS。工作负载通过 SPIFFE 身份(spiffe://trust-domain/ns/.../sa/...)在证书 SAN 中标识,TLS 握手时双方互相校验对方身份,实现双向认证。零信任由 AuthorizationPolicy 完成:它基于已认证的身份(source)、目标(destination)与请求属性(方法、路径)定义授权,默认拒绝(deny-by-default)——未匹配任何允许策略的请求被拒绝。两层协同:PeerAuthentication 先保证"身份可信"(强 mTLS),AuthorizationPolicy 再保证"可信身份也只能访问授权范围",实现最小权限的零信任。

零信任 = 身份认证(mTLS)+ 访问授权(AuthorizationPolicy)+ 持续验证。PeerAuthentication 解决"你是谁",AuthorizationPolicy 解决"你能访问什么"。默认拒绝是最关键的零信任特征——只放行显式授权的流量。迁移时先用 PERMISSIVE 逐步过渡到 STRICT,避免一次性强制 mTLS 导致明文流量中断。

apiVersion: security.istio.io/v1
kind: PeerAuthentication
metadata:
  name: default
  namespace: default
spec:
  mtls:
    mode: STRICT
---
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
  name: allow-orders
  namespace: default
spec:
  action: ALLOW
  rules:
  - from:
    - source:
        principals: ["cluster.local/ns/default/sa/checkout"]
    to:
    - operation:
        methods: ["GET"]
#
★★★

2. Sidecar 注入机制中 istio-injection webhook 的自动注入流程与 sidecar 容器的启动顺序(istio-init 的 iptables 拦截)如何保证?

请说明 Istio 的 Sidecar 自动注入机制,包括 istio-injection webhook 的注入流程,以及 istio-init 容器如何通过 iptables 拦截保证 sidecar 与主容器的启动顺序?

  • MutatingAdmissionWebhook 注入流程
  • istio-init 与 iptables 拦截
  • 容器启动顺序保证

自动注入流程:namespace 打上 istio-injection=enabled 标签后,创建 Pod 时 Kubernetes API 会调用 istio-sidecar-injector 的 MutatingAdmissionWebhook,该 webhook 根据 label 判断是否注入,若注入则改写 Pod 规范,加入 istio-init 初始化容器和 istio-proxy 主容器,并加入所需 annotations 与注入状态。启动顺序保证:istio-init 是 initContainer,Kubernetes 保证 initContainer 先于主容器运行——istio-init 以 NET_ADMIN 权限执行 istio-iptables 配置 NAT 规则,把应用出入站流量重定向到 15001/15006,规则就绪后 initContainer 退出,istio-proxy 与主容器才启动。这样保证了流量劫持规则先于应用启动生效,应用一经启动其流量即被 sidecar 接管。

安全的关键在于"劫持规则先于应用就绪"。用 initContainer 保证 iptables 规则先配好,再用 sidecar 容器特性保证 istio-proxy 先于主容器启动,从而业务请求从一开始就经过代理。排查注入问题时先确认 webhook 服务正常、namespace label 正确、Pod 是否含 istio-init 与 istio-proxy。

apiVersion: v1
kind: Namespace
metadata:
  name: default
  labels:
    istio-injection: enabled
---
kind: Pod
spec:
  initContainers:
  - name: istio-init
    image: istio/proxyv2
    args: ["istio-iptables", "-p", "15001", "-z", "15006", "-u", "1337"]
  containers:
  - name: istio-proxy
    image: istio/proxyv2
#
★★★

3. VirtualService 与 DestinationRule 的路由规则(权重/Header/故障注入)如何配置与验证?

请说明如何配置 VirtualService 与 DestinationRule 实现权重路由、Header 路由与故障注入,并验证其生效?

  • VirtualService 的权重/Header/故障注入规则
  • DestinationRule 的 subset 定义
  • 验证方法(流量观察、日志)

权重路由:VirtualService 中同一 host 的多个 destination 设置 route.weight,按比例分发流量(常用于金丝雀发布)。Header 路由:通过 match 匹配请求头(如 request.headersuri.prefix)把特定流量路由到指定 subset。故障注入:VirtualService 的 fault 配置 delay(延迟)与 abort(中断),用于韧性测试。DestinationRule 负责定义这些 subset(如 v1、v2 版本)及其负载均衡/连接池。验证:通过 istioctl proxy-config clusterroute 查看实际下发的路由,观察请求的响应与日志(如 X-Envoy-Upstream-Service-Time 验证延迟注入),或用流量测试工具观察分发比例。

权重路由与 header 路由是网格灰度发布的基础,故障注入是韧性演练工具。subset 必须先在 DestinationRule 中定义,否则 VirtualService 引用会出错。验证时用 proxy-config 确认下发配置,再用实际流量观察行为是否符合预期。

apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts: ["reviews"]
  http:
  - match:
    - headers:
        user-agent:
          prefix: "mobile"
    route:
    - destination:
        host: reviews
        subset: v2
  - fault:
      delay:
        percentage: 10
        fixedDelay: 2s
    route:
    - destination:
        host: reviews
        subset: v1
      weight: 90
    - destination:
        host: reviews
        subset: v2
      weight: 10
#
★★★

4. 网格性能开销中 Sidecar 的 CPU/内存/延迟成本(通常 30-50MB 内存与毫秒级延迟)如何用资源配额、并发限制与连接池调优?

服务网格中 Sidecar 的 CPU/内存/延迟成本(通常 30-50MB 内存与毫秒级延迟)如何量化,并如何通过资源配额、并发限制与连接池参数调优?

  • Sidecar 资源开销量级
  • resources 请求/限制配置
  • 并发与连接池调优

Sidecar 的典型开销:每实例约 30-50MB 内存、少量 CPU(0.5-1 核),每请求增加约 1-5ms 延迟。调优手段:一是资源配额,在注入的 istio-proxy 容器设置 requests/limits(如 CPU 500m、内存 512Mi),避免 sidecar 抢占业务资源或整个节点过载;二是并发限制,通过 Envoy 的 concurrency 设置 worker 线程数(默认与 CPU 数一致,可限制为较小值节省资源),并通过连接池限制 TCP/HTTP 最大连接数;三是连接池参数,在 DestinationRule 中配置 connectionPool 的 tcp.maxConnections、http.maxRequestsPerConnection、http.h2UpgradePolicy 等,控制与上游的连接数,避免连接过多导致内存与连接耗尽。

性能调优是"资源与能力的平衡":sidecar 资源限制要留足余量避免 OOM,并发与连接池要匹配实际 QPS 与上游能力,避免过度保守导致吞吐下降或过度开放导致资源膨胀。容量规划时应结合 QPS、连接数、以及每请求的代理开销估算 sidecar 的总资源需求。

apiVersion: networking.istio.io/v1
kind: DestinationRule
metadata:
  name: reviews
spec:
  host: reviews
  trafficPolicy:
    connectionPool:
      tcp:
        maxConnections: 100
      http:
        h2UpgradePolicy: UPGRADE
        maxRequestsPerConnection: 100
#
★★

5. Egress 流量治理中 ServiceEntry 与 Egress Gateway 如何管控对外部服务的访问以及与 NetworkPolicy 的配合边界?

请说明如何使用 ServiceEntry 与 Egress Gateway 管控服务对外部服务的访问,以及它们与 NetworkPolicy 的配合边界?

  • ServiceEntry 定义外部服务
  • Egress Gateway 管控出站流量
  • 与 NetworkPolicy 的边界

ServiceEntry 用于把外部服务(如第三方 API、数据库)注册进网格,使 sidecar 可以对其进行路由、mTLS 与可观测性治理,可配置 resolution(DNS/STATIC)与 endpoints。Egress Gateway 是专用出口代理,把所有出站流量集中到网关,在此实施 egress 策略(如访问控制、TLS 终止、审计),是"安全出口"。与 NetworkPolicy 的边界:NetworkPolicy 是 Kubernetes 网络层(L3/L4)的访问控制,工作在集群网络层面,控制 Pod 到 Pod/Pod 到外部 IP 的连通性;ServiceEntry/Egress Gateway 是网格应用层(L7)的治理。两者互补:NetworkPolicy 控制"网络可达性",网格 Egress 控制"应用层策略与治理",通常由 NetworkPolicy 做底座隔离、Egress Gateway 做细粒度管控,二者可叠加。

Egress 治理的核心是"把出站流量纳入可控范围"。ServiceEntry 让外部服务可被网格识别,Egress Gateway 提供集中化出口管控。NetworkPolicy 与网格 Egress 分层:前者管网络连通,后者管应用治理,配合可形成"网络层拒绝 + 应用层审计"的纵深防御。

#
★★

6. EnvoyFilter 的使用边界,即什么时候应该避免使用 EnvoyFilter(升级兼容性、维护成本)而优先用原生 API 的表达能力?

何时应该避免使用 EnvoyFilter,为什么优先用 Istio 原生 API 的表达能力?

  • EnvoyFilter 的强耦合与升级风险
  • 原生 API 的稳定表达
  • 使用 EnvoyFilter 的原则

EnvoyFilter 直接操作 Envoy 底层配置,与 Envoy 版本和内部配置结构强耦合,升级 Istio/Envoy 时往往因配置结构变化而失效或报错,且其适用范围广、难以审计,维护成本高。应避免的情况:原生 API(VirtualService、DestinationRule、Telemetry、AuthorizationPolicy 等)已能表达的需求;对 Envoy 内部结构不熟悉时;以及需要长期维护、频繁升级的核心配置。优先用原生 API 的原因:原生 API 有版本兼容保证、语义稳定、可审计、可热更新,且不依赖 Envoy 内部实现。只有当原生 API 无法表达(如自定义扩展功能、特定 Envoy 过滤器)时才考虑 EnvoyFilter,并尽量隔离、标注版本、做好升级测试。

EnvoyFilter 是一把"双刃剑":功能强大但破坏升级兼容性。最佳实践是"能用原生 API 就不用 EnvoyFilter",把 EnvoyFilter 作为最后手段,并对每个 EnvoyFilter 标注用途、版本并纳入升级测试范围,降低长期维护风险。

#
★★

7. Istio 的可观测性中 Telemetry 如何生成指标/日志/追踪并集成 Prometheus/OTel?

Istio 的可观测性如何通过 Telemetry 生成指标、日志与追踪,并集成 Prometheus 与 OTel?

  • Telemetry 资源的配置
  • 指标/日志/追踪的生成
  • 与 Prometheus/OTel 集成

Istio 1.12+ 用 Telemetry 资源统一配置可观测性(取代旧版 Mixer)。指标:Envoy 生成标准指标(istio_requests_total、istio_request_duration 等),通过 sidecar 的 15090 端口供 Prometheus 抓取,可用 ServiceMonitor 配置采集;Telemetry 可自定义指标维度(如按版本、请求头、响应码)。追踪:在 Telemetry 中配置 OpenTelemetry provider(或 Zipkin/Jaeger),Envoy 生成并传播 trace 头,导出到 OTel Collector 或 Jaeger。日志:Telemetry 配置 access logging provider(stdout/file/自定义格式),把访问日志输出到指定目标。三者通过同一 Telemetry 资源按工作负载声明式配置,实现"指标、追踪、日志"统一管理。

Telemetry 把三类遥测从 Mixer 的复杂模型简化为声明式配置,且按工作负载可定制。集成时需先定义 provider(如 Prometheus、OTel、stdout),再在 Telemetry 中引用。启用后即可用 Prometheus 查指标、用 Jaeger/OTel 看链路、用日志系统看访问细节。

#
★★

8. Istio 的灰度发布(金丝雀)与流量镜像如何配合实现低风险发布?

请说明 Istio 的金丝雀发布与流量镜像如何配合,实现低风险的新版本发布?

  • 金丝雀发布的权重路由
  • 流量镜像(mirror)机制
  • 低风险发布流程

金丝雀发布:通过 VirtualService 的权重路由,把少量流量(如 10%)导向新版本(subset v2),其余仍走旧版本;观察新版本指标与错误率,逐步调高权重直至全量切换,实现风险可控的渐进发布。流量镜像:通过 VirtualService 的 mirror 配置,把真实流量复制一份给新版本(镜像流量不参与返回),用于在生产环境用真实流量验证新版本行为而不影响线上请求。配合方式:先镜像流量评估新版本(对比响应对错、性能),再启动金丝雀用小权重放真实流量,逐步放大并最终全量切换,完成低风险发布。

金丝雀是"真实流量渐进放量",镜像是"旁路流量验证",两者结合让新版本先在真实流量下接受验证、再渐进接管。关键点:镜像流量不影响响应,需配置 mirror 与 mirrorPercentage;金丝雀切换需结合监控(错误率、延迟 P99)决定是否继续放量或回滚。

apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts: ["reviews"]
  http:
  - mirror:
      host: reviews
      subset: v2
    mirrorPercentage:
      value: 50
    route:
    - destination:
        host: reviews
        subset: v1
#
★★

9. 多集群/多网络部署中 primary-remote 架构、东西向网关与多集群服务发现(MCS)的选型?

在多集群/多网络部署中,primary-remote 架构、东西向网关与多集群服务发现(MCS)如何选型?

  • primary-remote 架构
  • 东西向网关的作用
  • 多集群服务发现与选型

primary-remote 架构:一个主集群部署控制面(Istiod),其他 remote 集群只部署数据面与必要的网关,由主集群统一管理配置与证书,适合"一个控制面管理多个集群"的场景,运维简单但主集群故障影响大。东西向网关(east-west gateway):用于跨集群/跨网络的服务间流量,位于集群边缘,负责把集群 A 的流量安全地转发到集群 B 的 service,并处理网络层面的 mTLS 与负载均衡,是跨集群通信的通道。多集群服务发现(MCS):通过 MCS 规范或 Istio 的多集群服务发现把跨集群的 service 暴露为统一命名的服务(如 namespace/hostname.global),配合东西向网关实现跨集群调用。选型依据:集群数量、网络隔离要求、控制面可靠性、跨集群流量规模。跨网络(不同 CNI/VPC)必须用东西向网关;集群数量少且需要统一管理选 primary-remote;需要高可用与独立故障域选多主。

多集群选型是"控制面架构 + 网络拓扑 + 服务发现"的综合决策。东西向网关解决"跨网络通信",MCS 解决"跨集群服务发现与命名",primary-remote 解决"控制面集中管理"。理解三者的关系,才能根据网络条件与可靠性要求设计合理的多集群网格。

#

10. Istio Telemetry 的配置中如何按工作负载定制指标维度与日志采样

如何使用 Istio Telemetry 按工作负载定制指标维度与日志采样?

  • Telemetry 的 selector 按工作负载匹配
  • 自定义指标维度(metrics)
  • 日志采样与 access log 配置

Telemetry 通过 spec.selector 按工作负载(namespace 或 label)匹配,为不同工作负载定制不同遥测配置。指标:通过 spec.metrics 的 providers 与 match 定制指标,用 requestHeaders/responseHeaders/requestQueryParams 等维度(dimensions)扩展指标,如按业务请求头维度统计,可覆盖默认指标维度。日志采样:通过 spec.accessLogging 配置 access log 的 providers,并结合 spec.tracing 的 sampling 配置采样率(如 10%),控制日志与追踪的量。这样可按敏感/高流量工作负载分别配置,既满足观测需求又控制资源开销。

Telemetry 的定制能力(selector + metrics 维度 + sampling)让可观测性"按需精细"。通过 selector 只对特定工作负载生效,通过自定义维度获得更细粒度的指标,通过 sampling 控制数据量。这是大规模网格中平衡"观测深度"与"成本"的关键。

#

11. Istio 性能调优中 sidecar 资源限制、并发连接池与 xDS 推送频率的调整方法

请说明 Istio 性能调优的方法,包括 sidecar 资源限制、并发连接池与 xDS 推送频率的调整?

  • sidecar 资源 limits 配置
  • 并发与连接池调整
  • xDS 推送频率与 istiod 配置

sidecar 资源限制:通过注入模板或 workload 的 annotations 设置 istio-proxy 的 requests/limits(如 CPU/Memory),并在 IstioOperator 中设置全局默认值,避免资源超配。并发连接池:在 DestinationRule 中配置 connectionPool 的 TCP/HTTP 连接数、超时与重试,控制与上游的连接规模;同时调整 Envoy 的 concurrency(worker 线程数)匹配实际负载。xDS 推送频率:在 Istiod 配置中调整 PILOT_DEBOUNCE_AFTER/PILOT_DEBOUNCE_MAX(去抖窗口)控制配置变更合并推送的节奏,避免频繁小变更引发推送风暴;对流量频繁变化的工作负载可用 Sidecar 资源限制订阅范围,减少推送量。

性能调优兼顾数据面与控制面:数据面通过资源限制与连接池控制运行时开销,控制面通过去抖窗口与订阅裁剪控制推送负载。调优需结合监控(sidecar 内存、istiod CPU、推送次数)进行,避免盲目调整。

#

12. Istio 授权策略的评估顺序中 AuthorizationPolicy 的匹配规则与默认拒绝模型

请说明 Istio AuthorizationPolicy 的评估顺序、匹配规则与默认拒绝模型?

  • action(ALLOW/DENY/CUSTOM)与评估顺序
  • 匹配规则(source/operation/conditions)
  • 默认拒绝模型

AuthorizationPolicy 的匹配规则基于 from(source)、to(operation)、when(conditions)三个维度,匹配后执行 action(ALLOW 允许、DENY 拒绝、CUSTOM 自定义)。评估顺序:先评估 DENY 策略(命中即拒绝),再评估 ALLOW 策略(命中即允许),最后是 CUSTOM。默认拒绝模型:若没有匹配任何 ALLOW 策略,则请求被拒绝(deny-by-default);但存在 DENY 策略时只要有命中就直接拒绝。因此零信任的安全策略是"显式列出允许的访问,其余全部拒绝"。

理解评估顺序是配置安全的关键:DENY 优先于 ALLOW,意味着安全策略(黑名单)优先;没有 ALLOW 命中则默认拒绝,实现白名单模型。配置时要注意:默认拒绝意味着一旦漏配 ALLOW 就会导致流量中断,需在迁移期先观察再收紧。

#

13. Istio 排障常用命令中 istioctl analyze、proxy-status 与 proxy-config 的用法

请说明 istioctl analyze、proxy-status 与 proxy-config 三个排障命令的用途与用法?

  • istioctl analyze 的静态分析
  • proxy-status 的 xDS 同步状态
  • proxy-config 的代理配置查看

istioctl analyze:对集群中的 Istio 配置做静态分析,检查配置错误(如 VirtualService 引用不存在的 subset、资源冲突、端口不匹配等),输出诊断信息,是"配置体检"工具。istioctl proxy-status(简称 ps):查看各 sidecar 与控制面的 xDS 连接状态,以及各资源(LDS/RDS/CDS/EDS/SDS)的同步版本,判断是否有 sidecar 配置不一致或未同步。istioctl proxy-config(简称 pc):查看某个 sidecar 实际下发的配置,包括 listener、route、cluster、endpoint、secret,可结合 -o json 查看细节,用于定位路由、集群、端点层面的问题。三者配合:analyze 查配置静态错误,proxy-status 查同步状态,proxy-config 查实际下发细节。

这三个命令构成 Istio 排障的"三板斧":analyze 处理"配置写错",proxy-status 处理"配置没同步",proxy-config 处理"代理实际行为"。掌握它们的使用场景,能快速区分问题的层面(配置错误、同步失败、运行时异常)。

#

14. Istio 的故障注入(延迟/中断)与重试/超时策略如何协同做韧性演练?

请说明 Istio 的故障注入(延迟/中断)与重试/超时策略如何协同进行韧性演练?

  • 故障注入(delay/abort)配置
  • 重试与超时策略
  • 韧性演练的协同

故障注入通过 VirtualService 的 fault 配置向流量注入延迟(fixedDelay)或中断(abort),模拟下游故障,用于韧性测试。重试/超时策略在 DestinationRule 或 VirtualService 中配置 retries(重试次数、超时)与 timeout(请求超时),让调用方在遇到故障时能重试或快速失败。协同演练:先注入延迟/中断制造故障,观察调用方是否按预期触发重试、是否在超时时间内失败、熔断是否生效,从而验证系统在故障下的韧性。演练目标:确认重试不会导致重试风暴、超时设置合理、故障能在预期时间内恢复。演练时需结合可观测性(trace、指标)观察故障注入期间的请求行为。

故障注入是"人为制造故障",重试/超时是"应对故障的防御",两者协同演练能验证防御是否有效。关键点:注入的故障要可控(按百分比注入),重试策略要防止重试风暴(重试预算、幂等),超时要合理防止级联超时。这是混沌工程在网格中的典型应用。

apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts: ["reviews"]
  http:
  - fault:
      abort:
        percentage: 5
        httpStatus: 500
    route:
    - destination:
        host: reviews
        subset: v1
  - retries:
      attempts: 3
      retryOn: connect-failure,5xx
      perTryTimeout: 500ms
    timeout: 2s
    route:
    - destination:
        host: reviews
        subset: v1
#

15. Istio 路由配置的排障中 VirtualService 未生效的常见原因(网关选择、主机匹配、优先级)

VirtualService 未生效的常见原因有哪些,包括网关选择、主机匹配与优先级?

  • 网关选择(gateways 字段)
  • 主机匹配(hosts)
  • 优先级与冲突

VirtualService 未生效的常见原因:一是网关选择错误,VirtualService 的 gateways 字段未包含正确的 ingress gateway,或未指定 mesh 关键字导致内部流量不匹配;二是主机匹配错误,hosts 字段与请求的 Host 头(或服务名)不匹配;三是优先级问题,多个 VirtualService 匹配同一主机时,Istio 按规则合并/选择,规则冲突或优先级不当导致预期规则未生效;四是配置未同步(NACK/注入失败),配置存在但 sidecar 未收到。排障时用 istioctl analyze 检查配置错误,用 istioctl proxy-config route 查看实际生效的路由,确认 gateway 与 hosts 匹配。

路由不生效的根因多在"匹配"层面:gateways 决定该规则用于哪些入口,hosts 决定命中的请求,两者任一处不匹配规则就不会生效。理解匹配优先级与合并规则,加上 proxy-config 查看实际路由,能快速定位为什么规则"没生效"。

#

16. xDS 协议与配置分发中 Istiod 通过 EDS/CDS/LDS/RDS 向 Envoy 推送配置的流程以及配置变更如何做到不中断?

请说明 Istiod 通过 LDS/RDS/CDS/EDS 向 Envoy 推送配置的流程,以及配置变更如何做到不中断服务?

  • xDS 各子协议的推送内容
  • 配置变更的热更新流程
  • 不中断机制(Drain/优雅过渡)

xDS 推送流程:Istiod 把用户配置翻译为 Envoy 配置,通过 LDS 推送监听器、RDS 推送路由、CDS 推送集群、EDS 推送端点。Envoy 通过 gRPC 长连接订阅,收到配置后校验并 ACK/NACK。配置变更不中断的机制:Envoy 采用"先建新、后删旧"的优雅过渡——新配置(如新 listener/cluster)先就绪,旧配置在连接排空(drain)完成后才被移除,避免正在处理的请求被切断。同时 Envoy 支持热重启(hot restart)与动态更新,配置变更无需重启进程。控制面去抖推送、增量更新也减少了变更对数据面的冲击。

配置变更不中断的关键是"优雅过渡 + 长连接订阅"。Envoy 的 drain 机制保证新旧配置平滑切换,xDS 长连接保证变更实时下发。理解 LDS/RDS/CDS/EDS 的职责与推送流程,才能理解控制面与数据面如何保持一致并在变更时保持可用。

#

17. 渐进式网格迁移中从无网格到部分注入(命名空间/工作负载粒度)的迁移路径与回退策略?

请说明从无网格到部分注入的渐进式迁移路径,以及相应的回退策略?

  • 按命名空间/工作负载灰度注入
  • 迁移路径(先注入后观察)
  • 回退策略

渐进式迁移路径:先在小范围(一个命名空间或关键工作负载)启用注入,观察流量、性能与可观测性,再逐步扩大范围。具体做法:通过在命名空间打 istio-injection=enabled 标签启用注入,或对单个工作负载用 sidecar.istio.io/inject: "true" annotation 注入;同时用 mTLS 的 PERMISSIVE 模式先让明文与 mTLS 并存,避免强制 mTLS 中断未知流量。每次扩大范围后验证路由、mTLS、重试、可观测性等是否正常。回退策略:对某个命名空间/工作负载撤销注入标签,或删除 annotation,Pods 重建后即回到无 sidecar 状态;同时把 AuthorizationPolicy 调整为宽松、把 PeerAuthentication 从 STRICT 降为 PERMISSIVE,确保回退后流量仍可达。整体上迁移是"先安全、再功能、逐步扩大、随时可回退"。

渐进式迁移的核心是"细粒度可控 + 随时可回退"。按命名空间/工作负载灰度注入,用 PERMISSIVE 平滑过渡 mTLS,用策略可回退保证安全。迁移前应建立基线(延迟、错误率、资源),迁移中边观察边推进,迁移后收紧策略。