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 封装带来的性能损耗。
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)可将规则匹配延迟降低至微秒级,是高性能场景的首选。
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 实现、精简规则集 |