Skip to content

01 - Kubernetes 网络模型

K8s 网络的四个层次

┌────────────────────────────────────────────────────────┐
│ 层次 4: 外部 → 集群                                     │
│         Ingress / LoadBalancer                          │
├────────────────────────────────────────────────────────┤
│ 层次 3: Service → Pod                                   │
│         ClusterIP / NodePort / kube-proxy               │
├────────────────────────────────────────────────────────┤
│ 层次 2: Pod → Pod(跨节点)                              │
│         CNI 插件(Calico / Flannel / Cilium)           │
├────────────────────────────────────────────────────────┤
│ 层次 1: 容器 → 容器(同 Pod 内)                         │
│         共享 Network Namespace,通过 localhost           │
└────────────────────────────────────────────────────────┘

K8s 网络基本原则

K8s 对网络有三个基本要求(不论具体实现方式):

  1. Pod 之间可以直接通信,不需要 NAT
  2. 节点与 Pod 之间可以直接通信,不需要 NAT
  3. Pod 看到的自己的 IP,和别人看到的一样

这些要求由 CNI 插件实现。


层次 1: 同 Pod 内容器通信

同一个 Pod 中的容器共享 Network Namespace:

  • 共享同一个 IP 地址
  • 通过 localhost 互相访问
  • 端口不能冲突
yaml
apiVersion: v1
kind: Pod
metadata:
  name: multi-container
spec:
  containers:
  - name: web
    image: nginx:alpine
    ports:
    - containerPort: 80
  - name: sidecar
    image: busybox
    command: ["sh", "-c", "while true; do wget -qO- localhost:80; sleep 5; done"]

层次 2: Pod 间通信(CNI)

什么是 CNI?

CNI(Container Network Interface)是 K8s 的网络插件标准。 负责为 Pod 分配 IP、设置路由,实现跨节点通信。

常见 CNI 插件

插件特点适用场景
CalicoBGP 路由,支持 NetworkPolicy大规模生产环境
Flannel简单 overlay 网络小规模/学习环境
Cilium基于 eBPF,高性能高性能需求、可观测性
Weave简单部署小规模环境

Docker Desktop 内置了简单的 CNI 实现,足够学习使用。 阿里云 ACK 使用 Terway(阿里云自研高性能 CNI)。


层次 3: Service 网络

已在前面章节详细讲解。核心要点:

  • ClusterIP 提供虚拟 IP
  • kube-proxy 通过 iptables/IPVS 实现转发
  • CoreDNS 提供服务发现

查看 kube-proxy 模式

bash
# 查看 kube-proxy 配置
kubectl get configmap kube-proxy -n kube-system -o yaml

iptables vs IPVS

特性iptablesIPVS
性能O(n) 规则匹配O(1) hash 查找
Service 数量<1000 Service>1000 Service
负载均衡随机多种算法(rr, lc, wlc 等)
复杂度简单稍复杂

层次 4: 外部访问

NodePort(已学)

  • 在每个节点上开放 30000-32767 端口
  • 简单但不够灵活

LoadBalancer(已学)

  • 依赖云厂商提供外部负载均衡器
  • 每个 Service 一个公网 IP(成本高)

Ingress(重点!)

  • 七层(HTTP/HTTPS)反向代理
  • 多个 Service 共享一个入口
  • 支持路径路由、域名路由、TLS 终止

下一步

02 - Ingress 详解