在k8s中 ,数据包是怎么从外部流转进入到pod的?
在 Kubernetes 中,当您创建 NodePort 类型的服务时,流量不会直接从主机的 IP 和端口转发到特定 Pod 的 IP 和端口。相反,流量被转发到集群中的一个节点,然后从那里转发到相应的 Pod。
1、当您创建 NodePort 类型的服务时,Kubernetes 会在集群中的每个节点上分配预定义范围(通常在 30000-32767 范围内)的端口。
2、当流量发送到指定 NodePort 上的主机 IP 地址时,接收流量的节点使用其内部路由来确定哪个 Pod 应接收流量。
3、然后,Kubernetes 使用服务的集群 IP 将流量转发到选定的 Pod。服务负责在与服务选择器匹配的容器之间对流量进行负载平衡。
总之,发往 NodePort 服务的流量首先发送到集群中的节点,然后根据服务的内部负载均衡机制将其路由到服务后面的某个 Pod。流量不会直接从主机 IP 和端口转发到特定的容器 IP 和端口。
eg:
假设你有一个 Kubernetes 集群,其中包括三个节点,它们分别有以下IP地址:
- Node1: 192.168.1.100 节点 1:192.168.1.100
- Node2: 192.168.1.101 节点 2:192.168.1.101
- Node3: 192.168.1.102 节点 3:192.168.1.102
现在,你创建了一个 NodePort 类型的 Service,它暴露了端口 80,并选择了一组 Pod,这些 Pod 运行一个 Web 应用程序,监听端口 8080。你的 Service 配置可能如下所示:
apiVersion: v1
kind: Service
metadata:name: my-web-service
spec:selector:app: my-web-appports:- protocol: TCPport: 80targetPort: 8080type: NodePort
在这种情况下,Kubernetes会执行以下操作:
-
Kubernetes为集群中的每个节点分配一个随机的 NodePort(在大多数情况下,NodePort会在30000到32767之间随机选择)。假设分配的NodePort为30080。
-
当有来自外部的请求,例如浏览器请求
http://Node1:30080
时,流量将被路由到 Node1,因为该请求使用了 Node1 的 IP 地址和 NodePort。 -
在 Node1 上,Kubernetes会检查 Service 的选择器(selector)以确定哪些 Pod 符合条件(在本例中是标记为
app: my-web-app
的 Pod)。 -
Kubernetes将请求从 Node1 转发到符合条件的 Pod 中的一个,通常使用轮询或IP散列等方法来实现负载均衡。
-
请求最终到达一个运行你的 Web 应用程序的 Pod,该应用程序监听端口 8080,并响应请求。
总之,NodePort Service 将流量路由到集群中的一个节点,然后再根据 Service 的选择器将流量路由到符合条件的 Pod 上,以实现负载均衡。这是 Kubernetes 中一种常见的服务暴露方式,使得你可以通过节点的 IP 地址和 NodePort 来访问服务。
作为新手,你可能还要问那 外部用户怎么通过80端口进行访问呢?
如果你希望外部用户可以通过标准 HTTP 端口 80 访问你的服务,你可以使用 Kubernetes Ingress Controller 来将外部流量引导到你的 NodePort 服务。下面是一个简单的示例来说明这一点:
-
创建一个 NodePort 服务: 创建一个 NodePort 服务来公开你的应用程序,就像之前的示例中一样。这个服务将监听一个高端口(例如 30080),然后将流量路由到你的应用程序的 Pod。
-
创建 Ingress 资源: 创建一个 Ingress 资源,将外部 HTTP 流量引导到你的 NodePort 服务。下面是一个示例 Ingress 配置:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: my-ingress
spec:rules:- host: your-domain.com # 你的域名http:paths:- path: /pathType: Prefixbackend:service:name: my-web-service # 你的 NodePort 服务名称port:number: 80
在这个示例中,Ingress 规则将外部流量从域名 your-domain.com
引导到名为 my-web-service
的 NodePort 服务的端口 80。
-
部署 Ingress Controller: 你需要在集群中部署一个 Ingress Controller,例如 Nginx Ingress Controller 或 Traefik,以便它能够理解和处理 Ingress 资源。根据你选择的 Ingress Controller,你需要遵循相应的部署和配置指南。
-
配置域名解析: 在你的域名服务提供商处配置域名解析,将你的域名(例如
your-domain.com
)指向集群中的一个或多个节点的公共 IP 地址。
一旦你完成上述步骤,外部用户将能够通过标准 HTTP 端口 80 访问你的服务。Ingress Controller 将负责将流量从域名引导到相应的 NodePort 服务,然后再路由到你的应用程序的 Pod。
相关文章:
在k8s中 ,数据包是怎么从外部流转进入到pod的?
在 Kubernetes 中,当您创建 NodePort 类型的服务时,流量不会直接从主机的 IP 和端口转发到特定 Pod 的 IP 和端口。相反,流量被转发到集群中的一个节点,然后从那里转发到相应的 Pod。 1、当您创建 NodePort 类型的服务时…...

微信小程序设置 wx.showModal 提示框中 确定和取消按钮的颜色
wx官方提供的 showModal 无疑是个非常优秀的选择提示工具 但是 我们还可以让他的颜色更贴近整体的小程序风格 cancelColor 可以改变取消按钮的颜色 confirmColor 则可以控制确定按钮的颜色 参考代码如下 wx.showModal({cancelColor: #0000FF,confirmColor: #45B250,content:…...

【Chrome】使用k8s、docker部署无头浏览器Headless,Java调用示例
什么是无头浏览器? 无头浏览器是一种没有图形用户界面的浏览器。无头浏览器不通过其图形用户界面(GUI)控制浏览器的操作,而是使用命令行。 为什么要用Chrome无头? Chrome Headless用于抓取(谷歌)、测试(开发者)和黑客(黑客)。搜索引擎&…...
springmvc http请求,支持get,post,附件传输和参数传输
主要解决http请求支持get,post,put,delete等常规方法,支持RequestParam,RequestBody,PathVariable等参数格式传输,支持传输附件同时传递参数等,主体代码如下: package mes.client.action;import cn.hutool.crypto.digest.DigestUt…...

linux性能分析(七)CPU性能篇(二)怎么理解平均负载
一 怎么理解平均负载 ① 如何查看平均复杂 查看系统负载的命令: top、uptime、w、cat /proc/loadavg、tload /proc/loadavg 思考: uptime每列输出的含义?重点: 当前时间、系统运行时间、正在登录用户数、平均负载 ② 思考࿱…...

PostgreSQL12中浮点数输出算法优化带来的小问题
最近碰到同事发来这样两个SQL,开发反馈输出的结果异常。 bill# select 0.1284*100::float;?column? --------------------12.839999999999998 (1 row)bill# select (0.1284*100)::float;float8 --------12.84 (1 row) 乍一看其实能看出明显的区别,由于…...

Hive安装配置笔记
版本说明 hadoop-3.3.6(已安装) mysql-8(已安装) hive-3.1.3 将hive解压到对应目录后做如下配置: 基本配置与操作 1、hive-site <configuration><!-- jdbc连接的URL --><property><name>ja…...

前端数据可视化之【Echarts下载使用】
目录 🌟下载🌟浏览器引入🌟模块化引入 🌟使用🌟基本使用步骤 🌟绘制一个简单的图表🌟写在最后 🌟下载 🌟浏览器引入 官网下载界面:官方网站 或 Echarts中文…...
本机计算机上的mysql启动后停止
本机计算机上的mysql启动后停止 原因:mysql5.0和mysql8.0配置不同 把my.ini改成以下设置然后再重新 mysqld --initialize-insecure --usermysql然后再启动 net start mysqlmysql8.0 下面的路劲可自定义 [client] default-character-setutf8 [mysql] default-cha…...
Java中ReentrantLock测试线程的安全
使用场景 当需要在多线程环境下保证共享资源的安全访问时,可以使用Java中的ReentrantLock来实现线程安全。ReentrantLock是一个可重入的互斥锁,它提供了与synchronized关键字类似的功能,但更加灵活和扩展性强。 下面是一个使用ReentrantLoc…...
Vue-dvadmin-d2-crud-plus-常用配置-row-handle-columns-options
文章目录 1.row-handle columnHeader width minWidth fixed align renderHeader edit view remove remove.confirm remove.confirmTitle remove.confirmText custom 范例1 范例2 2.columns title key width minWidth fixed renderHeader sortable sortMethod sortBy sortOrders…...

【OpenCV实现图像的算数运算,性能测试和优化,改变颜色空间】
文章目录 OpenCV功能概要图像的算数运算性能测试和优化改变颜色空间对象追踪 OpenCV功能概要 OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,提供了丰富的图像处理和计算机视觉算法。它支持多种编程语言&…...

多级缓存入门
文章目录 什么是多级缓存JVM进程缓存环境准备安装MySQL导入Demo工程导入商品查询页面 初识Caffeine Lua语法初识Lua第一个lua程序变量和循环Lua的数据类型声明变量循环 条件控制、函数函数条件控制 多级缓存安装OpenRestyOpenResty快速入门反向代理流程OpenResty监听请求编写it…...
CentOS卸载LVM磁盘的方法
在客户环境上遇到一个问题,本身的磁盘满了,需要把没有用的lvm逻辑卷卸载掉,然后挂上去,下面记录一下过程。 卸载原磁盘 umount /data # 如果/data目录正在被其他进程使用中,则使用fuser强制关闭,然后Umou…...
ChatGPT:Spring Boot和Maven——Java应用开发的关键工具和区别
ChatGPT:Spring Boot和Maven——Java应用开发的关键工具和区别 Springboot是什么? ChatGPT: Spring Boot是一个用于构建Java应用程序的开源框架,它是Spring Framework的一部分,但旨在简化Spring应用程序的开发。Sprin…...

智能振弦传感器:参数智能识别技术的重要科技创新
智能振弦传感器:参数智能识别技术的重要科技创新 智能振弦传感器是一种能够自动识别传感器参数的高科技产品。它的研发得益于河北稳控科技的不断创新和努力,其电子标签专用读数模块模块TR01将传感器生产和标定过程实现了自动化。该模块将温度电阻两芯线…...

tooltip实现悬停内容染色
一: 通过highlight.js项目实现对json字符串的染色高亮 此项目是jsp文件,并且引用了element-ui/highlight.js的组件 二: 实现效果 三: 代码实现 关键点在于成功引入相关的js及css,并且在tooltip渲染时进行数据染色。再将染色后的数据放到v-html中进行页面渲染(关键方…...

“深入探讨Java JUC中的ReentrantLock锁:实现多线程同步与并发控制“
简介 1、从Java5开始,Java提供了一种功能更强大的线程同步机制——通过显式定义同步锁对象来实现同步,在这种机制下,同步锁由Lock对象充当。 2、Lock 提供了比synchronized方法和synchronized代码块更广泛的锁定操作,Lock允许实…...

Java|学习|多线程
1.多线程的一些概念 进程:是正在运行的程序 是系统进行资源分配和调用的独立单位 每一个进程都有它自己的内存空间和系统资源。 线程:是进程中的单个顺序控制流,是一条执行路径。 单线程:一个进程如果只有一条执行路径࿰…...
【Python机器学习】零基础掌握VotingClassifier集成学习
为什么一些数据预测模型在复杂场景下表现不如预期? 在当今数据驱动的世界中,企业和研究者面临着如何从大量数据中提取有价值信息的挑战。假设一个电商公司想要通过用户行为数据预测产品销量,通常会使用单一的算法模型,如逻辑回归、随机森林或朴素贝叶斯。但问题来了,如果…...
配置git命令缩写
以下是 Git 命令缩写的配置方法及常用方案,适用于 Linux/macOS/Windows 系统: 🔧 一、配置方法 1. 命令行设置(推荐) # 基础命令缩写 git config --global alias.st status git config --global alias.co che…...

ZephyrOS 嵌入式开发Black Pill V1.2之Debug调试器
版本和环境信息如下: PC平台: Windows 11 专业版 Zephyr开发环境:v4.1.0 Windows 下搭建 Zephyr 开发环境 WeAct BlackPill V1.2开发板: WeAct STM32F411CEU6 BlackPill 核心板 Debug调试器: ST-LINK V2: ST-LINK V2 S…...

【Linux】LInux下第一个程序:进度条
前言: 在前面的文章中我们学习了LInux的基础指令 【Linux】初见,基础指令-CSDN博客【Linux】初见,基础指令(续)-CSDN博客 学习了vim编辑器【Linux】vim编辑器_linux vim insert-CSDN博客 学习了gcc/g【Linux】编译器gc…...
MATLAB实战:视觉伺服控制实现方案
以下是一个基于MATLAB的视觉伺服控制项目实现方案,结合实时图像处理、目标跟踪和控制系统设计。我们将使用模拟环境进行演示,但代码结构可直接应用于真实硬件。 系统架构 图像采集 → 目标检测 → 误差计算 → PID控制器 → 执行器控制 完整代码实现 …...
LeetCode 239. 滑动窗口最大值(单调队列)
题目传送门:239. 滑动窗口最大值 - 力扣(LeetCode) 题意就是求每个窗口内的最大值,返回一个最大值的数组,滑动窗口的最值问题。 做法:维护一个单调递减队列,队头为当前窗口的最大值。 设计的…...

中型零售业数据库抉择:MySQL省成本,SQL SERVER?
针对中型零售企业(20台固定POS数十台移动POS,含库存管理与结算业务)的操作系统与数据库选型,需平衡性能、成本、扩展性及运维效率。结合行业实践与系统需求,建议如下: 🖥️ 一、操作系统选型…...

思尔芯携手Andes晶心科技,加速先进RISC-V 芯片开发
在RISC-V生态快速发展和应用场景不断拓展的背景下,芯片设计正面临前所未有的复杂度挑战。近日,RISC-V处理器核领先厂商Andes晶心科技与思尔芯(S2C)达成重要合作,其双核单集群AX45MPV处理器已在思尔芯最新一代原型验证系…...
tpc udp http
TCP(传输控制协议)、UDP(用户数据报协议)和 HTTP(超文本传输协议)是网络通信中常用的三种协议,它们在不同的层次和场景中发挥作用。以下是对这三种协议的详细解释以及它们之间的区别:…...
基于 COM 的 XML 解析技术(MSXML) 的总结
✅ 一、COM 与 MSXML 简要说明 🔷 什么是 COM? COM(Component Object Model)是一种 Windows 平台下的组件技术,可以实现在不重新编译代码的前提下复用组件。 特点: 用 接口调用方式 解耦依赖;…...

CSS 平铺+自动换行效果
先上效果图 样式 <template><div class"activity-questions"><h1>活动题库</h1><div v-if"loading" class"loading">加载中...</div><div v-else><div v-if"questions.length 0" clas…...