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 使用情况

    • 查看节点子网:

    kubectl get nodes -o custom-columns='NAME:.metadata.name,IP:.status.addresses[?(@.type=="InternalIP")].address,POD_CIDR:.spec.podCIDR'
    • 查看 Pod IP:
    kubectl get pods -o wide

    4. 插件工具

    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 IPPod CIDRPod 间通信CNI 插件根据节点/Pod 规模计算,避免冲突
    Cluster IPService CIDR服务发现与负载均衡kube-apiserver与 Pod CIDR 不重叠,中等大小
    External IP云或手动外部访问服务云控制器管理器通常自动管理

    更多推荐