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)
Spoke 集群 Pod → Fluent Bit Agent(DaemonSet)→ 跨集群网络出口 → Hub 集群 Fluent Bit Aggregator → 后端存储(Elasticsearch / S3)
性能调优要点: 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 拓扑的连接数呈 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 加密 |
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)限制跨集群流量。