Kubernetes 外部 HTTP 请求到达 Pod 容器的全过程

文章目录

    • 1、问题一
    • 2、HTTP 请求流转过程概述图
    • 3、详细过程分析
    • 4、容器技术底座
    • 5、问题二
    • 6、详细过程分析(补充)

1、问题一

当外部发送一个HTTP/HTTPS 请求到Kubernetes 集群时,它是如何达到 Pod 中的 container 的呢?

2、HTTP 请求流转过程概述图

在这里插入图片描述

3、详细过程分析

如第二节图所示,全过程大致为:

  1. 用户从 web/mobile/pc 等客户端发出 HTTP/HTTPS 请求。

  2. 由于应用服务通常是通过域名的形式对外暴露,所以请求将会先进行 DNS 域名解析,得到对应的公网 IP 地址。

  3. 公网 IP 地址通常会绑定一个 Load Balancer 负载均衡器,此时请求会进入此负载均衡器。

     • Load Balancer 负载均衡器可以是硬件,也可以是软件,它通常会保持稳定(固定的公网 IP 地址),因为如果切换 IP> 地址会因为 DNS 缓存的原因导致服务某段时间内不可达。 	 	• Load Balancer 负载均衡器是一个重要的中间层,对外承接公网流量,对内进行流量的管理和转发。
    
  4. Load Balancer 再将请求转发到 kubernetes 集群的某个流量入口点,通常是 ingress。

     • ingress 负责集群内部的路由转发,可以看成是集群内部的网关。• ingress 只是配置,具体进行流量转发的是 ingress-controller,后者有多种选择,比如 Nginx、HAProxy、Traefik、Kong 等等。
    
  5. ingress 根据用户自定义的路由规则进一步转发到 service。

     • 比如根据请求的 path 路径或 host 做转发。
    

在这里插入图片描述

  1. service 根据 selector(匹配 label 标签)将请求转发到 pod。

     • service 有多种类型,集群内部最常用的类型就是 ClusterIP。• service 本质上也只是一种配置,这种配置最终会作用到 node 节点上的 kube-proxy 组件,后者会通过设置 iptables/ipvs 来完成实际的请求转发。• service 可能会对应多个 pod,但最终请求只会被随机转发到一个 pod 上。
    
  2. pod 最后将请求发送给其中的 container 容器。

     • 同一个 pod 内部可能有多个 container,但是多个容器不能共用同一个端口,因此这里会根据具体的端口号将请求发给对应的 container。
    

以上就是一种典型的集群外部 HTTP 请求如何达到 Pod 中的 container 的全过程。

需要注意的是,由于网络配置灵活多变,以上请求流转过程并不是唯一的方式,例如:

	• 如果你使用的是云服务,那么可以通过使用 LoadBalancer 类型的 service 直接绑定一个云服务商提供的负载均衡器,然后再接 ingress 或者其它 service。• 你也可以通过 NodePort 类型的 service 直接使用节点上的端口,通过这些节点自建负载均衡器。• 如果你的服务特别简单,没啥内部流量需要管理的,这时不用 ingress 也是可以的。

4、容器技术底座

容器技术的底座有三样东西:

• Namespace(这里是指 Linux 系统内核的命名空间)

• Cgroups

• UnionFS

正是 Linux 内核的 namespace 实现了资源的隔离。因为每个 pod 有各自的 Linux namespace,所以不同的 pod 是资源隔离的。namespace 有多种,包括 PID、IPC、Network、Mount、Time 等等。其中 PID namespace 实现了进程的隔离,因此 pod 内可以有自己的 1 号进程。而 Network namespace 则让每个 pod 有了自己的网络。

5、问题二

Pod 有自己的网络,node 节点也有自己的网络,那么流量是如何从 node 节点到 pod 的呢?

6、详细过程分析(补充)

HTTP 请求流转过程补充
在这里插入图片描述
每个 node 节点上都有:

	• kubelet:节点的小管家。• kube-proxy:操作节点的 iptables/ipvs 。• plugins:• CRI:容器运行时接口• CNI:容器网络接口• CSI(可选):容器存储接口

每个 node 节点有自己的 root namespace,其中也包括网络相关的 root netns,每个 pod 有自己的 pod netns,从 node 到 pod 则可以通过 veth pairs 的方式连通,流量也正是通过此通道进行的流转。而构建 veth pairs、设置 pod network namespace、为 pod 分配 IP 地址等等工作则正是 CNI 的任务。

至此,一个典型的 kubernetes 集群外部的 HTTP/HTTPS 请求如何达到 Pod 中的 container 的全过程就是这样了。

在这里插入图片描述


如果停止,就是低谷;如果继续,就是上坡。


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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

违背祖训,微软骚操作强制用户更新至 Win 11 23H2

话说,大伙儿有让 Windows 操作系统一直保持最新版习惯吗? 根据以往惯例,Windows 系统更新是个比较玄学的存在,谁也不能保证随手更新后会不会出现什么奇葩 Bug。 因此对于不少同学来说,Windows 更新到一个稳定版本后&a…

openGauss学习笔记-230 openGauss性能调优-系统调优-配置并行查询功能

文章目录 openGauss学习笔记-230 openGauss性能调优-系统调优-配置并行查询功能230.1 适用场景与限制230.2 资源对SMP性能的影响230.3 其他因素对SMP性能的影响230.4 配置步骤 openGauss学习笔记-230 openGauss性能调优-系统调优-配置并行查询功能 openGauss的SMP并行技术是一…

Linux磁盘如何分区?

首先需要先给虚拟机添加磁盘 sblk #查看磁盘设备 得到以下内容: NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 19G 0 pa…

Groovy - 大数据共享搜索配置

数据共享搜索列中配置了搜索列,相应的数据共享接口中也需要支持根据配置的字段搜索,配置实体时,支持搜索的入参code必须是searchKeys,且接口应该是需要支持分页(入参必须是 current、pageSize)的。current …

springboot+vue学生信息管理系统学籍 成绩 选课 奖惩,奖学金缴费idea maven mysql

技术栈 ide工具:IDEA 或者eclipse 编程语言: java 数据库: mysql5.7 框架:ssmspringboot都有 前端:vue.jsElementUI 详细技术:springbootSSMvueMYSQLMAVEN 数据库工具:Navicat/SQLyog都可以学生信息管理系统主要实现角…

NLP - 共现矩阵、Glove、评估词向量、词义

Word2vec算法优化 J(θ): 损失函数 问题:进行每个梯度更新时,都必须遍历整个语料库,需要等待很长的时间,优化将非常缓慢。 解决:不用梯度下降法,用随机梯度下降法 (SGD)。 减少噪音&…

MongoDB基础学习

文章目录 一、数据库1. 概念介绍2. 数据库分类 二、MongoDB入门1. 简介2. MongoDB的基本操作3. MongoDB文档间的关系4. Sort和投影 一、数据库 1. 概念介绍 数据库是按照数据结构来组织、存储和管理数据的仓库。我们的程序在内存中运行,一旦程序运行结束或者计算机…

【力扣 - 杨辉三角】

题目描述 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例 2: 输入: numRows 1 输出: [[1]] 提示: 1 < numRows < 30 方法一&#xff1a;数学 思路…

2024年2月19日-2月25日周报

文章目录 1. 本周计划2. 完成情况2.1 DCGANS网络架构2.2 SRGAN网络架构 3. 总结及收获4.下周计划 1. 本周计划 学习网络架构DCGANS和SRGAN 2. 完成情况 2.1 DCGANS网络架构 模型的核心&#xff1a;&#xff08;论文链接&#xff09; 取消池化层&#xff0c;使用带步长(str…

Leetcode—82. 删除排序链表中的重复元素 II【中等】

2024每日刷题&#xff08;117&#xff09; Leetcode—82. 删除排序链表中的重复元素 II 实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val…

计算机设计大赛 深度学习手势识别 - yolo python opencv cnn 机器视觉

文章目录 0 前言1 课题背景2 卷积神经网络2.1卷积层2.2 池化层2.3 激活函数2.4 全连接层2.5 使用tensorflow中keras模块实现卷积神经网络 3 YOLOV53.1 网络架构图3.2 输入端3.3 基准网络3.4 Neck网络3.5 Head输出层 4 数据集准备4.1 数据标注简介4.2 数据保存 5 模型训练5.1 修…

fork创建子进程及僵尸进程的产生及规避

本篇文章的学习与总结来源于 https://www.bilibili.com/cheese/play/ep182659?csourcecommon_hp_history_null&t3&spm_id_from333.1007.top_right_bar_window_history.content.click 通常使用fork()函数产生新的子进程&#xff0c;需要包含两个头文件<sys/types.h…

修改Qt生成iOS应用的原生底层,编译QtBase下的ios子模块

1.下载Qt源码 2.找到ios.pro子工程 3.使用QtCreaor12打开ios.pro工程 4.出现工程下只有一个.pro文件解决 复制修改好的toolchain.prf文件进行替换. 修改方法:

微服务之qiankun主项目+子项目搭建

主项目使用history&#xff0c;子项目使用hash模式 1. 下载安装"qiankun": "^2.10.13"2. 手动调用qiankun,使用vue脚手架搭建的项目1. 主项目配置&#xff08;我使用的是手动调用乾坤&#xff0c;在指定页面显示内容&#xff09;1. 要使用的页面中引入乾坤…

vue3项目如何配置能显示局域网之内的ip网址

在Vue 3项目中&#xff0c;如果你想要配置项目使其可以通过局域网内的IP地址被访问&#xff0c;通常需要修改开发服务器的配置&#xff0c;使其监听所有网络接口。下面是如何进行配置的步骤&#xff1a; 修改vue.config.js文件: 首先&#xff0c;确保你的项目根目录下有一个vue…

【LeetCode】每日一题:使二叉树所有路径值相等的最小代价

该题采用自底向上的思路的话&#xff0c;很容易想到使用贪心的思想&#xff0c;但是如何进行具体操作却有些难度。 这里补充一个重要的结论&#xff1a;二叉树的数组形式中&#xff0c;第i个节点的父节点是i/2&#xff1b;接下来只需要让自底向上让每个路径上的代价保持最低限…

互联网加竞赛 机器视觉目标检测 - opencv 深度学习

文章目录 0 前言2 目标检测概念3 目标分类、定位、检测示例4 传统目标检测5 两类目标检测算法5.1 相关研究5.1.1 选择性搜索5.1.2 OverFeat 5.2 基于区域提名的方法5.2.1 R-CNN5.2.2 SPP-net5.2.3 Fast R-CNN 5.3 端到端的方法YOLOSSD 6 人体检测结果7 最后 0 前言 &#x1f5…

Ubuntu20.04 (VMware 虚拟机) fdisk -l 权限不够的解决办法

磁盘容量扩展时候&#xff0c;输入fdisk -l命令时&#xff0c;提示无权限&#xff0c; 这个时候考验耐心的时候到了&#xff01; 第一步&#xff1a; 输入su root 第二部&#xff1a; 然后输入root管理员账户密码 如果不知道密码的话&#xff0c;看第三步 第三步&#xf…

后端程序员入门react笔记(六)- 讲透Promise与Fetch

js声明变量的三种方式 我们通常使用 var let 和const来声明js的变量&#xff0c;但是这三者有什么区别呢&#xff1f; var的变量可以是全局的或者函数作用域&#xff0c;而let和const只能是块级作用域var和let可以重新赋值&#xff0c;而const是不允许重新赋值的&#xff0c;…

Linux课程四课---Linux开发环境的使用(vim编辑器的相关)

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…