在 Linux 容器里实测 sidecar 的 iptables 流量劫持:出站 REDIRECT 到 15001 后,应用对不存在的 10.99.0.5:8080 的请求(原本 2018 ms 超时)3 ms 返回,sidecar 靠 SO_ORIGINAL_DST 看到原始目的地址;去掉对 sidecar 自己的放行规则会循环(31 个连接);排除 3306 端口后不经过 sidecar;入站 REDIRECT 到 15006 后 8080 的请求先到 sidecar。
用自己写的最小 ADS 控制平面实测 Envoy 的 xDS:启动时 CDS → EDS → LDS → RDS 依次请求;坏监听器被 NACK(version_info 仍是上一个被接受的版本),流量不受影响;EDS 更新到流量切换中位数 1.4 ms;路由指向没有端点的新集群时 1 s 内 67 个请求都是 503;控制平面断开 6 s,102 个请求全部成功。
实测 Envoy 的 HTTP 过滤器链:故障注入在限流之前时 200 是 98 个、429 是 99 个,颠倒顺序后 200 只剩 49 个、429 变成 301 个;router 不是最后一个时 Envoy 拒绝启动;路由级的 typed_per_filter_config 让 /health 不被限流(300 个全部成功);20 个简单 Lua 过滤器让 p50 延迟多 51 µs。
实测 Envoy 的重试、熔断与异常点检测:retry_on 5xx 且避开已试过的主机,成功率从 75.5% 到 100.0%,后端多收 28% 的请求;per_try_timeout 把 p99 从 1013 ms 降到 229 ms;max_connections 2 加等待队列 2 时 20 个并发请求只有 4 个成功,16 个立即 503;两个坏主机都被摘除后触发 panic 模式,失败比例仍有 57%~67%。
实测 Envoy 的 mTLS:不带证书、未知 CA、过期证书的客户端都会在握手阶段被拒绝;原子替换 SDS 文件后 30 ms 内新握手用上新证书,199 次握手没有失败;证书过期后 Envoy 仍然提供这张证书,客户端拒绝,窗口一直到轮换完成;CA 轮换必须先分发信任包。
实测 Envoy 的流量镜像:客户端永远只拿到 prod 的响应;shadow 慢 1 s、返回 500、整个停了,客户端成功率都是 100.0%;镜像比例用 runtime_fraction 控制;shadow 的熔断器限住后 1200 个镜像请求只有 15 个到达;镜像的 POST 会在 shadow 里再执行一遍。
实测滚动发布的错误窗口:没有任何保护时 1173 个请求失败 157 个(13.38%);加 readinessProbe 后启动阶段的 refused 从 126 降到 4;再加 preStop sleep 5 或让应用优雅退出,这次测量是 0 失败;长连接客户端在只有 preStop 时仍有 53 次 reset,应用优雅退出后为 0。
实测 Helm 模板和 Kustomize 叠加层:三个环境渲染结果逐字段相同(配置 84 行对 83 行,渲染 28 ms 对 32 ms);Helm 的 --set 对模板没引用的键静默无效,Kustomize 补丁能改任意字段;values 里不加引号的 1.10 渲染成 1.1;改 ConfigMap 不触发滚动,要靠 checksum 注解或 configMapGenerator。
实测 Helm 4.3.1 的发布与回滚:每个 revision 存成一个 Secret,默认只保留 10 个;upgrade 到坏镜像默认返回 0,--wait 30 s 后失败但不回滚,--rollback-on-failure 自动回滚;helm rollback 是新建一个 revision;Helm 4 默认服务端应用,kubectl 手工改过的字段会让 upgrade 和 rollback 报冲突。
实测 sidecar 的开销:本机回环上,一个 Envoy 让平均延迟从 43 µs 到 124 µs,两个 Envoy 到 218 µs,mTLS 再加几微秒;并发 32 时吞吐从 92324 降到 26419(一个)和 19297(两个)请求/秒,两个 Envoy 的 CPU 是 85 µs/请求;Envoy 空闲约 40 MB,每个静态集群约 44 KB。
实测应用层重试和 Mesh 重试叠加的后果:一跳上两层都重试 2 次,后端收到 9 倍的请求;链上三层应用都重试是 27 倍,应用与 Envoy 都重试是 243 倍;Envoy 默认 max_retries 3 会拦下一部分重试;retry_on 5xx 会让已写入的 POST 再写一次(200 次写入对 100 个请求);超时后放弃的请求后端仍在处理。
实测 Ingress 和 Gateway API(Traefik v3.7.15,同一个数据面):Ingress 只能按 host 和 path 选一个后端,同一路径写两条规则全部去了同一个后端;HTTPRoute 的权重(90/10 得到 450/50)和请求头匹配是规范字段;跨命名空间要过 allowedRoutes 和 ReferenceGrant;HTTPRoute 状态会说明错在哪,Ingress 不会;两种写法的生效都在 0.3 s 内。