参考:Istio CRD 速查与命令清单
基于 Istio 1.22(含 Ambient GA)· 核于 2026-08
速查
- Istio 定义:CNCF 服务网格平台,Sidecar(Envoy)把流量管理/安全/可观测性从应用剥离,语言无关。
- 架构:数据面(Envoy Sidecar,拦截流量执行治理)+ 控制面(istiod,服务发现/配置转换/证书签发)。
- 三大能力:流量管理(VirtualService+DestinationRule)、安全(mTLS+AuthorizationPolicy)、可观测性(Prometheus+Jaeger+Kiali,开箱即用)。
- 核心 CRD:VirtualService(路由)、DestinationRule(subset/熔断/LB)、Gateway(入口)、ServiceEntry(外部服务)、PeerAuthentication(mTLS 模式)、AuthorizationPolicy(授权)、RequestAuthentication(JWT)。
- Ambient 模式 GA(1.22+):去 Sidecar,ztunnel(节点级 L4 mTLS)+ waypoint(按需 L7),降资源开销。
- vs Spring Cloud:Sidecar 外挂(语言无关)vs SDK 内嵌(绑 Java)。
- vs Linkerd:Envoy 功能全重型 vs Rust 代理轻量易用。
一、核心 CRD 速查
| CRD | 作用 | 关键字段 |
|---|---|---|
| VirtualService | 定义请求如何路由 | hosts、http.match(匹配)、route.destination(host/subset/weight)、timeout、retries |
| DestinationRule | 目标策略 | host、subsets(版本分组)、trafficPolicy(loadBalancer/connectionPool/outlierDetection) |
| Gateway | 入口网关 | selector、servers(port/protocol/hosts) |
| ServiceEntry | 外部服务纳入网格 | hosts、location(MESH_EXTERNAL)、ports |
| PeerAuthentication | mTLS 模式 | mtls.mode(PERMISSIVE/STRICT) |
| AuthorizationPolicy | 授权(谁能调谁) | action(ALLOW/DENY)、rules.from/to/when |
| RequestAuthentication | JWT 校验 | jwtRules(issuer/jwksUri/audiences) |
| Sidecar | 定制 Sidecar 配置 | workloadSelector、ingress/egress |
二、流量模型:VirtualService + DestinationRule
请求进入 Sidecar
│
▼
VirtualService 匹配(hosts + match)
│ 按规则路由到 destination(host + subset + weight)
▼
DestinationRule 策略
│ - subset:选哪个版本(v1/v2,按 Pod label)
│ - loadBalancer:负载均衡算法(ROUND_ROBIN/LEAST_REQUEST/...)
│ - outlierDetection:摘除异常实例(被动熔断)
│ - connectionPool:连接池限制
▼
Envoy 转发请求到目标实例- VirtualService 决定「去哪」,DestinationRule 决定「怎么去」(选哪个实例、什么 LB、要不要熔断)。
- subset 是两者的桥梁:DestinationRule 定义 subset(按 label 分组),VirtualService 的 destination.subset 引用它。
三、安全模型速查
| 层 | CRD | 作用 |
|---|---|---|
| 身份(mTLS) | PeerAuthentication | 服务间双向证书认证,SPIFFE 身份,PERMISSIVE/STRICT 模式 |
| 认证(JWT) | RequestAuthentication | 校验外部客户端 JWT(签名/issuer/audience) |
| 授权 | AuthorizationPolicy | 控制谁能调谁,ALLOW/DENY,基于身份/命名空间/方法/路径 |
- 默认安全:mTLS PERMISSIVE 默认开(迁迁移),AuthorizationPolicy 默认全部拒绝(白名单)。
- 零信任:所有通信 mTLS 加密 + 授权,永不默认信任。
四、Sidecar vs Ambient 模式
| 维度 | Sidecar(传统) | Ambient(1.22 GA,未来方向) |
|---|---|---|
| 部署 | 每 Pod 一个 Envoy | 节点级 ztunnel + 按需 waypoint |
| L4 mTLS | Sidecar 做 | ztunnel 做(共享,省资源) |
| L7 治理 | Sidecar 做(全功能) | waypoint 做(按需) |
| 资源开销 | 重(每 Pod 一个 Envoy) | 轻(共享 ztunnel + 按需 waypoint) |
| 成熟度 | 成熟,主流 | 1.22 GA,逐步推广 |
五、常用 istioctl 命令
bash
# —— 安装与注入 ——
istioctl install --set profile=demo # 安装 Istio(demo profile)
istioctl install --set profile=production # 生产 profile
kubectl label namespace default istio-injection=enabled # 命名空间启用 Sidecar 自动注入
# —— Ambient 模式(1.22+)——
istioctl install --set profile=ambient # 安装 Ambient 模式
kubectl label namespace default istio.io/dataplane-mode=ambient # 启用 Ambient
# —— 诊断 ——
istioctl analyze # 校验所有 Istio 配置(找配置错误)
istioctl version # 版本
istioctl proxy-status # 所有 Sidecar 配置同步状态
istioctl proxy-config route <pod> # 看某 Pod 的路由配置
istioctl proxy-config cluster <pod> # 看集群配置(upstream)
istioctl proxy-config listener <pod> # 看监听器
istioctl describe svc <service> # 服务的 Istio 配置摘要
# —— 流量调试 ——
istioctl experimental describe pod <pod> # Pod 的 Sidecar 配置详情
kubectl get virtualservice,destinationrule,gateway -A # 列所有流量配置
# —— 卸载 ——
istioctl x uninstall --purge # 卸载 Istio六、易错点清单
- 「Istio 是注册中心」:错。Istio 是服务网格(流量/安全/观测),不做服务注册——它复用 K8s 的 Service/Endpoint 做服务发现。
- 「Sidecar 没有资源开销」:错。每 Pod 一个 Envoy,内存(几十 MB)+ CPU 开销可观,大集群要评估。Ambient 模式缓解。
- 「VirtualService 的 subset 不需要 DestinationRule」:错。subset 必须在 DestinationRule 中定义(按 Pod label 分组),VirtualService 只引用 subset 名。
- 「mTLS 默认 STRICT」:错。默认 PERMISSIVE(加密明文都接受,便于迁移)。生产应改 STRICT。
- 「Istio 治理逻辑在应用代码里」:错。治理在 Sidecar(Envoy),应用零改造,这是服务网格的核心价值。
- 「Istio 只支持 Java」:错。Sidecar 语言无关,Java/Go/Python/Node 都能接入(这是它相对 Spring Cloud 的优势)。
- 「金丝雀靠 K8s Deployment 滚动更新就够了」:不充分。K8s 滚动更新是「替换实例」(新旧共存但流量按 ready 实例随机分),无法精确控制权重;Istio VirtualService 的 weight 才能精确按百分比分流量。
- 「Ambient 模式完全替代 Sidecar」:尚不是。1.22 GA 后两者共存,可逐命名空间迁移,Sidecar 仍支持(部分高级特性仍需 Sidecar)。
- 「重试随便配无害」:错。非幂等接口(如下单)重试可能导致重复操作,要结合幂等性设计。retryOn 也要精准(如只重试 5xx、connect-failure,不重试 4xx)。
- 「istiod 处理业务流量」:错。istiod 是控制面(下指令),不接触业务流量;业务流量全在数据面 Envoy 之间。
七、进阶方向(链接其他叶)
- Consul —— Consul Connect 是轻量 mesh,Istio 是重量级 mesh,对比
- Nacos —— Istio 可对接 Nacos 做服务发现(非 K8s 场景)
- Etcd —— K8s 底座,Istio 运行在 K8s 之上(依赖 etcd 存的状态)