3. 跨集群网络拓扑:Hub-Spoke、Mesh、联邦架构下的日志采集路径

在多集群 Kubernetes 环境中,日志采集的路径设计直接受底层网络拓扑的制约。不同的拓扑结构决定了 Fluent Bit 的 Agent 部署位置、数据聚合方式以及跨集群传输的跳数。本章深入分析三种主流跨集群拓扑——Hub-Spoke(星型)、Mesh(网状)和联邦(Federation)——下的日志采集路径,并给出每种架构的适用场景与性能权衡。

3.1 Hub-Spoke 拓扑:中心化聚合路径

Hub-Spoke 是最常见的跨集群日志采集模式。一个中心集群(Hub)作为日志汇聚点,多个工作集群(Spoke)将日志单向推送到 Hub。Fluent Bit 在 Spoke 集群中作为 DaemonSet 采集节点日志,通过 Fluent Bit Forward 协议或 HTTP Output 将数据发送至 Hub 集群的 Fluent Bit Aggregator。

采集路径示意:
Spoke 集群 Pod → Fluent Bit Agent(DaemonSet)→ 跨集群网络出口 → Hub 集群 Fluent Bit Aggregator → 后端存储(Elasticsearch / S3)
Hub-Spoke 日志采集路径 Spoke 集群 1 Fluent Bit Agent DaemonSet 采集 节点日志 / 容器日志 → Forward 输出 Spoke 集群 2 Fluent Bit Agent DaemonSet 采集 节点日志 / 容器日志 → Forward 输出 Hub 集群(中心汇聚) Fluent Bit Aggregator 多路 Forward 输入 数据去重 / 过滤 / 路由 → 后端存储 Elasticsearch / S3 特点:单向推送、中心瓶颈、网络策略简单、适合中小规模(≤20 集群)
性能调优要点: Hub 集群的 Fluent Bit Aggregator 需要配置足够的 workers 和 storage.backlog.mem_limit,避免单点背压。建议在 Spoke 端启用 retry_limit 和 compress gzip 以减少网络带宽消耗。

3.2 Mesh 拓扑:对等互联路径

Mesh 拓扑中,每个集群既是生产者也是消费者,Fluent Bit 实例之间建立全互联或部分互联的日志通道。这种架构适合需要跨集群实时日志关联分析的场景,例如微服务调用链追踪。采集路径通常为:

  • 本地采集: 每个集群的 Fluent Bit Agent 采集本集群 Pod 日志。
  • 对等转发: 根据日志标签或路由规则,将特定日志流(如 service-a 的日志)转发到对应集群的 Fluent Bit 实例。
  • 聚合输出: 每个集群的 Fluent Bit 同时承担本地输出和远程转发双重角色。
Mesh 对等互联日志采集路径 集群 A Fluent Bit Agent 本地采集 + 对等转发 日志标签: service-a 集群 B Fluent Bit Agent 本地采集 + 对等转发 日志标签: service-b 集群 C Fluent Bit Agent 本地采集 + 对等转发 日志标签: service-c 全互联 Mesh:每个集群与所有其他集群建立双向日志通道,适合 3~8 个集群的中型规模 部分互联 Mesh:仅对特定服务依赖的集群建立通道,减少连接数 每个集群独立输出到本地存储或全局存储
网络复杂度警告: Mesh 拓扑的连接数呈 O(n²) 增长。当集群数量超过 10 个时,建议使用部分互联或引入中间代理层,否则 Fluent Bit 的 TCP 连接数和 TLS 握手开销会显著增加内存与 CPU 消耗。

3.3 联邦架构:分层聚合路径

联邦架构(Federation)结合了 Hub-Spoke 的集中性和 Mesh 的灵活性。它通过引入区域聚合层(Regional Aggregator),将集群分组管理。每个区域内的集群采用 Hub-Spoke 模式,区域之间通过联邦层进行日志交换。这种架构适合超大规模(50+ 集群)的全球化部署。

层级 组件 采集路径 网络要求
L1:节点层 Fluent Bit DaemonSet Pod 日志 → 节点缓存 → 区域聚合器 集群内网络,低延迟
L2:区域层 Fluent Bit Aggregator(StatefulSet) 多路 Forward 输入 → 去重 → 路由到联邦层 跨集群 VPN / 专线,中等带宽
L3:联邦层 Fluent Bit 联邦网关 区域日志汇聚 → 全局路由 → 后端存储 高带宽骨干网,TLS 加密
联邦架构分层日志采集路径 区域 1(亚太) 集群 A 集群 B 集群 C 区域聚合器 区域 2(欧洲) 集群 D 集群 E 集群 F 区域聚合器 联邦网关(Global Aggregator) 区域日志汇聚 → 全局路由 → 去重 → 输出 全局后端存储(ES / S3 / Kafka) 联邦架构适合 50+ 集群的全球化部署,区域聚合器可减少联邦层的连接数

3.4 三种拓扑对比与选型建议

维度 Hub-Spoke Mesh 联邦(Federation)
集群规模 ≤ 20 个 3 ~ 10 个 50+ 个
网络连接数 O(n) — 每个 Spoke 到 Hub O(n²) — 全互联 O(n) — 区域聚合后到联邦
延迟 低(单向推送) 中(双向对等) 中高(多层转发)
运维复杂度 低 — 中心化管理 高 — 需维护对等 TLS 中 — 分层管理
Fluent Bit 配置 Spoke 端 Output → Hub 端 Input 每个集群配置多个 Forward Output 区域聚合器配置路由规则
典型场景 开发/测试环境、中小规模生产 微服务调用链追踪、实时关联分析 全球化多区域部署、合规数据隔离
选型建议: 如果团队运维能力有限且集群数量少于 20,优先选择 Hub-Spoke。如果需要跨集群实时日志关联且集群数量可控,Mesh 是更好的选择。对于超大规模全球化部署,联邦架构是唯一能平衡性能与可管理性的方案。

3.5 跨集群采集路径的 Fluent Bit 配置示例

以下是一个 Hub-Spoke 架构中 Spoke 集群的 Fluent Bit 配置片段,展示如何将日志通过 Forward 协议发送到 Hub 集群:

[INPUT]
    Name              tail
    Path              /var/log/containers/*.log
    Parser            docker
    Tag               kube.*
    Refresh_Interval  5
    Mem_Buf_Limit     50MB
    Skip_Long_Lines   On

[OUTPUT]
    Name              forward
    Match             kube.*
    Host              hub-cluster-logging.example.com
    Port              24224
    Shared_Key        my_secret_key
    Compress          gzip
    Retry_Limit       5
    storage.total_limit_size 2G

在 Hub 集群的 Fluent Bit Aggregator 中,对应的 Input 配置:

[INPUT]
    Name              forward
    Listen            0.0.0.0
    Port              24224
    Buffer_Max_Size   10M
    Buffer_Chunk_Size 512K
    Shared_Key        my_secret_key

[OUTPUT]
    Name              es
    Match             kube.*
    Host              elasticsearch-hub
    Port              9200
    Index             fluentbit-${TAG}
    Type              _doc
    Retry_Limit       3
安全注意事项: 跨集群传输必须启用 TLS 加密和 Shared_Key 认证。避免在公网暴露 Fluent Bit Forward 端口。建议使用 Kubernetes NetworkPolicy 或服务网格(如 Istio)限制跨集群流量。