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

相关推荐
Love Song残响1 小时前
深入解析TCP/IP协议栈:从底层到应用层
网络·tcp/ip·php
原神启动13 小时前
K8S(九)—— Kubernetes 集群调度全面解析
云原生·容器·kubernetes
m0_748245924 小时前
Docker 容器基本操作
运维·docker·容器
咋吃都不胖lyh5 小时前
Docker 是什么?全面解析容器化技术
运维·docker·容器
阿杰 AJie5 小时前
Docker 常用镜像启动参数对照表
运维·docker·容器
db_cy_20626 小时前
Docker+Kubernetes企业级容器化部署解决方案(阶段一)
docker·容器·kubernetes·云计算·负载均衡·运维开发
fy zs7 小时前
网络层IP协议的初步认识
服务器·网络·tcp/ip
last demo7 小时前
docker容器
运维·docker·容器
Y.O.U..7 小时前
Kurbenetes-Service(1)
容器·kubernetes
小快说网安8 小时前
硬核解析:高防 IP 是如何拦截 DDoS 攻击的?从清洗中心到流量调度
网络·tcp/ip·网络安全·ddos