同名 Service 能跨集群访问,是否就算完成多集群

不能。真正的两集群须分别证明服务发现看到了远端 endpoints、东西向网络能穿越边界、工作负载身份在预期信任关系下通过、故障切换确实由可用的远端实例处理,以及业务数据是否有独立同步/去重方案。第 31 篇的两个 namespace 即使互访,也不是两个 Kubernetes 控制平面与两个故障域。本篇先以 sidecar 双 primary、双网络为待测拓扑;不能把得到的 sidecar 结果直接外推 ambient 多集群。

两个不同 kube-system UID 的集群:各自 Istiod 发现与 east-west gateway 联通,业务账本仍各自独立

令 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
SM_CONTEXT_A=service-mesh-lab-a SM_CONTEXT_B=service-mesh-lab-b SM_NAMESPACE=service-mesh-lab bash scripts/check-32.sh

脚本只接受明确的两个实验 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 篇进程模拟两个库存版本不是多集群。

练习与参考解答

  1. 在两个 namespace 创建 inventory Service,再使两个 Pod 返回 v1/v2,能称作多集群对照吗?参考解答:不能。先用两个互不相同的集群标识和独立 API、网络/控制面边界证明拓扑,分别核对实际请求路径经东西向网关、源/目标工作负载身份;同集群隔离只测试 namespace 范围。
  2. A 的 v1 不可用后 A 的读请求成功命中 B 的 v2,能认定合成预留账本的数据一致了吗?参考解答:不能。访问路径切换只说明读请求到达远端;检查 A/B 两本账的相同 operation_id、顺序、冲突及重复执行,然后决定应用事务与同步策略。改变条件为 B 延迟或网络分区时,还需观察客户端超时后两边是否已各自执行。

官方参考与系列导航

系列导航:11 连接与负载均衡 → 31 多租户 → 32 多集群(本文)→ 33 性能对照。