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…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
macOS 终端智能代理检测
🧠 终端智能代理检测:自动判断是否需要设置代理访问 GitHub 在开发中,使用 GitHub 是非常常见的需求。但有时候我们会发现某些命令失败、插件无法更新,例如: fatal: unable to access https://github.com/ohmyzsh/oh…...
Java后端检查空条件查询
通过抛出运行异常:throw new RuntimeException("请输入查询条件!");BranchWarehouseServiceImpl.java // 查询试剂交易(入库/出库)记录Overridepublic List<BranchWarehouseTransactions> queryForReagent(Branch…...
StarRocks 全面向量化执行引擎深度解析
StarRocks 全面向量化执行引擎深度解析 StarRocks 的向量化执行引擎是其高性能的核心设计,相比传统行式处理引擎(如MySQL),性能可提升 5-10倍。以下是分层拆解: 1. 向量化 vs 传统行式处理 维度行式处理向量化处理数…...
