3. Kubernetes 网络基础:Pod网络、Service、Ingress与NetworkPolicy核心概念

在深入 Helm 网络拓扑性能调优之前,必须建立对 Kubernetes 原生网络模型的清晰认知。本章将剖析四个核心网络抽象层:Pod 网络、Service、Ingress 以及 NetworkPolicy。理解这些组件的通信模型与性能瓶颈,是后续进行准入控制与调优的前提。

3.1 Pod 网络:扁平化与容器间通信

Kubernetes 要求每个 Pod 拥有独立的 IP 地址,且集群内所有 Pod 可以直接通过该 IP 通信,无需 NAT。这种“扁平网络”模型是设计 Service 和 NetworkPolicy 的基础。

  • 同一 Pod 内容器通信:共享网络命名空间(Network Namespace),通过 localhost 通信,延迟极低(通常 < 0.1ms)。
  • 跨节点 Pod 通信:依赖 CNI 插件(如 Calico、Flannel、Cilium)实现 Overlay 或路由模式。Overlay 模式(如 VXLAN)会引入额外的封装/解封装开销,增加延迟约 0.1-0.5ms,并降低有效带宽。
  • 性能关键点:MTU 配置、CNI 数据面模式(eBPF vs iptables)、节点间网络带宽与延迟。
调优提示:对于延迟敏感型工作负载,优先选择支持 eBPF 的 CNI(如 Cilium)并启用 Direct Routing 模式,避免 Overlay 封装带来的性能损耗。
Pod 网络通信模型 Pod 网络通信模型 Pod A 容器 1 (App) 容器 2 (Sidecar) IP: 10.1.1.2 Pod B 容器 1 (App) 容器 2 (Sidecar) IP: 10.1.2.3 localhost VXLAN / 路由 Node 1 Node 2 关键说明: 1. 同一 Pod 内容器通过 localhost 通信,延迟极低。 2. 跨节点 Pod 通信需经过 CNI 插件处理,Overlay 模式引入额外开销。 3. 扁平网络模型是 Service 和 NetworkPolicy 实现的基础。

3.2 Service:抽象负载均衡与流量分发

Service 为一组 Pod 提供稳定的虚拟 IP(ClusterIP)和 DNS 名称,实现客户端与后端 Pod 的解耦。其核心机制是 kube-proxy 组件,支持三种代理模式:

代理模式 工作原理 性能特征 适用场景
userspace kube-proxy 监听端口,代理到后端 Pod 高延迟、低吞吐(已弃用) 不推荐
iptables 利用 iptables NAT 规则进行随机转发 中等延迟、无缓存、规则更新 O(n) 中小规模集群(< 5000 服务)
IPVS 利用内核 IPVS 模块,基于哈希表调度 低延迟、高吞吐、规则更新 O(1) 大规模集群(> 5000 服务)
性能瓶颈警示:iptables 模式在服务数量超过 1000 时,规则链遍历会导致明显的延迟抖动(增加 2-5ms)。对于延迟敏感型应用,应切换至 IPVS 模式或使用 eBPF 替代方案。

3.3 Ingress:南北向流量入口与路由

Ingress 是集群外部访问内部服务的入口点,提供基于 HTTP/HTTPS 的路由、TLS 终止和虚拟主机功能。常见的 Ingress Controller 包括 Nginx、Traefik、HAProxy 和 AWS ALB。

  • 路由粒度:支持基于 Host 和 Path 的规则,将请求分发到不同的 Service。
  • TLS 终止:在 Ingress Controller 层解密 HTTPS 流量,减轻后端 Pod 的计算负担。
  • 性能关键点:Controller 的并发处理能力、TLS 握手开销、连接池管理、以及是否启用缓存和压缩。
# 示例:Nginx Ingress 配置
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    nginx.ingress.kubernetes.io/proxy-body-size: "10m"
    nginx.ingress.kubernetes.io/proxy-connect-timeout: "30"
spec:
  ingressClassName: nginx
  tls:
  - hosts:
    - app.example.com
    secretName: tls-secret
  rules:
  - host: app.example.com
    http:
      paths:
      - path: /api
        pathType: Prefix
        backend:
          service:
            name: api-service
            port:
              number: 8080

3.4 NetworkPolicy:微隔离与流量准入控制

NetworkPolicy 是 Kubernetes 原生的网络访问控制机制,通过标签选择器定义 Pod 之间以及 Pod 与外部端点之间的流量规则。它工作在 OSI 第 3/4 层(IP + 端口),部分实现(如 Cilium)可扩展至第 7 层。

策略类型 作用方向 默认行为 典型用例
Ingress 入站流量 允许所有入站 限制只有前端 Pod 能访问数据库
Egress 出站流量 允许所有出站 禁止 Pod 访问外部恶意域名
双向 入站 + 出站 全拒绝 零信任安全模型
性能影响:NetworkPolicy 规则的实现依赖于 CNI 插件。iptables 模式下,大量规则(> 5000 条)会导致显著的转发延迟。eBPF 模式(Cilium)可将规则匹配延迟降低至微秒级,是高性能场景的首选。
Service + Ingress + NetworkPolicy 流量路径 Service + Ingress + NetworkPolicy 流量路径 外部用户 Ingress Controller TLS 终止 / 路由 Service (ClusterIP) kube-proxy 负载均衡 NetworkPolicy 边界 (微隔离) Pod: frontend-v1 标签: app=frontend Pod: backend-v1 标签: app=backend Pod: db-v1 标签: app=database 拒绝 拒绝

3.5 核心概念总结与性能对照

组件 通信范围 主要性能瓶颈 调优方向
Pod 网络 Pod ↔ Pod CNI Overlay 封装、MTU 不匹配 启用 eBPF、Direct Routing、调整 MTU
Service Pod ↔ Service iptables 规则链遍历、连接跟踪表溢出 切换 IPVS 或 eBPF、优化 conntrack
Ingress 外部 ↔ Service TLS 握手、Controller 并发、连接池 启用 TLS 会话复用、调整 worker 数量
NetworkPolicy Pod ↔ Pod / 外部 规则数量、CNI 实现方式 使用 eBPF 实现、精简规则集