深入理解k8s中的service概念

2023-05-16

文章目录

  • service的概念
  • kube-proxy的作用
  • kube-proxy的三种模式
    • Userspace Proxy Mode
    • Iptables Proxy Mode
    • IPVS proxy mode

service的概念

在k8s集群中,service是一个抽象概念,它通过一个虚拟的IP映射指定的端口,将代理客户端发来的请求转到后端一组pod中的一个上。这是个神马意思呢?pod中的容器经常在不停地销毁和重建,因此pod的IP会不停的改变,这时候客户端就没法访问到pod了,现在有了service作为客户端和pod的中间层,它在这里抽象出一个虚拟IP,然后集群内部都可以通过这个虚拟IP访问到具体的pod。
其实service在kubernetes版本迭代中,有过几次变更。在kubernetes v1.0 中开始使用userspace proxy mode(用户空间代理态代理模式),kubernetes v1.1增加了iptables代理模式,kubernetes v1.2 默认把iptables当成kube-proxy的代理模式。在kubernetes v1.8 增加了性能更强劲的ipvs proxy mode。

kube-proxy的作用

在k8s中,service的集群IP能够实现数据报文请求的转发,需要在node节点上部署的一个组件kube-proxy,具体来说kube-proxy实现的主要有几点:

  • 实时监控API,获取service和pod的信息,来保持pod和虚拟IP的映射关系
  • 维护本地Netfilter 、iptables、IPVS等内核组件,实现数据报文的转发规则
  • 实现每个node节点上虚拟IP的发布和路由维护
  • 构建路由信息,通过转发规则转发报文到虚拟IP对应的pod

kube-proxy的三种模式

在k8s中,kube-proxy有三种模式可以实现虚拟IP、路由信息和报文转发。

Userspace Proxy Mode

在userspace代理模式下,kube-proxy起到一个反向代理的功能,对userspace的报文封装往kernelspace转发,主要是处理路由规则下发,数据包转发和负载均衡,所以kube-proxy会在网络流量和数据报文传输频率较高时频繁地在userspace和kernelspace之间进行上下文切换。

在这个模式下,kube-proxy主要进行这么几步:

  • 监控k8s集群的API,获取新建或删除service和pod的指令
  • 当获取到新建service的指令后,kube-proxy在node上开放随机端口,然后转发到pod上
  • kube-proxy会安装iptables规则,将访问service的虚拟IP和端口的流量拦截并重定向到上面开发的端口
  • 当重定向的流量获取到node端口时,kube-proxy作为一个负载均衡器,把流量分发给后端的pod

简单来说就是从虚拟IP转发流量并重定向到node上的随机端口,进行netfiller包过滤,再回到userspace进行负载均衡转发。在这个模式下,kube-proxy会多次进行userspace和kernelspace的切换,因此性能损耗较大。

Iptables Proxy Mode

userspace代理模式由于性能原因,在kubernetes v1.2以后就不再怎么使用了,取而代之的是iptables代理模式。在iptables模式中,kube-proxy不再作为反向代理而在虚拟IP和pod之间进行转发,而是将这个工作交给四层的iptables来做,iptables和netfiller紧密合作在kernelspace里就实现了数据包的转发。

在这个模式下,kube-proxy主要进行这么几步:

  • 监控k8s集群的API,获取新建或删除service和pod的指令
  • kube-proxy在node上设置iptables规则,当有请求发送到service的虚拟IP上时,会立即被捕获并重定向到此service对应的一个pod上
  • kube-proxy会在node上为每一个service对应的pod设置iptables规则

在iptables模式中,kube-proxy把流量转发和负载均衡完全委托给iptables和netfiller来做,因此全部工作都在kernelspace完成了,比userspace模式性能提升很多。
当然这个模式也有缺点。在userspace模式下,负载均衡带有健康检测机制,如果选择的pod没有响应,kube-proxy会重新选择;但在iptables模式下则没有健康检测机制,如果pod无法响应,且没有被k8s集群摘除,就会导致转发到此pod的请求超时。

IPVS proxy mode

IPVS是lvs的一个组件,提供高性能、高可靠的基于四层的负载均衡器,IPVS是IP Virtual Server的简写。IPVS构建在netfiller上,作为Linux内核的一部分,在四层实现了负载均衡。IPVS能直接转发基于service的TCP/UDP到真实机上;还能直接构建一个虚拟IP并通过负载均衡算法,把请求转发到pod上。这里的IPVS的功能就类似kube-proxy在userspace代理模式下做的工作。
而在iptables代理模式中,一个k8s集群会有大量service,也就意味着会有极大量的iptables规则,IPVS在这方面也做了改进,它将网络转发规则用hash tabels来存储而且主要工作在kernelspace,减少了上下文切换影响的性能。

在这个模式下,kube-proxy主要进行这么几步:

  • 监控k8s集群的API,获取新建或删除service和pod的指令
  • 当有新的service建立,kube-proxy回调网络接口,构建IPVS规则
  • kube-proxy会定期同步service和pod的转发规则,确保失效的转发及时更新
  • 有请求转发到后端时,IPVS的负载均衡直接将其转发给pod
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深入理解k8s中的service概念 的相关文章

  • Spring Boot RestController,错误状态响应主体,错误消息为空

    在我的 Spring Boot RestController 上 我想通过抛出自定义异常来将自定义错误消息传递到响应正文 我正在遵循指南https dzone com articles spring rest service excepti
  • 识别 WCF 服务中的客户端

    我有一个工作双工 WCF 服务WSDualHttpBinding 我的问题是找到一种方法来存储具有唯一 ID 的回调通道 该服务旨在长期运行 我可以简单地抓住OperationContext Current GetCallbackChann
  • 如何在.NET中创建HTTP请求侦听器Windows服务

    我想创建充当 HTTP 侦听器并可以处理大约 500 个客户端的 Windows 服务 这种服务有什么特别的考虑吗 我对 HTTPListener 类和 TCPListener 类有点困惑 将哪一个用于 Windows 服务将 接受客户端连
  • Windows服务之间如何通信

    我有 2 个使用 C 创建的 Windows 服务 我希望其中一个服务调用第二个 Windows 服务中的函数 我该怎么做呢 EDIT 问题是我必须运行该应用程序 我不需要它们 相反服务进程也很好 但我need这2个应用程序进行通信 这2个
  • 致命信号 11 (SIGSEGV),代码 1,故障地址 (RenderThread)

    当双击附加到窗口管理器的元素时 我试图停止服务 Override public boolean onTouch View v MotionEvent event switch event getAction case MotionEvent
  • 电子邮件解析云服务[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 服务崩溃,事件名称为 [CLR20r3] [重复]

    这个问题在这里已经有答案了 我已经创建了一项服务 Net c 基本上定期发送电子邮件 该服务在我的上运行良好x32 XP机器但是当我部署时x64 build基于另一个 x64 Windows Server 2008 R2机器 服务启动并在几
  • Android后台服务判断前台应用程序

    我正在开发一个应用程序 可以监控全天的手机使用情况 为此 我有一个后台服务 该服务在设备启动时启动 并不断轮询以找出当前的前台应用程序是什么 当我单击一个应用程序然后退出并单击另一个应用程序时 以下代码将起作用 现在假设我打开浏览器并转到另
  • 作为 Windows 服务运行时的 PCSC.InvalidContextException

    我一直在使用 pcsc sharp 库开发一个小型智能卡扫描仪应用程序 该应用程序作为控制台应用程序运行时工作正常 代码如下 using System using System Collections Generic using Syste
  • Grails 在 Service 类中获取 Session 和 Management

    我对 Grails 会话有疑问 我正在考虑为我的会话处理提供一个服务类 所以我创建了一个名为 SessionService 的类 在 grails app services grails 下 class SessionService sta
  • 在重新激活 WiFi/移动网络之前,服务中的 Android 位置侦听器无法工作

    我的位置侦听器工作正常 收集数据没有任何问题 但有时它不收集任何数据 我此时必须关闭并重新启动我的位置提供程序 重新启动可以解决问题 但是 这可能不是用户期望做的最好的事情 当我使用 GPS 作为提供商时 没有问题 位置侦听器在服务中工作
  • 如何通过 Angular 6 中的服务将对象发送到不相关的组件?

    所以我是 Angular 的新手 我正在尝试使用服务将对象从组件 1 发送到组件 2 当我将结果记录到 component2 中的控制台时 它没有给我对象的更新值 这可能是因为服务在第二个组件中重新初始化 你能帮忙解决这个问题吗 这是我的代
  • OSGi 应用程序设计 - 我是否滥用服务框架? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在我们正在开发的应用程序中 我有一个供数据提供程序组件实现的通用接口 并且我将这些提供程序作为服务连接起来 我的一位同事建议 最好只创建一项可以
  • 棒棒糖中的 takePicture 失败

    以下代码正在使用 可在后台拍照 它对于棒棒糖以下的所有版本都工作正常 但在以下版本中给出运行时异常takePicture null null mcall 有任何想法吗 public void takePictures final int d
  • 无法从 AsyncTask 启动服务

    我正在尝试从 AsyncTask 启动服务 但看不到它的启动 我还在清单文件中添加了服务 这里是代码 protected Integer doInBackground Void values throws InterruptedExcept
  • 如何在视图中调用 Grails 服务?

    简单的问题 我有一个服务类 比方说helpersService 和一个方法def constructURI params 如何从模板视图调用此方法 我尝试了以下代码但没有成功 img src 但我得到以下结果 No signature of
  • 使用taskkill停止Windows服务

    我需要帮助来使用 C 终止 Windows 服务 现在要终止该服务 请使用以下选项 从命令 sc queryex ServiceName 发现后PID服务的 taskkill pid 1234 exemple f 为了便于阅读 但如果您明白
  • 无法启动 Windows 服务,错误 1064

    我编写了一个在 Win10 上运行的 Windows 服务 它运行得非常好 直到我决定对其进行一些更改 我重写了一些逻辑 在调试和发布配置中进行了测试 一切都很好 然后 我使用卸载了当前版本的服务installutil exe u serv
  • 发送变量后的 wsdl 服务响应,php

    我是 SOAP WSDL 函数的新手 我有一位客户从一家从事汽车测试的公司获得了 wsdl 文件 我的客户是他们的分包商 他们告诉我们上传有关车牌 类别等信息 一旦详细信息发送完毕 服务器就会做出成功或失败的响应 请您协助 浏览不同的信息
  • Google Play 商店中基于服务的 Android 应用程序

    我正在开发一个应用程序 该应用程序仅包含一些服务 没有任何活动 即没有 UI 基本上 当用户在他 她的设备上安装应用程序时 我希望有 2 到 3 个服务在后台运行 对此我有几个疑问 应用程序安装后我的服务将如何启动 我的BroadcastR

随机推荐

  • 3天学会Jenkins_9_主题更换

    转载注明出处 xff0c 欢迎关注微信小程序小白AI博客 微信公众号小白AI或者网站 https xiaobaiai net或者我的CSDN https blog csdn net freeape 1 为啥换主题 xff1f 原始安装的Je
  • Spring Boot从零入门7_最新配置文件配置及优先级详细介绍

    本文属于原创 xff0c 转载注明出处 xff0c 欢迎关注微信小程序小白AI博客 微信公众号小白AI或者网站 https xiaobaiai net 或者我的CSDN http blog csdn net freeape 文章目录 0 前
  • 3天学会Jenkins_10_gitlab or github代码提交后自动构建1

    转载注明出处 xff0c 欢迎关注微信小程序小白AI博客 微信公众号小白AI或者网站 https xiaobaiai net或者我的CSDN https blog csdn net freeape 1 背景 在多人团队开发中 xff0c 经
  • 3天学会Jenkins_11_gitlab or github代码提交后自动构建2

    转载注明出处 xff0c 欢迎关注微信小程序小白AI博客 微信公众号小白AI或者网站 https xiaobaiai net或者我的CSDN https blog csdn net freeape 文章目录 1 准备2 Jenkinsfil
  • 3天学会Jenkins_12_配置Jenkinsfile构建完成后自动发送邮件

    转载注明出处 xff0c 欢迎关注微信小程序小白AI博客 微信公众号小白AI或者网站 https xiaobaiai net或者我的CSDN https blog csdn net freeape 文章目录 1 准备2 Jenkinsfil
  • 3天学会Jenkins_13_自动部署项目到远程服务器

    转载注明出处 xff0c 欢迎关注微信小程序小白AI博客 微信公众号小白AI或者网站 https xiaobaiai net或者我的CSDN https blog csdn net freeape 文章目录 1 准备2 目标和原理2 1 目
  • Kafka及周边深度了解

    本文属于原创 xff0c 转载注明出处 xff0c 欢迎关注微信小程序小白AI博客 微信公众号小白AI或者网站 https xiaobaiai net 或者我的CSDN http blog csdn net freeape 文章目录 0 前
  • Kafka,ZK集群开发或部署环境搭建及实验

    本文属于原创 xff0c 转载注明出处 xff0c 欢迎关注微信小程序小白AI博客 微信公众号小白AI或者网站 https xiaobaiai net 或者我的CSDN http blog csdn net freeape 文章目录 1 前
  • Spring Boot 基于Spring Integration 实现MQTT客户端简单订阅发布功能

    本文属于翻译 xff0c 转载注明出处 xff0c 欢迎关注微信小程序小白AI博客 微信公众号小白AI或者网站 https xiaobaiai net TOC 1 简介 Spring Integration 提供入站 inbound 和出站
  • php 获取今天开始的时间戳

    一天86400秒 time 61 time date 61 date 39 Y m d 39 time 今天的年月日 startTime 61 strtotime date 39 Y m d 39 time 今天开始时间的时间戳 endTi
  • Spring Boot Kafka概览、配置及优雅地实现发布订阅

    本文属于原创 xff0c 转载注明出处 xff0c 欢迎关注微信小程序小白AI博客 微信公众号小白AI或者网站 https xiaobaiai net 文章目录 1 前言2 Spring Kafka功能概览2 1 自动创建主题2 2 发送消
  • An Ota Package Tool

    文章目录 OtaPackageToolInstallationBinary InstallationInstalling Tool from Source UsagePreparationExamplesFull UpdatesIncrem
  • [开源]OTA打包工具

    文章目录 OTA打包工具 96 ota packer 96 安装二进制安装源码编译安装 使用准备示例全量包增量包生成关于OTA包版本之间文件变更类型说明 96 ota packer 96 使用条件License OTA打包工具 ota pa
  • [golang]包管理

    文章目录 1 GOPATH vs Go Modules2 Go Modules Go Module Proxy 和 goproxy cn3 Go Modules 相关知识3 1 语义化版本控制规范3 2 go mod3 3 go sum3
  • 【名名的Bazel笔记】自定义规则实现将多个静态库合并为一个动态库或静态库

    文章目录 1 前言2 自定义规则实现2 1 规则功能2 2 实现规则的理论基础2 3 规则代码实现 3 总结4 参考资料 1 前言 为了实现如标题所述的将多个静态库合并为一个动态库 xff0c 内置的 Bazel 规则是没有这个功能的 xf
  • 【名名的Bazel笔记】自定义工具链实现交叉编译

    文章目录 1 前言2 Non Platform 方式3 Platform 方式3 1 平台3 1 1 概述3 1 2 定义约束和平台3 1 3 通用的约束和平台3 1 4 指定平台构建 3 2 工具链3 3 Platform 43 Tool
  • PX4/Pixhawk---uORB深入理解和应用

    The Instructions of uORB PX4 Pixhawk 软件体系结构 uORB 主题发布 主题订阅 1 简介 1 1 PX4 Pixhawk的软件体系结构 PX4 Pixhawk的软件体系结构主要被分为四个层次 xff0c
  • join函数

    Python中我们经常会用到join函数 join函数的基本格式是 xff1a span class token string 39 39 span span class token punctuation span join span c
  • Glance详解

    Glance简介 Glance是OpenStack平台中负责镜像服务的组件 xff0c 其功能包括系统镜像的查找 注册和获取等 简单来说glance的功能就是用户可以通过其提供的REST API查询和获取镜像元数据 xff0c 通过Glan
  • 深入理解k8s中的service概念

    文章目录 service的概念kube proxy的作用kube proxy的三种模式Userspace Proxy ModeIptables Proxy ModeIPVS proxy mode service的概念 在k8s集群中 xff