3. 日志平台网络架构:典型日志平台(如ELK/Loki)的微服务拓扑与网络依赖关系

在实施Cilium网络策略之前,必须精确理解日志平台的微服务拓扑与网络依赖关系。日志平台并非单一单体应用,而是由多个独立组件构成的分布式系统,组件之间通过特定的端口和协议进行通信。版本漂移(如从ELK 7.x迁移至8.x,或从Loki 2.x升级至3.x)会引入新的gRPC服务、TLS加密端口或组件拆分,导致原有的网络策略失效。本节以ELK(Elasticsearch, Logstash, Kibana)和Loki(Grafana Loki, Promtail, Grafana)两大主流体系为例,梳理其标准微服务拓扑与网络依赖清单。

3.1 ELK体系微服务拓扑与端口依赖

ELK体系在版本漂移中变化最频繁的是Elasticsearch的传输层(Transport)与HTTP层端口,以及Kibana与Elasticsearch之间的认证握手方式。下表列出ELK核心组件在7.x与8.x版本中的典型端口与服务依赖:

组件 服务角色 7.x 默认端口 8.x 默认端口 协议 依赖方向
Elasticsearch 数据存储/检索 9200 (HTTP)
9300 (Transport)
9200 (HTTP)
9300 (Transport)
9500 (gRPC, 可选)
HTTP / TCP / gRPC 被Logstash、Kibana、APM Server访问
Logstash 日志采集/解析 5044 (Beats)
9600 (监控API)
5044 (Beats)
9600 (监控API)
TCP / HTTP 接收Beats/Filebeat数据;输出至Elasticsearch
Kibana 可视化/UI 5601 5601 HTTP / HTTPS 访问Elasticsearch 9200;被用户浏览器访问
Filebeat 轻量日志采集器 无监听端口(主动连接) 无监听端口(主动连接) TCP / TLS 连接Logstash 5044 或 Elasticsearch 9200
APM Server 应用性能监控 8200 8200 HTTP / gRPC 接收APM Agent数据;输出至Elasticsearch
版本漂移关键点: Elasticsearch 8.x 默认启用安全特性(TLS + 身份认证),HTTP端口9200必须使用HTTPS,且Transport端口9300强制要求证书交换。如果Cilium网络策略仅放行TCP 9200而未指定TLS握手所需的证书命名空间或SNI,会导致Kibana连接失败。此外,8.x新增的gRPC端口9500(用于跨集群搜索)在策略中极易被遗漏。

ELK体系的标准微服务拓扑呈现为扇入-汇聚-扇出模式:

  • 采集层(扇入): Filebeat / Metricbeat / Heartbeat 等Beats采集器从业务Pod发送日志至Logstash或直接写入Elasticsearch。
  • 处理层(汇聚): Logstash接收多路数据流,进行过滤、解析、缓冲后转发至Elasticsearch集群。
  • 存储与查询层(扇出): Elasticsearch集群内部节点间通过Transport端口9300进行数据分片复制与选举;Kibana从Elasticsearch读取索引数据并提供给用户。
ELK体系微服务拓扑与网络依赖 ELK体系微服务拓扑与网络依赖(7.x / 8.x) Filebeat Metricbeat APM Agent 采集层(扇入) Logstash 处理层(汇聚) Elasticsearch 集群 9200 (HTTP) / 9300 (Transport) / 9500 (gRPC) 存储与查询层(扇出) Kibana 可视化层 说明:8.x版本新增gRPC端口9500,且9200/9300默认启用TLS,Cilium策略需放行HTTPS与证书SNI。

3.2 Loki体系微服务拓扑与端口依赖

Loki体系在版本漂移中主要变化集中在组件拆分与gRPC通信。Loki 2.x采用单体模式运行,而Loki 3.x(及更高版本)推荐微服务模式,将读取、写入、查询前端拆分为独立Deployment。下表列出Loki体系核心组件的端口与服务依赖:

组件 服务角色 2.x 默认端口 3.x 默认端口 协议 依赖方向
Loki (单体) 日志存储/查询 3100 (HTTP)
9095 (gRPC)
—(已拆分) HTTP / gRPC 接收Promtail数据;被Grafana查询
Loki Write 写入路径 — 3100 (HTTP)
9095 (gRPC)
HTTP / gRPC 接收Promtail数据;转发至Ingester
Loki Read 读取路径 — 3100 (HTTP)
9095 (gRPC)
HTTP / gRPC 接收Grafana查询;转发至Querier
Loki Query Frontend 查询加速/缓存 — 3100 (HTTP) HTTP 接收Grafana查询;转发至Read
Promtail 日志采集器 无监听端口(主动连接) 无监听端口(主动连接) HTTP / gRPC 连接Loki Write 3100 或 单体Loki 3100
Grafana 可视化/UI 3000 3000 HTTP / HTTPS 连接Loki Read 3100 或 Query Frontend 3100
Minio / S3 对象存储(后端) 9000 (API) 9000 (API) HTTP 被Loki Ingester/Index Gateway访问
策略适配要点: Loki 3.x微服务模式下,Write、Read、Query Frontend、Ingester、Index Gateway等组件之间通过gRPC(端口9095)进行内部通信。Cilium网络策略必须显式放行这些组件之间的gRPC流量,且通常需要基于标签选择器(如app.kubernetes.io/component: write)而非IP段来定义策略,以应对Pod重启后的IP变化。

Loki体系的标准微服务拓扑呈现为写路径与读路径分离的CQRS模式:

  • 写路径: Promtail → Loki Write → Ingester → 对象存储(Minio/S3)。
  • 读路径: Grafana → Loki Query Frontend → Loki Read → Querier → 对象存储。
  • 内部协调: Ingester与Index Gateway之间通过gRPC同步元数据;Distributor负责负载均衡。
Loki体系微服务拓扑(CQRS写读分离) Loki体系微服务拓扑(CQRS写读分离) 写路径 Promtail Loki Write Ingester Minio/S3 读路径 Grafana Query Frontend Loki Read Minio/S3 内部协调(gRPC 9095) Distributor Index Gateway Querier 说明:Loki 3.x微服务模式下,Write/Read/Query Frontend/Ingester/Index Gateway之间通过gRPC 9095通信。 Cilium策略需基于标签选择器放行gRPC流量,并确保对象存储Minio/S3的API端口9000可达。

3.3 网络依赖关系清单与策略映射

基于上述拓扑分析,可以提炼出日志平台通用的网络依赖关系清单。该清单是后续编写Cilium网络策略的输入条件:

源组件 目标组件 端口/协议 用途 版本漂移风险
Promtail / Filebeat Loki Write / Logstash 3100 (HTTP) / 5044 (TCP) 日志推送 低(端口稳定)
Logstash Elasticsearch 9200 (HTTP/HTTPS) 日志写入 高(8.x强制TLS)
Kibana / Grafana Elasticsearch / Loki Read 9200 (HTTPS) / 3100 (HTTP) 查询/可视化 中(认证方式变化)
Elasticsearch 节点间 Elasticsearch 节点间 9300 (TCP/TLS) 集群内部复制 高(8.x证书交换)
Loki Write → Ingester Loki Ingester 9095 (gRPC) 写入路径转发 中(3.x新增组件)
Loki Query Frontend → Read Loki Read 9095 (gRPC) 查询路径转发 中(3.x新增组件)
Loki Ingester → Minio/S3 Minio/S3 9000 (HTTP) 数据持久化 低(端口稳定)
策略映射原则: 每个依赖关系对应一条Cilium NetworkPolicy规则。规则中必须明确指定:
  • 源端标签: 如 app.kubernetes.io/component: promtail
  • 目标端标签: 如 app.kubernetes.io/component: loki-write
  • 端口与协议: 如 port: 3100, protocol: TCP
  • TLS/SNI规则(如适用): 如 toFQDN: elasticsearch.example.com 或 serverNames: ["*.es.cluster.local"]
版本漂移后,必须重新审查每个依赖关系的端口、协议与认证方式,避免策略遗漏。