网络核心 - CNI、Service 与 Ingress/Gateway API 解析
Kubernetes 的强大之处在于它极大地简化了容器化应用的部署和管理,但其网络模型的灵活性和复杂性也常常让初学者感到困惑。作为 SRE,我们需要拨开迷雾,理解流量在 K8s 集群内部以及进出集群时,到底是如何流转的。
Pod 网络基础:谁给 Pod 分配 IP?(CNI)
我们知道,在 K8s 中,每个 Pod 都拥有自己唯一的 IP 地址。这是实现“一个 Pod一个 IP”模型的关键,它简化了应用的网络配置(应用可以直接监听自己的端口,无需担心端口冲突)。但这个 IP 地址是谁分配的?Pod 之间的网络是如何打通的?
答案是 CNI (Container Network Interface) 插件。
- CNI 是什么? 它不是一个具体的软件,而是一套接口规范(由 CNCF 维护)。它定义了容器运行时(如 Docker, containerd)与网络插件之间的标准交互方式,用于配置容器(Pod)的网络。Kubernetes 本身不负责具体的 Pod 网络实现,而是委托给符合 CNI 规范的网络插件来完成。
- CNI 插件如何工作(简化流程):
- 当一个 Pod 被调度到某个 Node 上时,该 Node 上的
kubelet
进程会调用配置好的 CNI 插件。 - CNI 插件负责为这个 Pod 分配一个 IP 地址(通常从该 Node 分到的一个 Pod CIDR 网段中获取)。
- 插件会在 Node 上创建必要的网络设备(例如,一对
veth
设备,一端连接 Pod 的网络命名空间,另一端连接 Node 的根网络命名空间),并配置相应的 IP 地址、路由规则、网桥等,从而将 Pod 连接到集群网络中。 - 不同的 CNI 插件使用不同的技术来实现 Pod 间的通信(可能是 Overlay
- 当一个 Pod 被调度到某个 Node 上时,该 Node 上的