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

在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会执行以下操作:

  1. Kubernetes为集群中的每个节点分配一个随机的 NodePort(在大多数情况下,NodePort会在30000到32767之间随机选择)。假设分配的NodePort为30080。

  2. 当有来自外部的请求,例如浏览器请求 http://Node1:30080 时,流量将被路由到 Node1,因为该请求使用了 Node1 的 IP 地址和 NodePort。

  3. 在 Node1 上,Kubernetes会检查 Service 的选择器(selector)以确定哪些 Pod 符合条件(在本例中是标记为 app: my-web-app 的 Pod)。

  4. Kubernetes将请求从 Node1 转发到符合条件的 Pod 中的一个,通常使用轮询或IP散列等方法来实现负载均衡。

  5. 请求最终到达一个运行你的 Web 应用程序的 Pod,该应用程序监听端口 8080,并响应请求。

总之,NodePort Service 将流量路由到集群中的一个节点,然后再根据 Service 的选择器将流量路由到符合条件的 Pod 上,以实现负载均衡。这是 Kubernetes 中一种常见的服务暴露方式,使得你可以通过节点的 IP 地址和 NodePort 来访问服务。

作为新手,你可能还要问那 外部用户怎么通过80端口进行访问呢?

如果你希望外部用户可以通过标准 HTTP 端口 80 访问你的服务,你可以使用 Kubernetes Ingress Controller 来将外部流量引导到你的 NodePort 服务。下面是一个简单的示例来说明这一点:

  1. 创建一个 NodePort 服务: 创建一个 NodePort 服务来公开你的应用程序,就像之前的示例中一样。这个服务将监听一个高端口(例如 30080),然后将流量路由到你的应用程序的 Pod。

  2. 创建 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。

  1. 部署 Ingress Controller: 你需要在集群中部署一个 Ingress Controller,例如 Nginx Ingress Controller 或 Traefik,以便它能够理解和处理 Ingress 资源。根据你选择的 Ingress Controller,你需要遵循相应的部署和配置指南。

  2. 配置域名解析: 在你的域名服务提供商处配置域名解析,将你的域名(例如 your-domain.com)指向集群中的一个或多个节点的公共 IP 地址。

一旦你完成上述步骤,外部用户将能够通过标准 HTTP 端口 80 访问你的服务。Ingress Controller 将负责将流量从域名引导到相应的 NodePort 服务,然后再路由到你的应用程序的 Pod。

相关文章:

在k8s中 ,数据包是怎么从外部流转进入到pod的?

在 Kubernetes 中,当您创建 NodePort 类型的服务时,流量不会直接从主机的 IP 和端口转发到特定 Pod 的 IP 和端口。相反,流量被转发到集群中的一个节点,然后从那里转发到相应的 Pod。 1、当您创建 NodePort 类型的服务时&#xf…...

微信小程序设置 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每列输出的含义?重点: 当前时间、系统运行时间、正在登录用户数、平均负载 ② 思考&#xff1…...

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&#xff08;已安装&#xff09; mysql-8&#xff08;已安装&#xff09; hive-3.1.3 将hive解压到对应目录后做如下配置&#xff1a; 基本配置与操作 1、hive-site <configuration><!-- jdbc连接的URL --><property><name>ja…...

前端数据可视化之【Echarts下载使用】

目录 &#x1f31f;下载&#x1f31f;浏览器引入&#x1f31f;模块化引入 &#x1f31f;使用&#x1f31f;基本使用步骤 &#x1f31f;绘制一个简单的图表&#x1f31f;写在最后 &#x1f31f;下载 &#x1f31f;浏览器引入 官网下载界面&#xff1a;官方网站 或 Echarts中文…...

本机计算机上的mysql启动后停止

本机计算机上的mysql启动后停止 原因&#xff1a;mysql5.0和mysql8.0配置不同 把my.ini改成以下设置然后再重新 mysqld --initialize-insecure --usermysql然后再启动 net start mysqlmysql8.0 下面的路劲可自定义 [client] default-character-setutf8 [mysql] default-cha…...

Java中ReentrantLock测试线程的安全

使用场景 当需要在多线程环境下保证共享资源的安全访问时&#xff0c;可以使用Java中的ReentrantLock来实现线程安全。ReentrantLock是一个可重入的互斥锁&#xff0c;它提供了与synchronized关键字类似的功能&#xff0c;但更加灵活和扩展性强。 下面是一个使用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&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉和机器学习库&#xff0c;提供了丰富的图像处理和计算机视觉算法。它支持多种编程语言&…...

多级缓存入门

文章目录 什么是多级缓存JVM进程缓存环境准备安装MySQL导入Demo工程导入商品查询页面 初识Caffeine Lua语法初识Lua第一个lua程序变量和循环Lua的数据类型声明变量循环 条件控制、函数函数条件控制 多级缓存安装OpenRestyOpenResty快速入门反向代理流程OpenResty监听请求编写it…...

CentOS卸载LVM磁盘的方法

在客户环境上遇到一个问题&#xff0c;本身的磁盘满了&#xff0c;需要把没有用的lvm逻辑卷卸载掉&#xff0c;然后挂上去&#xff0c;下面记录一下过程。 卸载原磁盘 umount /data # 如果/data目录正在被其他进程使用中&#xff0c;则使用fuser强制关闭&#xff0c;然后Umou…...

ChatGPT:Spring Boot和Maven——Java应用开发的关键工具和区别

ChatGPT&#xff1a;Spring Boot和Maven——Java应用开发的关键工具和区别 Springboot是什么&#xff1f; ChatGPT&#xff1a; Spring Boot是一个用于构建Java应用程序的开源框架&#xff0c;它是Spring Framework的一部分&#xff0c;但旨在简化Spring应用程序的开发。Sprin…...

智能振弦传感器:参数智能识别技术的重要科技创新

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

tooltip实现悬停内容染色

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

“深入探讨Java JUC中的ReentrantLock锁:实现多线程同步与并发控制“

简介 1、从Java5开始&#xff0c;Java提供了一种功能更强大的线程同步机制——通过显式定义同步锁对象来实现同步&#xff0c;在这种机制下&#xff0c;同步锁由Lock对象充当。 2、Lock 提供了比synchronized方法和synchronized代码块更广泛的锁定操作&#xff0c;Lock允许实…...

Java|学习|多线程

1.多线程的一些概念 进程&#xff1a;是正在运行的程序 是系统进行资源分配和调用的独立单位 每一个进程都有它自己的内存空间和系统资源。 线程&#xff1a;是进程中的单个顺序控制流&#xff0c;是一条执行路径。 单线程&#xff1a;一个进程如果只有一条执行路径&#xff0…...

【Python机器学习】零基础掌握VotingClassifier集成学习

为什么一些数据预测模型在复杂场景下表现不如预期? 在当今数据驱动的世界中,企业和研究者面临着如何从大量数据中提取有价值信息的挑战。假设一个电商公司想要通过用户行为数据预测产品销量,通常会使用单一的算法模型,如逻辑回归、随机森林或朴素贝叶斯。但问题来了,如果…...

AI命理推理实测:用专业数据集验证大模型命理能力

提到AI命理相关的评测&#xff0c;就不得不说之前看到的&#xff0c;我们团队最近也沿着这个方向做了针对性测试&#xff0c;不是网上那种随便给大模型发个prompt就喊“准到离谱”的营销玩法&#xff0c;而是用有标准答案的盲测来验证AI命理推理的真实水平。 我们的评测是怎么…...

GCC编译选项详解与优化技巧

1. GCC编译选项核心功能解析作为Linux环境下最常用的编译器套件&#xff0c;GCC的编译选项直接影响着代码的生成质量与运行效率。在实际开发中&#xff0c;合理配置编译选项往往能达到事半功倍的效果。本文将系统梳理GCC的核心编译选项&#xff0c;重点解析那些容易被忽视但极具…...

无片外电容的LDO电路设计手册:完整IP现成电路,包含过温与过流保护、带隙与BUFFER,性能...

无片外电容LDO电路设计 完整IP现成电路&#xff0c;具有过温保护和过流保护&#xff0c;带隙&#xff0c;BUFFER都有 性能指标已流片验证 同时有相关文献、各模块电路功能分析简化计算笔记&#xff0c;适合学习入门不适合纵向可以附赠一些自己学习时觉得比较有帮助的资料。 有好…...

循环冷却水流量示意图设计 建筑水流量示意图绘制教程

一、引言 在建筑给排水、暖通空调及工业循环水系统设计中&#xff0c;循环冷却水流量示意图与建筑水流量示意图是核心技术图纸之一&#xff0c;其作用是直观呈现水流路径、管径规格、流量分配、设备连接关系及压力节点参数&#xff0c;为系统施工、调试、运维及故障排查提供可…...

OpenClaw安全加固指南:Phi-3-vision本地化部署的权限控制

OpenClaw安全加固指南&#xff1a;Phi-3-vision本地化部署的权限控制 1. 为什么需要安全加固&#xff1f; 上周我在调试一个自动处理发票的OpenClaw流程时&#xff0c;差点酿成大祸。这个流程需要读取财务部门的加密压缩包&#xff0c;解压后提取PDF发票进行OCR识别&#xff…...

气象数据可视化实战:从雷达图到三维风场,前端技术栈全解析

气象数据可视化实战&#xff1a;从雷达图到三维风场&#xff0c;前端技术栈全解析 气象数据的可视化一直是前端开发领域最具挑战性的方向之一。想象一下&#xff0c;当你需要将每小时更新的全球气象数据转化为直观的动态图像&#xff0c;让气象学家一眼就能看出台风路径、让飞行…...

SAP FI模块实战:OBC4配置字段状态变式全流程解析(含常见报错处理)

SAP FI模块深度实战&#xff1a;OBC4字段状态变式配置与冲突解决指南 1. 字段状态变式的核心价值与应用场景 在SAP财务模块中&#xff0c;字段状态变式&#xff08;Field Status Variants&#xff09;是控制会计凭证输入界面的关键配置项。它决定了用户在创建财务凭证时&#x…...

技术洞察:zyfun如何重构跨平台视频播放体验

技术洞察&#xff1a;zyfun如何重构跨平台视频播放体验 【免费下载链接】zyfun 跨平台桌面端视频资源播放器,免费高颜值. 项目地址: https://gitcode.com/gh_mirrors/zy/zyfun 在数字娱乐快速发展的今天&#xff0c;跨平台视频播放器面临着系统兼容性、性能优化和用户体…...

新手零基础入门:通过快马生成burpsuite超详细安装图解教程

作为一名网络安全新手&#xff0c;第一次接触BurpSuite时确实容易被各种专业术语和复杂的安装步骤吓到。今天我就用最直白的方式&#xff0c;手把手带你完成BurpSuite的安装&#xff0c;让你轻松迈出Web安全测试的第一步。 什么是BurpSuite&#xff1f;为什么需要它&#xff1…...

新手入门指南:基于快马生成的代码理解设备配对功能实现

今天想和大家分享一个特别适合新手学习的设备配对功能实现案例。这个例子用最基础的HTML、CSS和原生JavaScript就能完成&#xff0c;特别适合刚接触前端开发的朋友理解交互逻辑。 项目结构设计 整个项目分为三个部分&#xff1a;两个模拟设备&#xff08;用不同图标表示&#x…...