Pod CIDR 是什么
集群会给每个节点从 Pod 网段中分一块子网(node.spec.podCIDR),Pod 的 IP 就从这块子网里取。CNI 插件按分配结果在节点上建路由或隧道,让不同节点的 Pod 能直接互通,因此这块子网的位宽同时决定了单节点最多能跑多少 Pod。规划时要守住三条线:节点网段、Service 网段(--service-cluster-ip-range)与 Pod 网段(--cluster-cidr)互不重叠,也不能与办公网、专线对端、云上其他 VPC 冲突。
基本信息
| 适用平台 | Kubernetes 集群(kube-controller-manager 分配,CNI 负责落实) |
|---|---|
| 关键字段 | node.spec.podCIDR;双栈集群另有 node.spec.podCIDRs |
| 集群参数 | --cluster-cidr、--service-cluster-ip-range,在控制面组件上配置 |
| 查看方式 | kubectl get nodes 自定义列,或读取节点对象的 spec |
| 规划红线 | 三类网段互不重叠,且不使用保留地址段 |
典型使用场景
- 新建集群前做网段规划:与现有 IDC、VPC、专线网段一起拿到同一张表上核对
- 集群扩容受阻时核对剩余可分配子网,判断是网段位宽不够还是分配项耗尽
- 接入新业务网段或专线前,检查是否与 Pod 网段重叠
- 双栈改造时确认 podCIDRs 同时包含 IPv4 与 IPv6 两段
- 排查跨节点 Pod 不通时,先确认双方 CIDR 与 CNI 路由是否一致
查看分配情况
查看分配情况
kubectl get node node-1 -o jsonpath='{.spec.podCIDR}'
kubectl get nodes -o custom-columns='NODE:.metadata.name,PODCIDR:.spec.podCIDR,INTERNAL:.status.addresses[0].address'
kubectl get svc kubernetes -n default -o jsonpath='{.spec.clusterIP}' # 对照 Service 网段起点
kubectl -n kube-system get pods -o wide | grep -i -E 'calico|cilium|flannel' # 定位 CNI 组件三类网段对照
| 网段 | 用途 | 规划注意 |
|---|---|---|
| 节点网段 | 宿主机之间通信 | 不能与 Pod、Service 网段重叠 |
| Pod CIDR | Pod IP 分配池 | 位宽决定单节点可承载的 Pod 数 |
| Service CIDR | Service 虚拟 IP | 与 Pod 网段必须错开,创建后难改 |
| 保留网段 | 如 169.254.0.0/16、100.64.0.0/10 | 不要选进任何一类,避免链路本地与运营商地址冲突 |
按节点均分子网时,节点数上限等于 Pod 网段可切出的子网数量:例如用 /24 切 /24 只能有一个节点,用 /16 切 /24 最多 256 个节点,容量评估要留出冗余。
Pod 网段在集群创建后基本无法调整:改动意味着重建 CNI 与重分配全部 Pod IP,属于停机级变更,规划阶段多花十分钟比事后迁移划算。