节点创建:
apiserver 被调用 → 创建 Deployment/Pod 配置清单(存 etcd)
controller 监听 → 生成 "待创建 Pod" 的请求(提交给 apiserver)
scheduler 监听 → 给 Pod 分配目标节点(更新到 apiserver)
目标节点 kubelet 收到指令 → 拉镜像、创建 Pod 容器 → 调用 Calico 分配 Pod IP
kubelet 把 Pod IP 上报给 apiserver
Endpoint 控制器监听 → 把 Pod IP 加到 Endpoint 里 → 流程完毕。
pod请求
Pod ↔ Pod 直接通信
全程 = Calico 干活
无 VIP、无 kube-proxy、无翻译
Pod ↔ Service 通信
先访问 VIP
→ 本机 kube-proxy 翻译成 一个可用的 Pod IP
→ 再交给 Calico 路由发送
传统 Docker:端口是 "Node 级资源",抢 Node 上的端口用;
K8s+Calico:Pod 有自己的 "网络身份(IP)+ 端口空间",端口是 "Pod 级资源",不用抢 Node 的端口,Calico 只负责让这些 Pod IP 能跨 Node 互通。
| 场景 | IP 分配维度 | 核心执行者 | IP 特性 |
|---|---|---|---|
| 传统 Docker 容器 | Node 级 | Docker 本机网桥 | 仅 Node 内可达,需端口映射 |
| K8s Pod(Calico) | Pod 级 | Calico(CNI 插件) | 集群内可路由,跨 Node 直连 |
K8s Pod(Calico) Pod 级 Calico(CNI 插件) 集群内可路由,跨 Node 直连
简单说:
Docker 容器 IP 是 "Node 私有的",跨 Node 要借 Node 端口;
K8s + Calico 的 Pod IP 是 "集群公有的",每个 Pod 一个独立 IP,绑定在 pause 上,全集群能直接访问,不用抢 Node 端口。