当前位置: 首页 > news >正文

K8s 集群 IP 地址管理指南(K8s Cluster IP Address Management Guide)

K8s 集群 IP 地址管理指南

概述

你是否在小型初创公司或大型企业工作,并正在为公司评估 Kubernetes?你可能正在考虑运行十几个或更多的 Kubernetes (K8s) 集群。你期望每个集群支持几百个 K8s 节点,每个节点可能有 50 到 100 个 K8s Pod。这是否足以作为你的 IP 地址管理 (IPAM) 策略的一部分?那么K8s 服务 呢?你是否有运行在 K8s 之外的应用程序需要与 K8s 上的应用程序通信?反之亦然?

为了理解 K8s 集群的 IP 地址需求,我们首先深入了解它支持的网络模型及其背后的原因。

网络模型

  1. 所有 Pod 可以在同一集群内相互通信,无需 NAT

  2. 所有 Pod 可以与服务通信,无需 NAT

  3. 不应有 IP 重叠

上述网络模型提供了以下优势:

  1. Pod 可移动性:每个 Pod 都有自己的 IP,该 IP 不与 Pod 运行的节点绑定。这意味着 Pod 可以移动到任何节点,而无需更改其 IP 或网络身份。

  2. 网络效率:由于 POD IP 有独立的、不重叠的 IP 块,Pod 之间可以相互通信,无需复杂的 NAT。

  3. 可重用的 POD IP:Pod 是短暂的。当 Pod 被删除时,其 IP 可以重新分配给另一个 Pod。

每个 K8s 集群所需的 CIDR 块

在了解了网络模型及其优势后,我们来看看 K8s 集群中需要 IP 的所有组件:

  1. K8s 节点

  2. K8s Pod

  3. K8s 服务

  4. 外部 IP

  5. 入口 IP

运行 Pod 的 K8s 节点需要一个 IP,同样,每个运行在节点上的 Pod 也需要自己的 IP。

由于 K8s Pod 是短暂的,它们会被随机分配 IP。K8s 服务用于为 Pod 提供稳定的 IP。K8s 服务 IP 还充当无状态 Pod 的内部负载均衡器。

如果 Pod 位于外部负载均衡器(如 AWS ELB)后面,外部负载均衡器也需要 IP,如上文第 4 点所述。

如果 Pod 位于 Ingress 后面,Ingress 也需要外部 IP 块来暴露这些 HTTP/HTTPS 服务。这些 IP 通常也通过外部负载均衡器(如 AWS ELB)分配。

K8s 集群中 CIDR 块的配置方式

本节假设你熟悉 K8s 集群的组件。我们来看看 K8s 的四个重要部分的配置,了解它们如何使用各种 CIDR:

kube-apiserver \--service-cluster-ip-range=10.96.0.0/12 \        # 服务 CIDR--service-node-port-range=30000-32767 \          # NodePort 范围--allow-privileged=true \--apiserver-count=3 \                            # 用于高可用设置--bind-address=0.0.0.0 \--secure-port=6443 \--feature-gates=RemoveSelfLink=false
kube-controller-manager \--cluster-cidr=10.244.0.0/16 \                   # Pod CIDR--service-cluster-ip-range=10.96.0.0/12 \        # 必须与 apiserver 匹配--node-cidr-mask-size=24 \                       # 每个节点的子网大小--allocate-node-cidrs=true \--cluster-name=kubernetes \--controllers=*,bootstrapsigner,tokencleaner
kubelet \--pod-cidr=10.244.1.0/24 \                      # 节点特定的 Pod CIDR--node-ip=192.168.1.10 \                        # 节点的物理 IP--cluster-dns=10.96.0.10 \                      # kube-dns 服务 IP--cluster-domain=cluster.local \--network-plugin=cni \--cni-conf-dir=/etc/cni/net.d \--cni-bin-dir=/opt/cni/bin
kube-proxy \--cluster-cidr=10.244.0.0/16 \                  # Pod CIDR--proxy-mode=ipvs \                             # 或 iptables--ipvs-min-sync-period=5s \--ipvs-sync-period=30s

你会注意到 K8s 服务 CIDR 在两个地方指定:kube-apiserver 和 kube-controller-manager,作为命令行参数 _— service-cluster-ip-range_,并且两者必须相同。这是用于分配ClusterIP 类型的 K8s 服务的 IP 地址块。

— cluster-cidr 在 kube-controller-manager 和 kube-proxy 中指定。此 CIDR 块用于分配集群中所有 K8s Pod 的 IP 地址。

此外,每个节点的 POD CIDR 作为命令行参数— pod-cidr 传递给 kubelet。kubelet 使用此 IP 地址块为运行在其所在节点上的 Pod 分配 IP。此块必须来自— cluster-cidr 指定的超块。

CNI 和 IPAM

上述讨论假设 IP 地址通过直接配置 K8s 组件来管理。通常,Kubernetes 集群使用 CNI(容器网络接口)模块来实现网络模型。CNI 主要负责:

  • POD IP 分配(接管或覆盖— pod-cidr 和 _— cluster-cidr_)

  • Pod 之间的连接

  • 控制哪些 Pod 可以与哪些其他 Pod 通信的网络策略

CNI 还可以用于与企业现有的 IPAM 系统集成或创建自定义 IP 分配策略。

K8s 集群 IP 地址管理的其他注意事项

我想以一些 IP 地址管理的额外考虑结束本文,这些内容我们之前没有涵盖,但在你扩展 Kubernetes 使用时(无论是在本地还是在云中)至关重要。

  1. 节点本地 IPAM https://www.cni.dev/plugins/current/ipam/host-local/:Kubernetes 现在支持节点本地 IPAM,允许每个节点管理自己的 IP 池。这减少了 API 服务器负载并提高了 Pod 启动时间。这在大型集群中特别有用,因为集中式 IPAM 可能成为瓶颈。

  2. 双栈考虑 https://kubernetes.io/docs/concepts/services-networking/dual-stack/:每个 Pod 可以同时获得 IPv4 和 IPv6 地址。我们需要确保为两种协议提供足够的地址空间。

  3. Pod IP 范围耗尽:这通常被忽视,直到成为问题。我们需要考虑 Pod 的流失率和集群扩展计划。监控 IP 地址利用率很重要。最好设置 IP 池耗尽的警报。

  4. 地址回收:需要为终止的 Pod 进行适当的垃圾回收。一些 CNI 插件有不同的等待期。这对于防止 IP 冲突很重要。

  5. 多集群考虑:我们需要确保集群之间的 Pod 和服务 CIDR 不重叠。这对于集群联邦和跨集群通信很重要。我们还应考虑未来集群合并的场景。此外,我们还没有讨论跨多个集群的网格,这带来了额外的 IP 寻址考虑。

  6. 云提供商集成:不同的云提供商有不同的 IPAM 限制。一些云提供商需要特定的 CIDR 范围,可能需要与云 VPC IPAM 协调。例如,EKS 支持自定义网络,并允许为节点上的 Pod 使用不同的子网。

  7. 安全考虑:IPAM 也可用于网络分段。考虑为不同的安全区域使用不同的 IP 范围。这对于合规性要求很重要。

这并不详尽,但希望我已经涵盖了从扩展公司 Kubernetes 策略和运行基于我过去八年运行生产就绪集群的角度来看的所有 IP 地址管理方面。

相关文章:

K8s 集群 IP 地址管理指南(K8s Cluster IP Address Management Guide)

K8s 集群 IP 地址管理指南 概述 你是否在小型初创公司或大型企业工作,并正在为公司评估 Kubernetes?你可能正在考虑运行十几个或更多的 Kubernetes (K8s) 集群。你期望每个集群支持几百个 K8s 节点,每个节点可能有 50 到 100 个 K8s Pod。这…...

Debye-Einstein-模型拟合比热容Python脚本

固体比热模型中的德拜模型和爱因斯坦模型是固体物理学中用于估算固体热容的两种重要原子振动模型。 爱因斯坦模型基于三种假设:1.晶格中的每一个原子都是三维量子谐振子;2.原子不互相作用;3.所有的原子都以相同的频率振动(与德拜…...

OpenCV的图像分割

1、基本概念 图像分割是计算机视觉和图像处理中的一个关键步骤,它指的是将图像划分为多个区域或对象的过程。这些区域或对象在某种特性(如颜色、形状、纹理或亮度等)上是一致的或相似的,而在不同区域之间则存在明显的差异。图像分…...

【源码+文档+调试讲解】农产品研究报告管理系统

摘 要 农产品研究报告管理系统是一个旨在收集、整理、存储和分析农产品相关研究数据的综合性平台。农产品研究报告管理系统通常包含一个强大的数据库,它能够处理大量的研究数据,并对这些数据进行有效的管理和备份。农产品研究报告管理系统是现代农业科学…...

【STM32-学习笔记-7-】USART串口通信

文章目录 USART串口通信Ⅰ、硬件电路Ⅱ、常见的电平标准Ⅲ、串口参数及时序Ⅳ、STM32的USART简介数据帧起始位侦测数据采样波特率发生器 Ⅴ、USART函数介绍Ⅵ、USART_InitTypeDef结构体参数1、USART_BaudRate2、USART_WordLength3、USART_StopBits4、USART_Parity5、USART_Mode…...

高可用虚拟IP-keepalived

个人觉得华为云这个文档十分详细:使用虚拟IP和Keepalived搭建高可用Web集群_弹性云服务器 ECS_华为云 应用场景:虚拟IP技术。虚拟IP,就是一个未分配给真实主机的IP,也就是说对外提供数据库服务器的主机除了有一个真实IP外还有一个…...

AI多模态技术介绍:视觉语言模型(VLMs)指南

本文作者:AIGCmagic社区 刘一手 AI多模态全栈学习路线 在本文中,我们将探讨用于开发视觉语言模型(Vision Language Models,以下简称VLMs)的架构、评估策略和主流数据集,以及该领域的关键挑战和未来趋势。通…...

高效工作流:用Mermaid绘制你的专属流程图;如何在Vue3中导入mermaid绘制流程图

目录 高效工作流:用Mermaid绘制你的专属流程图 一、流程图的使用场景 1.1、流程图flowChart 1.2、使用场景 二、如何使用mermaid画出优雅的流程图 2.1、流程图添加图名 2.2、定义图类型与方向 2.3、节点形状定义 2.3.1、规定语法 2.3.2、不同节点案例 2.…...

uniApp通过xgplayer(西瓜播放器)接入视频实时监控

🚀 个人简介:某大型国企资深软件开发工程师,信息系统项目管理师、CSDN优质创作者、阿里云专家博主,华为云云享专家,分享前端后端相关技术与工作常见问题~ 💟 作 者:码喽的自我修养&#x1f9…...

ws 配置 IngressRoute 和 http一样

ws 配置 IngressRoute 和 http一样 apiVersion: traefik.containo.us/v1alpha1 kind: IngressRoute apiVersion: traefik.containo.us/v1alpha1 kind: IngressRoute metadata:name: web-ws-ingressroutenamespace: starp spec:entryPoints:- webroutes:- match: Host(webws.we…...

IMX6ULL的IOMUXC寄存器和SNVS复用寄存器似乎都是对引脚指定复用功能的,那二者有何区别?

IMX6ULL 的 IOMUXC 和 SNVS(Secure Non-Volatile Storage)复用寄存器都是用于配置引脚功能的,但它们的作用范围、目的和使用场景存在明显区别。以下是它们的差异分析: 1. IOMUXC(I/O Multiplexer Control)寄…...

LabVIEW实现动态水球图的方法

水球图是一种直观展示百分比数据的图表,常用于数据监测与展示。LabVIEW 虽不直接支持水球图绘制,但可通过图片控件动态绘制波形,或借助 HTMLCSS 的 Web 控件实现。此外,还可以结合 Python 等第三方工具生成水球图,LabV…...

【江协STM32】11-2/3 W25Q64简介、软件SPI读写W25Q64

1. W25Q64简介 W25Qxx系列是一种低成本、小型化、使用简单的非易失性存储器,常应用于数据存储、字库存储、固件程序存储等场景存储介质:Nor Flash(闪存)时钟频率:80MHz / 160MHz (Dual SPI) / 320MHz (Quad SPI)存储容…...

《自动驾驶与机器人中的SLAM技术》ch2:基础数学知识

目录 2.1 几何学 向量的内积和外积 旋转矩阵 旋转向量 四元数 李群和李代数 SO(3)上的 BCH 线性近似式 2.2 运动学 李群视角下的运动学 SO(3) t 上的运动学 线速度和加速度 扰动模型和雅可比矩阵 典型算例:对向量进行旋转 典型算例:旋转的复合 2.3 …...

算法日记2:洛谷p3853路标设置(二分答案)

一、题目: 二、解题思路: 2.1:首先,我们二分空旷指数 1、因为题目中要求我们求解最大值最小应该是属于第二类模型2.也就是说,当check()函数为true时候,说明这个空旷指数是成立的,对应的路标数…...

浅谈云计算06 | 云管理系统架构

云管理系统架构 一、云管理系统架构(一)远程管理系统(二)资源管理系统(三)SLA 管理系统(四)计费管理系统 二、安全与可靠性保障(一)数据安全防线(…...

Blender常规设置

移动:Shift鼠标中键 旋转:鼠标中键 缩放:Ctrl鼠标中键...

c++ 中的容器 vector、deque 和 list 的区别

表格汇总: 容器存储结构随机访问性能中间插入/删除性能两端插入/删除性能内存管理特点迭代器类型适用场景vector连续存储的动态数组 O ( 1 ) O(1) O(1) O ( n ) O(n) O(n)(需要移动元素)末尾: O ( 1 ) O(1) O(1),头部…...

【物流管理系统 - IDEAJavaSwingMySQL】基于Java实现的物流管理系统导入IDEA教程

有问题请留言或私信 步骤 下载项目源码:项目源码 解压项目源码到本地 打开IDEA 左上角:文件 → 新建 → 来自现有源代码的项目 找到解压在本地的项目源代码文件,点击确定,根据图示步骤继续导入项目 查看项目目录&#xff…...

数据集-目标检测系列- 电话 测数据集 call_phone >> DataBall

数据集-目标检测系列- 电话 测数据集 call DataBall 助力快速掌握数据集的信息和使用方式,会员享有 百种数据集,持续增加中。 需要更多数据资源和技术解决方案,知识星球: “DataBall - X 数据球(free)” 贵在坚持! …...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

Python如何给视频添加音频和字幕

在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

stm32wle5 lpuart DMA数据不接收

配置波特率9600时,需要使用外部低速晶振...

面试高频问题

文章目录 🚀 消息队列核心技术揭秘:从入门到秒杀面试官1️⃣ Kafka为何能"吞云吐雾"?性能背后的秘密1.1 顺序写入与零拷贝:性能的双引擎1.2 分区并行:数据的"八车道高速公路"1.3 页缓存与批量处理…...

书籍“之“字形打印矩阵(8)0609

题目 给定一个矩阵matrix,按照"之"字形的方式打印这个矩阵,例如: 1 2 3 4 5 6 7 8 9 10 11 12 ”之“字形打印的结果为:1,…...

Canal环境搭建并实现和ES数据同步

作者:田超凡 日期:2025年6月7日 Canal安装,启动端口11111、8082: 安装canal-deployer服务端: https://github.com/alibaba/canal/releases/1.1.7/canal.deployer-1.1.7.tar.gz cd /opt/homebrew/etc mkdir canal…...

js 设置3秒后执行

如何在JavaScript中延迟3秒执行操作 在JavaScript中,要设置一个操作在指定延迟后(例如3秒)执行,可以使用 setTimeout 函数。setTimeout 是JavaScript的核心计时器方法,它接受两个参数: 要执行的函数&…...

OPENCV图形计算面积、弧长API讲解(1)

一.OPENCV图形面积、弧长计算的API介绍 之前我们已经把图形轮廓的检测、画框等功能讲解了一遍。那今天我们主要结合轮廓检测的API去计算图形的面积,这些面积可以是矩形、圆形等等。图形面积计算和弧长计算常用于车辆识别、桥梁识别等重要功能,常用的API…...