51·网络进阶

Kubernetes 网络模型

kubernetesnetworkingconcept

Kubernetes 网络模型

学习目标

  1. 理解 Kubernetes 网络模型的基本原则
  2. 掌握 Pod 间、节点间、集群外通信的网络要求
  3. 了解 Kubernetes 网络模型与其他网络方案的区别

核心概念

一句话解释

Kubernetes 网络模型定义了 Pod、节点和外部服务之间通信的基本规则,核心原则是每个 Pod 都有一个唯一的 IP 地址。

网络模型三大原则

原则 1:每个 Pod 有一个唯一的 IP 地址
┌─────────────────────────────────────────┐
│              Node 1                      │
│  ┌─────────┐  ┌─────────┐  ┌─────────┐ │
│  │  Pod A  │  │  Pod B  │  │  Pod C  │ │
│  │ 10.1.1.2│  │ 10.1.1.3│  │ 10.1.1.4│ │
│  └─────────┘  └─────────┘  └─────────┘ │
└─────────────────────────────────────────┘

原则 2:所有 Pod 可以不经过 NAT 直接通信
┌─────────────────────────────────────────────────────┐
│                    Kubernetes 集群                    │
│  ┌─────────────────────┐  ┌─────────────────────┐  │
│  │       Node 1        │  │       Node 2        │  │
│  │  ┌─────┐  ┌─────┐  │  │  ┌─────┐  ┌─────┐  │  │
│  │  │Pod A│  │Pod B│  │  │  │Pod C│  │Pod D│  │  │
│  │  └──┬──┘  └──┬──┘  │  │  └──┬──┘  └──┬──┘  │  │
│  └─────┼────────┼──────┘  └─────┼────────┼──────┘  │
│        └────────┴────────────────┴────────┘         │
│              直接通信,无需 NAT                       │
└─────────────────────────────────────────────────────┘

原则 3:节点上的 Agent 可以与该节点上所有 Pod 通信
┌─────────────────────────────────────────┐
│              Node                        │
│  ┌─────────────────────────────────────┐│
│  │  kubelet, kube-proxy                ││
│  │       ↓ 直接通信                     ││
│  │  ┌─────┐  ┌─────┐  ┌─────┐        ││
│  │  │Pod A│  │Pod B│  │Pod C│        ││
│  │  └─────┘  └─────┘  └─────┘        ││
│  └─────────────────────────────────────┘│
└─────────────────────────────────────────┘

网络通信场景

场景说明实现方式
Pod-to-Pod同一节点 Pod 间通信通过网桥直接通信
Pod-to-Pod不同节点 Pod 间通信CNI 插件实现(如 VXLAN、BGP)
Pod-to-ServicePod 访问 Servicekube-proxy + iptables/IPVS
External-to-Service外部访问 ServiceNodePort / LoadBalancer / Ingress

与 Docker 网络对比

方面Docker 默认网络Kubernetes 网络模型
IP 分配每个容器有自己的 IP每个 Pod 有唯一的 IP
通信方式需要端口映射直接通信,无需 NAT
跨节点需要额外配置CNI 插件自动实现
服务发现内置 Service + DNS

网络模型实现

Kubernetes 网络模型是规范,不是实现

需要 CNI 插件来实现:
┌─────────────────────────────────────────────────────┐
│                   Kubernetes                        │
│                      ↓                              │
│              CNI (容器网络接口)                       │
│         ┌───────────┼───────────┐                   │
│         ↓           ↓           ↓                   │
│     ┌───────┐  ┌────────┐  ┌────────┐              │
│     │ Calico│  │ Flannel│  │  Cilium│              │
│     └───────┘  └────────┘  └────────┘              │
└─────────────────────────────────────────────────────┘

实践练习

练习 1:理解网络模型

回答以下问题:

  1. Kubernetes 网络模型的三大原则是什么?
  2. 为什么 Kubernetes 要求 Pod 间可以直接通信而不经过 NAT?
  3. CNI 插件的作用是什么?

练习 2:查看 Pod 网络

# 创建测试 Pod
kubectl run test-pod --image=nginx --dry-run=client -o yaml > pod.yaml
kubectl apply -f pod.yaml

# 查看 Pod IP
kubectl get pod test-pod -o wide

# 进入 Pod 查看网络配置
kubectl exec -it test-pod -- ip addr
kubectl exec -it test-pod -- cat /etc/resolv.conf

练习 3:测试 Pod 间通信

# 创建两个 Pod
kubectl run pod-a --image=busybox --command -- sleep 3600
kubectl run pod-b --image=nginx

# 获取 Pod B 的 IP
POD_B_IP=$(kubectl get pod pod-b -o jsonpath='{.status.podIP}')

# 从 Pod A 访问 Pod B
kubectl exec pod-a -- wget -qO- http://$POD_B_IP

常见误解

1. Kubernetes 网络模型是具体的实现

错误理解:Kubernetes 自己实现了网络
正确理解:Kubernetes 定义了网络规范,由 CNI 插件实现

2. Pod IP 是稳定的

错误理解:Pod IP 永远不变
正确理解:Pod 重建后 IP 会变化,所以需要 Service

Pod 重启/重建 → IP 变化 → Service 提供稳定入口

小结

要点说明
网络模型定义 Pod、节点、外部通信规则
核心原则Pod 唯一 IP、无 NAT 直接通信
实现方式通过 CNI 插件实现
通信场景Pod-to-Pod、Pod-to-Service、External-to-Service
与 Docker 对比Kubernetes 网络更简单,无需端口映射

练习编辑器

bash
Loading...

继续学习

完成本课后,建议继续学习下一课「Pod 网络」 以巩固所学知识。