【Cilium / eBPF】ClusterMesh:多集群身份、服务发现与明确不保证

💡 原文中文,约6300字,阅读约需15分钟。
📝

内容提要

ClusterMesh 提供跨集群 Pod 连通、身份感知策略及服务发现,但非强一致或高可用保证。其依赖相同配置、无冲突 CIDR 及同步状态,存在身份容量限制与同步滞后风险。运维需关注集群 ID 固定、地址规划及同步状态,避免误将网络连通视为应用 HA。

🔎

延伸解读

身份空间是硬编码权衡

maxConnectedClusters 决定身份位数分配:255 档支持 65535 个本地身份,511 档则压缩到 32767。全 mesh 必须统一配置,安装后更改可能导致连接中断和策略误判。标签基数大的集群在 511 档更易耗尽身份,规划时需评估身份容量与集群规模。

同步滞后是策略失败主因

跨集群策略依赖远端身份同步,滞后时本地 map 缺少远端 ID,导致本应放行的流量被拒。分区恢复后可能出现双向不一致,直到 kvstoremesh 追平。排障时需同时检查连接状态、远端集群数和同步进度,而非仅看 Pod Ready。

网络连通不等于应用高可用

ClusterMesh 只提供网络与策略平面,不复制数据或保证应用状态。跨集群访问依赖底层路由和地址规划,Pod CIDR 冲突会导致间歇黑洞。将 RPO/RTO 寄托于 ClusterMesh 是架构错误,数据复制需依赖存储或数据库方案。

信任边界随 mesh 放大

加入 mesh 后,远端集群的身份供给成为本地策略的输入。若远端标签被恶意修改,本地策略会正确执行错误身份。治理上需限制可连接集群、规范证书轮换,并确保各集群标签准入一致,避免信任被滥用。

Q&A

Cilium ClusterMesh 主要提供哪些跨集群能力?

ClusterMesh 主要提供三件事:跨集群的 Pod 间连通(在扁平地址空间假设下节点间直连转发)、集群感知的 NetworkPolicy(selector 可表达远端集群身份)、以及可选的跨集群服务发现与负载均衡(含 affinity 控制)。

ClusterMesh 中 maxConnectedClusters 参数的作用和限制是什么?

maxConnectedClusters 决定集群数量上限和单集群身份容量之间的权衡。例如,默认 255 个集群时,单集群最大身份数为 65535;若设为 511,则单集群身份数降为 32767。所有集群必须配置相同的值,且需在安装时设定,运行中更改可能导致连接中断和策略强制错误。

ClusterMesh 明确不保证哪些事情?

ClusterMesh 不保证:跨集群强一致控制面(同步是最终一致)、统一故障域(一个集群故障不影响另一个数据面,但跨集群策略/服务会降级)、任意网络拓扑(要求 Pod CIDR 不冲突)、替代服务网格多集群(不提供 Istio 式全套流量拆分)、替代备份与状态复制(不复制 PV/数据库)、加密与合规自动满足(需另开透明加密)、Hubble 全球因果序、无限集群扩展(受 maxConnectedClusters 限制)、改 cluster ID 无感(需重启工作负载重建身份)。

跨集群 NetworkPolicy 在同步滞后时会出现什么失败模式?

同步滞后时,本地策略编译可能缺少远端身份映射,导致本应放行的流量被拒绝。分区恢复后可能出现短暂双向不一致,直到 kvstoremesh 追平。这与单集群中策略编译输入不完整的情况类似。

ClusterMesh 中跨集群服务发现(MCS API)有哪些前提条件?

需要按 API 配置服务导出/导入对象,后端就绪且身份同步,调用方集群的 DNS/客户端行为符合该 API 模型。它不是自动的全球 Anycast,客户端可能缓存旧后端,优雅终止和 EndpointSlice 条件在多集群下更复杂。

ClusterMesh 对 Pod CIDR 和网络拓扑有什么要求?

要求 Pod CIDR(及需要时的节点 CIDR)不得冲突,底层要有路由或隧道把远端 Pod IP 送到正确节点。ClusterMesh 不会做 NAT 重整地址空间,地址冲突会导致间歇黑洞或错误宿主机接收。

如何判断 ClusterMesh 控制面是否健康?

健康检查应同时看连接状态、远端集群数、同步是否追平(具体字段以 cilium clustermesh status 输出语义为准),而不是只看 Pod Ready。mTLS 握手成功只说明控制面通道在,若 kvstoremesh 落后,agent 仍可能用陈旧远端服务后端编程。

ClusterMesh 中 cluster ID 或 name 变更后需要做什么?

文档要求变更运行中集群的 cluster ID/name 后,需要重启工作负载以重建身份,否则跨集群访问会坏。

🏷️

标签

➡️

继续阅读