Kubernetes 网络模型要求每个 Pod 都拥有一个唯一的 IP 地址,并且这些 Pod 之间可以直接通信,无需 NAT。IP 地址管理(IPAM)是集群规划和运维中的核心环节。不当的 IP 规划可能导致节点资源耗尽、Pod 无法调度或网络冲突。
一、Kubernetes 中的 IP 地址类型
Node IP
-
集群中每个物理机或虚拟机的 IP 地址,通常来自宿主机网络接口。
-
用途:节点间通信、与外部网络交互。
-
注意:kubectl get nodes -o wide 中的 INTERNAL-IP 即 Node IP。
Pod IP
-
每个 Pod 分配的 IP 地址,来源于 Pod CIDR。
-
用途:Pod 之间通信。
-
通过 CNI 插件管理,默认情况下外部不可访问。
Cluster IP
-
Service 的虚拟 IP(VIP),用于负载均衡和服务发现。
-
来源:Service CIDR。
-
用途:集群内部访问服务。
External IP / LoadBalancer IP
-
用于将 Service 暴露到集群外部。
-
来源:云提供商或手动分配。
-
用途:外部访问服务。
二、核心 CIDR 规划
CIDR (Classless Inter-Domain Routing,无类别域间路由):是一种 IP 地址分配和路由的表示方法,用于更高效地划分和管理 IP 地址空间。
1. Pod CIDR
-
用途:分配 Pod 的 IP。
-
设置方式:kube-controller-manager --cluster-cidr=<CIDR> 或由 CNI 插件管理。
-
规划建议:
-
计算公式:最大节点数 × 每节点最大 Pod 数
-
示例:100 节点 × 50 Pod = 5000 IP → 可选 /19(8192 IP)
-
避免与内网、VPC 等冲突,建议使用私有网段 10.244.0.0/16、192.168.0.0/16、172.16.0.0/12。
-
2. Service Cluster CIDR
-
用途:分配 ClusterIP。
-
设置方式:kube-apiserver --service-cluster-ip-range=<CIDR>
-
规划建议:
-
Service 数量通常少于 Pod,/20 或 /16 足够。
-
必须与 Pod CIDR 不重叠。
-
3. Node 网络
-
节点 IP 必须能与 Pod/Service 网络互通。
-
一般由 CNI 插件设置覆盖网络或路由规则。
三、CNI 插件与 IPAM
IPAM(IP Address Management,IP地址管理)是指对IP地址空间进行规划、分配、跟踪和管理的系统或机制。在云原生和容器网络(如 Kubernetes)中,IPAM 是网络基础设施的关键组成部分。
Host-local IPAM
(如 Flannel 默认方式):
-
每个节点从 Pod CIDR 中分配固定子网(如 /24)。
-
优点:简单高效,缺点:子网固定,扩容需规划
集中式 IPAM
(如 Calico BGP/IPIP 模式):
-
管理全局 IP 池,可支持非连续 IP 分配。
-
支持灵活扩容和多集群 IP 管理。
关键点:CIDR 规划必须与 CNI 插件的 IPAM 策略匹配,否则可能出现调度失败或 IP 冲突。
四、管理实践与最佳策略
1. 预留空间
-
为未来扩容预留 20-30% IP 地址。
-
示例:需要 5000 个 IP → 分配 6500+。
2. 使用大 CIDR 并合理划分子网
-
Pod CIDR /16 → 每节点分 /24。
-
优点:集中管理,避免频繁调整。
3. 监控 IP 使用情况
- 查看节点子网:
bash
kubectl get nodes -o custom-columns='NAME:.metadata.name,IP:.status.addresses[?(@.type=="InternalIP")].address,POD_CIDR:.spec.podCIDR'
- 查看 Pod IP:
bash
kubectl get pods -o wide
4. 插件工具
bash
Calico:calicoctl ipam show --show-blocks
Cilium:cilium status
5. 处理 IP 耗尽
**根本原因:**节点子网过小或 Pod 密度过高。
解决方法:
扩展 IP 池(动态 CNI)。
调整节点子网大小(谨慎操作,可能需要节点排水)。
增加新节点(最常用方案,配合 Cluster Autoscaler)。
6. Service 网络管理
-
ClusterIP 自动管理,使用 kubectl get svc 查看。
-
可通过 spec.clusterIP 指定固定 IP(需在 CIDR 范围内且未被占用)。
五、总结表格
|-------------|--------------|-----------|----------------|------------------------|
| IP 类型 | 来源 | 用途 | 管理方 | 核心规划点 |
| 核心规划点 | 主机网络 | 主机网络 | 基础设施/云 | 与 Pod/Service CIDR 可路由 |
| Pod IP | Pod CIDR | Pod 间通信 | CNI 插件 | 根据节点/Pod 规模计算,避免冲突 |
| Cluster IP | Service CIDR | 服务发现与负载均衡 | kube-apiserver | 与 Pod CIDR 不重叠,中等大小 |
| External IP | 云或手动 | 外部访问服务 | 云控制器管理器 | 通常自动管理 |