K8S Advance: 集群 IP 地址管理指南

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 | 云或手动 | 外部访问服务 | 云控制器管理器 | 通常自动管理 |

相关推荐
b***62951 小时前
使用Docker部署postgresql
docker·postgresql·容器
Liangomy1 小时前
FAST-Calib 激光雷达与相机联合标定教程 (Docker版)
数码相机·docker·容器
de之梦-御风2 小时前
【远程控制】RustDesk 自建服务端完整方案(Docker + Windows 客户端)
windows·docker·容器
de之梦-御风2 小时前
【远程控制】开箱即用的 RustDesk 自建服务端完整 Docker Compose 模板
运维·docker·容器
悟空码字2 小时前
Kubernetes实战:你的分布式系统“保姆”养成记
java·后端·kubernetes
EleganceJiaBao2 小时前
【ESP8266】使用 ESP8266 + CoolTerm + Packet Sender 构建 TCP 通信的完整调试流程
网络协议·tcp/ip·wi-fi·esp8266·coolterm·packet sender
老蒋新思维2 小时前
创客匠人 2025 峰会启示:AI 重构企业管理领域知识变现的效率逻辑
人工智能·网络协议·tcp/ip·重构·知识付费·创始人ip·创客匠人
g***55752 小时前
详解 为什么 tcp 会出现 粘包 拆包 问题
网络·tcp/ip·php
努力也学不会java3 小时前
【docker】Docker Register(镜像仓库)
运维·人工智能·机器学习·docker·容器