Kubernetes Cluster IP,Node IP,Pod IP间通信原理解析
目录
- 1、Cluster IP
- 2、Node IP
- 3、NodePort
- 4、Pod IP
- 5、LoadBalancer
- 6、三种IP间通信
- 6.1、Pod IP 与 Pod IP 通信
- 6.2、Pod IP 与 Cluster IP 通信
- 6.3、Node IP 与 Pod IP 通信
- 6.4、Node IP 与 Cluster IP
- 7、YAML 示例
- 7.1、ClusterIP Service
- 7.2、LoadBalancer Service
1、Cluster IP
- 定义:Cluster IP 是 Kubernetes 为每个 Service 分配的一个虚拟的、仅集群内部可访问的 IP 地址。这个 IP 不绑定到任何物理或虚拟网络接口,仅在 Kubernetes 集群内部有效。
- 用途:Cluster IP 使得集群内的应用可以通过一个固定且稳定的 IP 访问 Service,而不需要知道后端 Pod 的具体 IP 或数量变化。Kube-Proxy 负责将发往 Cluster IP 的请求负载均衡到后端 Pod。
2、Node IP
- 定义:Node IP 是 Kubernetes 集群中每个节点(物理服务器或虚拟机)的物理网卡的 IP 地址。这是节点在网络中的实际可路由地址,用于节点间的通信以及集群内外的通信。
- 用途:外部系统访问集群内的服务时,尤其是通过 NodePort 和 LoadBalancer 类型的服务,通常需要通过 Node IP 加上相应的端口号来访问。
3、NodePort
- 定义:NodePort 是一种 Service 类型,它会在每个节点的某个静态端口上公开服务。这意味着,外部可以通过任意节点的 IP 地址加上这个 NodePort 访问到 Service。
- 用途:NodePort 提供了一种简单的方式,让集群外的客户端能够访问集群内的服务,常用于测试和调试环境。它比 LoadBalancer 更轻量,因为不需要云提供商的负载均衡器支持。
4、Pod IP
- 定义:Pod IP 是分配给每个 Pod 的独立 IP 地址,由 Kubernetes 网络插件(如 Calico、Flannel 等)动态分配。这个 IP 地址属于虚拟的二层网络,允许同一网络平面内的 Pod 直接通过 Pod IP 通信。
- 用途:Pod IP 使得集群内的 Pod 可以相互发现和直接通信,是实现服务间通信的基础。
5、LoadBalancer
- 定义:LoadBalancer 是 Service 的一种类型,它会在云提供商(如 AWS、GCP、Azure 等)的层面创建一个负载均衡器,并将流量分发到集群内的多个节点。
- 用途:LoadBalancer 适用于生产环境,提供了高可用性和扩展性。它允许外部客户端通过一个稳定且可预测的 DNS 名称或公共 IP 访问服务,自动处理后端节点的添加和移除,保证服务的持续可用性。
6、三种IP间通信
6.1、Pod IP 与 Pod IP 通信
-
同一节点内:如果两个 Pod 部署在同一节点上,它们可以直接通过各自的 Pod IP 进行通信,这是由容器网络接口(CNI)插件(如 Flannel、Calico 等)负责配置的容器网络实现的。
-
跨节点:当 Pod 分布在不同节点上时,它们之间的通信同样通过 Pod IP,但需要 CNI 插件确保网络平面的一致性,例如通过隧道技术(如 IPSec、VXLAN)封装 Pod 间的流量,或使用路由规则直接路由到目标节点上的 Pod。
6.2、Pod IP 与 Cluster IP 通信
-
当 Pod 需要访问 Service 时,它不会直接访问 Service 后端的某个 Pod IP,而是通过 Service 的
Cluster IP
进行通信。Cluster IP
是一个虚拟的 IP 地址,由 Kubernetes 创建并管理。 -
kube-proxy
在每个节点上运行,它监听 Service 的变化,并通过 iptables 或 IPVS 规则,将发往Cluster IP
的请求负载均衡地转发到该 Service 对应的所有后端 Pod(Endpoint)的 Pod IP 上。
6.3、Node IP 与 Pod IP 通信
-
从 Node 到 Pod:在某些情况下,可能需要从 Node 直接访问 Pod IP。虽然 Kubernetes 不鼓励直接这样做,但在特殊场景下,比如调试,可以通过 Node 的网络栈路由到该节点上的 Pod。不过,由于 Pod IP 并非全局可达,通常需要在 Node 上使用
iptables
规则或特定网络插件的功能来实现。 -
从外部到 Pod:通常不直接通过 Node IP 访问 Pod IP,而是通过 NodePort Service 或 LoadBalancer Service 间接访问。但如果配置了 hostNetwork: true,Pod 会共享宿主机网络,此时可以从外部通过 Node IP 加 Pod 容器端口访问 Pod。
6.4、Node IP 与 Cluster IP
- 一般情况下,Node 本身并不直接与 Cluster IP 通信,因为 Cluster IP 是一个仅集群内部可访问的虚拟 IP。但是,kube-proxy 在每个 Node 上运行,它通过处理到 Cluster IP 的流量来实现对 Service 的访问,间接体现了 Node 与 Cluster IP 之间的交互。
7、YAML 示例
7.1、ClusterIP Service
apiVersion: v1
kind: Service
metadata:name: my-service
spec:selector:app: MyAppports:- protocol: TCPport: 80targetPort: 9376type: ClusterIP
在这个例子中,my-service
服务通过 ClusterIP 类型定义,监听 80 端口,将流量转发到标签为 app=MyApp
的 Pod 的 9376 端口。
7.2、LoadBalancer Service
apiVersion: v1
kind: Service
metadata:name: my-loadbalancer-service
spec:selector:app: MyAppports:- protocol: TCPport: 80targetPort: 9376type: LoadBalancer
在这个例子中,my-loadbalancer-service
会创建一个负载均衡器,将外部流量通过 80 端口导入集群,并分配给标签为 app=MyApp
的 Pod 的 9376 端口,提供对外的高可用服务。
相关文章:
Kubernetes Cluster IP,Node IP,Pod IP间通信原理解析
目录 1、Cluster IP2、Node IP3、NodePort4、Pod IP5、LoadBalancer6、三种IP间通信6.1、Pod IP 与 Pod IP 通信6.2、Pod IP 与 Cluster IP 通信6.3、Node IP 与 Pod IP 通信6.4、Node IP 与 Cluster IP 7、YAML 示例7.1、ClusterIP Service7.2、LoadBalancer Service 1、Clust…...

随机链表的深拷贝
1.题目 解题思路一:暴力求解,先创建新链表,然后把旧链表中的val和next指针给复制到新链表中,根据旧链表中的random指针所指向的旧链表中的val值找到所对应的节点,记录该节点的位置,就像数组一样,…...
328_C++_HTTP_HTTP协议传输data数据,为什么要进行base64编解码操作?
http传输data数据的时候,为什么必须进行base64转码后才能有效发送,接收方也必须base64转码后才能有效接受? HTTP HTTP传输数据时,使用Base64编码并不是必须的,但它确实在某些情况下非常有用。以下是为什么在某些情况…...

【二叉树】Leetcode N 叉树的层序遍历
题目讲解 429. N 叉树的层序遍历 算法讲解 在做层序遍历的时候由于它的每一个结点是有val vector child组成,所以在做层序遍历的时候需要考虑它每一层结点的个数,那我们就可以使用一个queue保存每一层的结点;那么我们在做第一层的时候&am…...

Spring AI
目录 一、Spring AI 1、Spring AI简介 1.1、四次工业革命发展和变革 1.2、什么是人工智能? 1.3、人工智能的发展历程 1.4、什么是大模型? 1.5、如何训练大模型? 一、Spring AI 1、Spring AI简介 Spring AI Java接入人工智能大模型 1.1、四次工业革命发展和变革 人类…...
fiori SAP ui5 动态改变控件颜色
使用CustomData动态改变控件颜色 有时候我们需要改变控件颜色,对于高度封装的控件,显然改变控件CSS是比较困难的,幸好SAP UI5预设了一个customData的属性,每个控件都能使用她。 如下代码是判断汇率是否有改变,如果改…...
RabbitMQ php amqp
Linux debian 安装 Windows php amqp 扩展 PECL :: Package :: amqp 将 php_amqp.dll 复制到 php 的 ext 目录下 将 rabbitmq.4.dll 复制到 c:\windows\system32 目录下 php.ini extensionamqp...

对称二叉树
给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root [1,2,2,3,4,4,3] 输出:true示例 2: 输入:root [1,2,2,null,3,null,3] 输出:falses 思路:我刚开始是想着用…...
浅浅总结SQL中的事务.
在现实生活中有很多的线上支付的场景,当支付的时候,一方资金减少,另一方资金增加,在执行前后,两者的总体数额需要相同,为了保证这个操作的完整,所以提出了事务,那我们先来去写一个示例ÿ…...

C++ | Leetcode C++题解之第76题最小覆盖子串
题目: 题解: class Solution { public:unordered_map <char, int> ori, cnt;bool check() {for (const auto &p: ori) {if (cnt[p.first] < p.second) {return false;}}return true;}string minWindow(string s, string t) {for (const au…...

什么可以替代iframe?
网页嵌套中,iframe曾几何时不可一世,没有其他更好的选择! iframe即内联框架,作为网页设计中的一种技术,允许在一个网页内部嵌套另一个独立的HTML文档。尽管它在某些场景下提供了便利,但也存在多方面的缺陷…...
HTTP/1.0、HTTP/1.1、HTTP/2.0区别
文章目录 区别HTTP/1.0HTTP/1.11. 持久连接(长连接)2. 管道化3. Host头字段4. 分块传输编码5. 缓存机制6. 请求方法 HTTP/2.01. 二进制分帧2. 多路复用3. 服务器推送4. 优先级设置5. 头信息压缩6. 安全性7. 流量控制 区别 特性HTTP/1.0HTTP/1.1HTTP/2.0…...

鸿蒙内核源码分析(文件句柄篇) | 你为什么叫句柄
句柄 | handle int open(const char* pathname,int flags); ssize_t read(int fd, void *buf, size_t count); ssize_t write(int fd, const void *buf, size_t count); int close(int fd);只要写过应用程序代码操作过文件不会陌生这几个函数,文件操作的几个关键步骤嘛,跟把大…...

2024.5.8 关于 SpringCloud —— Ribbon 的基本认知
目录 Ribbon 负载均衡原理 工作流程 Ribbon 负载均衡规则 Ribbon 负载均衡自定义化 代码方式修改规则 配置文件方式修改规则 小总结 Ribbon 设定饥饿加载 Ribbon 负载均衡原理 工作流程 order-service 使用 RestTemplate 发送请求,随后该请求将会被 Ribbon 所…...
Lua 协程模拟 Golang 的 go defer 编程模式
封装go函数用于创建并启动一个协程: ---go函数创建并启动一个协程 ---param _co_task function 函数原型 fun(_co:thread) function go(_co_task)local co coroutine.create(_co_task) -- 创建一个暂停的协程coroutine.resume(co, co) -- 调用coroutine.resume激活…...

maven的安装与配置(超详细)
在Java开发中,配置Maven环境有几个重要的原因: 依赖管理:Maven 是一个强大的依赖管理工具,它能够帮助开发人员轻松地管理项目所需的各种第三方库和组件。通过在项目的 Maven 配置文件(pom.xml)中定义依赖&…...
springCloud服务降级使用到的组件
服务降级在Spring Cloud中通常使用的组件包括断路器(Circuit Breaker)和降级处理器(Fallback)。以下是它们的概念表述: 断路器(Circuit Breaker):断路器是一种设计模式,…...

Spring框架学习-详细
文章目录 1. Spring简介1.1 面向接口编程1.2 Spring简介1.3 Spring体系结构 2 Spring IoC - 基于XML2.1 Sping框架部署(IoC)2.2 Spring IoC使用2.3 IoC和DI2.4 DI依赖注入Spring容器通过反射方法实现属性注入有三种方式1. set方法注入2. 构造器注入 2.5 …...

fatal: fetch-pack: invalid index-pack output
解决方案:git clone --depth1 要克隆的git地址 下载最近一次提交的代码 其他分支的内容都不下载 这样整体下载体量就变小了 执行命令:git clone --depth 1 https://gitlab.scm321.com/ufx/xxxx.git...
相机购买指南
佳能1000D 上市时间:2008年6月 简介: 佳能1000D具有1010万有效像素和7点宽区域自动对焦系统。DIGIC III影像处理器的应用使高ISO画质得到提升。小巧的机身和优质的成像质量可以满足初级用户对旅游便携与高画质的要求。使用了DIGIC III影像处理器&#x…...

7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...

如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...

如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...

Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...

android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...
日常一水C
多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...
深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏
一、引言 在深度学习中,我们训练出的神经网络往往非常庞大(比如像 ResNet、YOLOv8、Vision Transformer),虽然精度很高,但“太重”了,运行起来很慢,占用内存大,不适合部署到手机、摄…...