服务网格 32:多集群调用怎样跨网络发现与恢复
同名 Service 能跨集群访问,是否就算完成多集群
不能。真正的两集群须分别证明服务发现看到了远端 endpoints、东西向网络能穿越边界、工作负载身份在预期信任关系下通过、故障切换确实由可用的远端实例处理,以及业务数据是否有独立同步/去重方案。第 31 篇的两个 namespace 即使互访,也不是两个 Kubernetes 控制平面与两个故障域。本篇先以 sidecar 双 primary、双网络为待测拓扑;不能把得到的 sidecar 结果直接外推 ambient 多集群。
令 A 集群运行 frontend → orders 和 inventory-v1,B 集群运行相同 Service 名的 inventory-v2,两边各用固定请求 ID 返回真实版本。每侧的 Istiod 不是数据面业务转发节点;请求跨网络时要核对其实际经过的东西向网关、接收端代理及目标 Pod。控制面知道某个远端 IP,不代表路由必然经过正确网关或 TLS 身份被接受。若两套集群各自创建了合成库存账本,即使远端请求成功,账本数据依然不会自动同步;把跨集群 200 当作事务一致性会把副作用风险掩盖掉。
四层配置与五层证据
先冻结 Kubernetes、Istio 与 CNI 兼容版本、网络拓扑、实际镜像 digest 和信任根的公开标识,审查东西向网关暴露范围、跨集群 endpoint 导出范围及恢复策略。安装配置、Kubernetes Service 资源、控制器发现/配置下发、sidecar 当前 endpoint、真实跨网关请求路径、目标库存响应和账本须各留证据;单独拿一张 proxy-status ACK 截图不证明成功。若信任根不同,策略究竟要求共享根、跨域别名还是拒绝,必须按选定发布版本和实际握手验证;不提交私钥或 token。
| 阶段 | 请求来源与后端条件 | 应保存的区分证据 |
|---|---|---|
| 正常本地 | A 的 v1 健康 | A 端配置、命中的 v1 应用记录和连接 |
| 远端请求 | 按明确规则选 B 的 v2 | A/B 两侧代理与东西向网关、B 应用版本 |
| 本地端点撤离 | A 的 v1 变为 not ready | EndpointSlice 变化、A 代理 EDS、失败/切换窗口 |
| 隔离网络或错误信任 | 仅对实验东西向路径注入 | 拒绝位置、客户端非零退出、恢复后重新收敛 |
本地故障切换不等于只有远端可用;其他路由/重试、缓存连接与本地残留端点会影响观察。比较新建连接和已有连接,保留故障发生时刻与每次请求 ID;网络故障只针对隔离的合成实验链路,不中断宿主或其他任务节点。不同集群可见服务不等于业务事务有全局原子性,重复的 POST /reserve 用各集群账本分别核验,并把不一致记为应用层缺口。
双 context 安全入口与正反实验
从 examples/service-mesh/ 只读运行:
1 | |
脚本只接受明确的两个实验 context 和合成 namespace,先检查 kubectl 可用及 context 存在,再要求两个 kube-system UID 不同,最后分别只读节点、Service、EndpointSlice 和 Pod。**UID 不同只是排除同一集群冒充双集群的前置检查,不是跨网通信证据。**通过后再做 A 本地成功、A 显式请求 B、撤离 A 的 v1、阻断只属于实验网关的链路、恢复等对照。预期拒绝/切换未发生时,断言必须非零;保存每次完整命令、退出码、响应、证书公开元数据、代理实际资源和后端账本。
当前 examples/service-mesh/evidence/32/20261001T145342Z-2687868/ 的前置退出 127,错误 NOT_RUN: kubectl: command not found;没有一个可用实验集群,更没有双集群、东西向网关或共享信任配置。本篇多集群发现、网络、身份、切换、恢复与业务一致性实验均 NOT_RUN。第 00 篇进程模拟两个库存版本不是多集群。
练习与参考解答
- 在两个 namespace 创建
inventoryService,再使两个 Pod 返回 v1/v2,能称作多集群对照吗?参考解答:不能。先用两个互不相同的集群标识和独立 API、网络/控制面边界证明拓扑,分别核对实际请求路径经东西向网关、源/目标工作负载身份;同集群隔离只测试 namespace 范围。 - A 的 v1 不可用后 A 的读请求成功命中 B 的 v2,能认定合成预留账本的数据一致了吗?参考解答:不能。访问路径切换只说明读请求到达远端;检查 A/B 两本账的相同
operation_id、顺序、冲突及重复执行,然后决定应用事务与同步策略。改变条件为 B 延迟或网络分区时,还需观察客户端超时后两边是否已各自执行。
官方参考与系列导航
- Istio multi-primary multi-network installation 与 验证:网络、东西向网关与多控制面拓扑。
- Istio locality failover:失败位置和流量转移;实际触发条件依赖冻结配置。
- Istio ambient multicluster:另有阶段、支持范围和拓扑限制;sidecar 结果不能直接外推。
系列导航:11 连接与负载均衡 → 31 多租户 → 32 多集群(本文)→ 33 性能对照。
