Kubernetes之kube-proxy运行机制分析

一、基础知识

        1.Kubernetes再创建服务时会为服务分配一个虚拟IP地址,客户端通过这个虚拟Ip地址来访问服务,而服务则负责将请求转发到后端pod上。

        2.上述阐述的过程为一个反向代理的过程,但是这个反向代理和普通的反向代理的区别是它的IP地址是虚拟的而且它的部署和启动以及停止是由K8s统一自动管理。

        3.在K8s集群里每个Node上都会运行一个kube-proxy服务进程,这个进程可以看作service的透明代理兼负载均衡器,主要作用就是把service的访问请求转发到后端的多个Pod实例上。

        4.对于每一个TCP类型的Kuberbetes Service, kube-proxy都会在本地node上建立一个SocketServer来负责接收请求,然后均匀发送到后端某个pod的端口上,这个过程采用Round Robin负载均衡算法。

        5.kube-proxy的负载均衡器只支持RoundRobin算法,另外在此算法的基础上也支持Session保持,如果service在定义中指定了session保持,则kube-proxy接收请求时会从本地查找是否存在来自该请求ip的affinityState对象,如果不存在,则会按照RR算法为该请求挑选一个Endpoint,并创建一个affinityState对象,记录请求的IP和指向的Endpoint,后面的请求就会粘连到这个创建好的affinityState对象上

二、kube-proxy实现细节

        1.kube-proxy通过查询和监听API Server中service与Endpoints的变化,为每个Service都创建一个服务代理对象并自同步。其中服务代理对象是kube-proxy中的一种数据结构,它包括用于监听此服务请求的SocketServer(随机选择本地的一个空闲端口),另外它也在内部创建了一个LoadBalancer(保存了Service到对应的后端Endpoint列表的动态转发路由表)

        2.kube-proxy针对iptables的操作(在iptables的NAT表中添加4条规则):

                KUBE-PORTALS-CONTAINER:从容器中通过cluster IP和端口号访问Service的请求

                KUBE-PORTALS-HOST:从主机中通过cluster ip和端口号访问service的请求

                KUBE-NODEPORT-CONTAINER:从容器中通过service的NodePort端口号访问service的请求

                KUBE-NODEPORT-HOST:从主机中通过Service的Nodeport端口号访问service的请求

        此外,kube-proxy在iptables中为每个Service创建了由Cluster IP+Service端口到kube-proxy所在主机+service的代理服务所监听的端口的转发规则

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

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

相关文章

5. 【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--微服务基础工具与技术--Nacos

一、什么是Nacos Nacos 是阿里巴巴开源的一款云原生应用基础设施,它旨在简化微服务架构中服务治理和配置管理的复杂性。通过 Nacos,服务在启动时可以自动注册,而其他服务则可以通过名称来查找并访问这些注册好的实例。同时,Nacos…

鸿蒙接入支付宝SDK后模拟器无法运行,报错error: install parse native so failed.

鸿蒙项目接入支付宝后,运行提示error: install parse native so failed. 该问题可能由于设备支持的 Abi 类型与 C 工程中的不匹配导致. 官网error: install parse native so failed.错误解决办法 根据官网提示在模块build-profile.json5中添加“x86_64”依然报错 问…

安宝特方案 | AR眼镜:远程医疗的“时空折叠者”,如何为生命争夺每一分钟?

行业痛点:当“千里求医”遇上“资源鸿沟” 20世纪50年代,远程会诊的诞生曾让医疗界为之一振——患者不必跨越山河,专家无需舟车劳顿,一根电话线、一张传真纸便能架起问诊的桥梁。然而,传统远程医疗的局限也日益凸显&a…

编译原理面试问答

编译原理面试拷打 1.编译原理的基本概念 编译原理是研究如何将高级程序语言转换为计算机可执行代码的理论与技术,其核心目标是实现高效、正确的代码翻译。 **编译器:**将源代码转化为目标代码(机器码、字节码等)。一次翻译整个程…

蓝桥杯备赛——进制转化相关问题

目录 一、基础概念 二、问题研究(1) 代码解读: 1. transfer 函数 代码功能概述 详细步骤 2. main 函数 代码功能概述 详细步骤 三、运用递归解决 (一) 代码如下: 代码解读: &#…

cefsharp131升级132测试(WinForms.NETCore)

一、升级(Nuget) 版本说明(readme):最低.NET Core3.1 (NET5.0) Visual C 2019 Redist 二、试运行、兼容性测试 三、后记说明 支持H264版本推荐版本63,79,84,88,100,111,125(支持h264和pdf预览) 其他H264版…

打家劫舍3

今天和打家讲一下打家劫舍3 题目: 题目链接:337. 打家劫舍 III - 力扣(LeetCode) 小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为root。 除了 root 之外,每栋房子有且只有一个“父“…

深入解析 Vue 组件的构成

Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。Vue 组件是 Vue 应用的核心,它们封装了可复用的逻辑和视图,使得开发大型应用变得更加简单和高效。在 Vue 3 中,组件的构成更加灵活和强大,主要得益于 Composit…

PHP 运算符

PHP 运算符 概述 PHP 是一种广泛使用的开源服务器端脚本语言,它具有丰富的运算符集,这些运算符是编写 PHP 程序的基础。运算符用于执行各种数学、逻辑和比较操作。本篇文章将详细介绍 PHP 中常用的运算符,包括算术运算符、比较运算符、逻辑运算符、赋值运算符等。 算术运…

用AI写游戏1——js实现贪吃蛇

使用模型通义千问 提示词&#xff1a; 用js html css 做一个贪吃蛇的动画 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Snake Game</title><link rel"stylesheet" href"c…

解决com.kingbase8.util.KSQLException: This _connection has been closed.

问题描述 一个消息管理系统,系统采用kingbase8数据库,数据库采用单体模式,后台应用也采用springboot单体模式。系统正式上线后,出现几个JDBC响应的异常信息: com.kingbase8.util.KSQLException: An I/O error occurred while sending to the backend.java.net.SocketTime…

ubuntu24.04安装布置ros

最近换电脑布置机器人环境&#xff0c;下了24.04&#xff0c;但是网上的都不太合适&#xff0c;于是自己试着布置好了&#xff0c;留作有需要的人一起看看。 文章目录 目录 前言 一、确认 ROS 发行版名称 二、检查你的 Ubuntu 版本 三、安装正确的 ROS 发行版 四、对于Ubuntu24…

什么是中间件中间件有哪些

什么是中间件&#xff1f; 中间件&#xff08;Middleware&#xff09;是指在客户端和服务器之间的一层软件组件&#xff0c;用于处理请求和响应的过程。 中间件是指介于两个不同系统之间的软件组件&#xff0c;它可以在两个系统之间传递、处理、转换数据&#xff0c;以达到协…

linux下Maven的安装配置详解

一. maven下载 官网下载后上传到服务器 二. 压缩文件解压安装 tar -zxvf 压缩包.tar.gz -C 目标目录 tar -zxvf apache-maven-3.9.9-bin.tar.gz -C /usr/local三. 更换国内镜像 进入maven文件夹内部 创建依赖仓库 mkdir repository2. 编辑setting.xml 文件 vim conf/…

(1/100)每日小游戏平台系列

每日小游戏平台 项目简介以及地址 准备开发一个一百天小游戏平台&#xff0c;使用Flask构建的简单游戏导航网站&#xff0c;无需登录&#xff0c;让大家在返工的同时也可以愉快的摸鱼玩耍。 每天更新一个小游戏上传&#xff0c;看看能不能坚持一百天。 这些小游戏主要使用前端…

解锁Spring Boot 3.1 + JDK 17:分布式系统的变革力量

分布式系统发展的现状与挑战 在当今数字化时代&#xff0c;分布式系统已成为互联网技术领域的核心支撑。从电商平台的海量交易处理&#xff0c;到社交网络的实时互动&#xff0c;再到金融领域的安全交易保障&#xff0c;分布式系统无处不在&#xff0c;它如同无形的纽带&#…

Qt:Qt Creator项目创建

目录 认识Qt Creator Qt Creator概览 使用Qt Creator新建项目 选择项目模板 选择项目路径 选择构建系统 填写类信息设置界面 选择语言和翻译文件 选择Qt套件 选择版本控制系统 最终效果 认识Qt Creator Qt Creator概览 从开始菜单或者快捷方式打开Qt Creator集成开…

Vue笔记(六)

一、路由设计配置--一级路由配置 在路由文件&#xff08;一般是 router/index.js &#xff09;里定义路由对象数组&#xff0c;每个对象包含 path &#xff08;路由路径&#xff0c;如 / 代表首页&#xff09;、 name &#xff08;路由名称&#xff0c;方便代码引用&#xff09…

深度学习-神经机器翻译模型

以下为你介绍使用Python和深度学习框架Keras&#xff08;基于TensorFlow后端&#xff09;实现一个简单的神经机器翻译模型的详细步骤和代码示例&#xff0c;该示例主要处理英 - 法翻译任务。 1. 安装必要的库 首先&#xff0c;确保你已经安装了以下库&#xff1a; pip insta…

webpack【初体验】使用 webpack 打包一个程序

打包前 共 3 个文件 dist\index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Webpack 示例&…