在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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/119791.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【iOS安全】提取app对应的URLScheme

获取app的URLScheme 在已越狱的iPhone上,使用Filza进入app列表目录: /private/var/containers/Bundle/Application/ 比如我要分析Microsoft Authenticator,明显对应的是这里面的“Authenticator”,那就在Filza中点击进入“Authen…

MySQL多表关联on和where速度对比实测谁更快

MySQL多表关联on和where速度对比实测谁更快 背景 今天发现有人在讨论:两张MySQL的数据表按照某一个字段进行关联的时候查询,我们使用on和where哪种查询方式更快。百闻不如一见,我们来亲自测试下。 先说结论 Where、对等查询的join速度基本…

Android WMS——概述(一)

Android 中的 WMS 指的是 Window Manager Service(窗口管理服务)。WMS 是 Android 系统中的核心服务,主要分为四大部分,分别是窗口管理,窗口动画,输入系统中转站和 Surface 管理 。负责管理应用程序窗口的创建、移动、调整大小和显示等操作。 一、功能简介 WMS 的职责可…

在Eclipse中使用Junit

1、准备测试类 public class Calculator {private static int result;public void add(int n) {result result n;} public void substract(int n) {result result -1; //Bug:正确的应该是resultresult-n}public void multiply(int n) {// result result*n;方法未写好}publi…

2.9每日一题(定积分的奇偶性以及比较大小)

1、用定积分奇函数和偶函数的性质 2、用常用的基本不等式推出大小 3、用区间相同的情况下被积函数大的定积分大的定理

嵌入式系统设计师考试笔记之操作系统基础复习笔记二

目录 3、任务管理 (1)嵌入式操作系统的任务管理可以分为 (2)进程 (3)线程 (4)任务 (5)任务的创建与中止 (6)任务的状态任务有三…

Spring Boot 使用 Disruptor 做内部高性能消息队列

这里写自定义目录标题 一 、背景二 、Disruptor介绍三 、Disruptor 的核心概念3.1 Ring Buffer3.2 Sequence Disruptor3.3 Sequencer3.4 Sequence Barrier3.5 Wait Strategy3.6 Event3.7 EventProcessor3.8 EventHandler3.9 Producer 四、案例-demo五、总结 一 、背景 工作中遇…

10-动画animation

动画animation 动画-过渡和动画之间的异同-animation-name 指定要绑定到选择器的关键帧的名称,告诉系统需要执行哪个动画-animation-duration 动画指定需要多少秒或毫秒完成,告诉系统动画持续的时长-animation-timing-function 设置动画将如何完成一个周…

代码随想录算法训练营第2天| 977有序数组的平方、209长度最小的子数组。

JAVA代码编写 977. 有序数组的平方 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 示例 1: 输入:nums [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释&…

postgis ST_CoverageInvalidEdges使用说明

官方文档 函数说明 概要 geometry ST_CoverageInvalidEdges(geometry winset geom, float8 tolerance 0); 描述 一个窗口函数,用于检查窗口分区中的多边形是否形成有效的多边形覆盖范围。 它返回线性指示器,显示每个多边形中无效边(如果…

使用easypoi-spring-boot-starter 4.1.1导入excel报错NoSuchMethodError和NoSuchMethodError

前言 使用easypoi进行excel的导入遇到的错误以及解决办法 easypoi项目地址&#xff1a;https://gitee.com/lemur/easypoi easypoi的Maven依赖&#xff1a; <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter<…

小程序:如何合理规划分包使主包不超过2M

背景 做过小程序项目的同学应该都有这样的经历&#xff0c;项目做着做着&#xff0c;突然发现代码包的大小超过了 2M&#xff0c;小程序无法提审&#xff0c;然后痛苦的删文件改代码来减少包大小。 虽然我们也知道小程序给我们提供了分包的功能可以减少主包的大小&#xff0c…

202305-2-矩阵运算

一、题目分析 此题本质是计算 ( W ⋅ ( Q K T ) ) V (W(QK^T))V (W⋅(QKT))V的值。 注意任务要求&#xff1a; 70% 的测试数据满足&#xff1a;n<100且d<10 。输入矩阵、向量中的元素均为整数&#xff0c;且绝对值均不超过30 。 全部的测试数据满足&#xff1a;n<1…

学习不同概率分布(二项分布、泊松分布等)概念及基础语法

概率分布是描述随机变量取值的概率情况的函数。常见的概率分布包括二项分布、泊松分布等。 二项分布&#xff08;Binomial Distribution&#xff09;&#xff1a;描述了一次试验中成功事件发生的次数的概率分布。它的基础语法如下&#xff1a; 概率质量函数&#xff1a;pmf(k, …

【微信小程序】实现投票功能(附源码)

一、Vant Weapp介绍 Vant Weapp 是一个基于微信小程序的组件库&#xff0c;它提供了丰富的 UI 组件和交互功能&#xff0c;能够帮助开发者快速构建出现代化的小程序应用。Vant Weapp 的设计理念注重简洁、易用和高效&#xff0c;同时提供灵活的定制化选项&#xff0c;以满足开发…

知识付费系统的移动应用开发:跨平台和原生应用的比较

移动应用在知识付费系统中发挥着重要作用&#xff0c;为用户提供了便捷的访问方式。在开发知识付费系统的移动应用时&#xff0c;开发团队通常需要考虑使用跨平台开发工具或原生开发。本文将比较这两种方法&#xff0c;讨论它们的优点和缺点&#xff0c;并提供示例代码来说明它…

用Python做数据分析之数据筛选及分类汇总

1、按条件筛选&#xff08;与&#xff0c;或&#xff0c;非&#xff09; 为数据筛选&#xff0c;使用与&#xff0c;或&#xff0c;非三个条件配合大于&#xff0c;小于和等于对数据进行筛选&#xff0c;并进行计数和求和。与 excel 中的筛选功能和 countifs 和 sumifs 功能相似…

面向对象设计原则之接口隔离原则

目录 定义接口隔离原则与单一职责原则示例 定义 接口隔离原则&#xff0c;全称为 Interface Segregation Principle&#xff0c;缩写ISP。 原始定义&#xff1a;Clients should not be forced to depend upon interfaces that they don’t use。 翻译&#xff1a; 不应该强行…

k8s 部署nginx前端

1.构建docker镜像&#xff0c;k8s拉取镜像运行 ​​​​​​​docker自己安装 [rootmaster1 ~]# docker pull nginx:1.24.0 [rootmaster1 ~]# mkdir k8s-nginx [rootmaster1 ~]# cd k8s-nginx [rootmaster1 k8s-nginx]# vim nginx.conf server_tokens off;server {listen …

MVC架构_Qt自己的MV架构

文章目录 前言模型/视图编程1.先写模型2. 视图3. 委托 例子&#xff08;Qt代码&#xff09;例1 查询本机文件系统例2 标准模型项操作例3 自定义模型示例:军事武器模型例4 只读模型操作示例例5 选择模型操作例6 自 定 义委 托(在testSelectionModel上修改) 前言 在Qt中&#xf…