深入理解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概念 的相关文章

  • 在 Windows Server 2008 上安装 Tomcat 7 作为服务

    我想将 tomcat v7 0 12 作为服务安装在 Windows 2008 Server 上 在tomcat页面上我发现本教程 http tomcat apache org tomcat 7 0 doc windows service
  • ::FindWindow 从服务应用程序失败

    从服务应用程序调用时 Windows API FindWindow 函数失败 GetLastError 也返回 0 成功 这是一些特权 访问权问题吗 你认为这是设计问题吗 我应该使用另一种IPC方法吗 leppie 是的 Windows 服
  • 作为后台进程/服务运行命令

    我有一个 Shell 命令 我想在后台运行 并且我读到这可以通过添加后缀来完成 到导致它作为后台进程运行的命令 但我需要一些更多的功能 并且想知道如何去做 我希望每次系统重新启动时该命令都在后台启动并运行 我希望能够像人们一样在需要时启动和
  • 如何从与桌面交互的应用程序与 Windows 服务进行通信?

    使用 Net 与服务交互的最佳方式是什么 即大多数托盘应用程序如何与其服务器通信 如果这个方法也是跨平台的 那就更好了 在 Mono 中工作 所以我猜远程处理已经过时了 Edit 忘了说了 我们仍然需要在现场支持 Windows 2000
  • 共享首选项更新值未反映在服务中

    我的应用程序在应用程序启动时调用服务 在应用程序中 我正在更新给定键值对的值 SharedPreferences Editor editor getSharedPreferences getString R string shared pr
  • Windows 服务和 Windows 进程有什么区别?

    是什么不同之处窗户之间service和一个窗户process 服务是真正的 Windows 进程 没有区别 服务的唯一特殊之处在于它由操作系统启动并在单独的会话中运行 一种独立的方式 可防止其干扰桌面会话 传统上命名为daemon http
  • 使用 MediaRecorder 录制屏幕特定视图

    我想录制特定的屏幕视频View链接只想记录里面执行的动作LinearLayout 现在 MediaRecorder正在录制整个屏幕 如何录制屏幕的特定部分 MediaRecorder 通过媒体投影API 记录整个屏幕 至少从 Android
  • Symfony 4 参数没有类型提示,您应该显式配置其值

    交响乐4 2 3 最近从版本 3 4 升级到 4 2 3 并使我的项目正常运行 但是 当将 services yaml 中的 autoconfigure 设置为 true 时 我将收到以下错误消息 Cannot autowire servi
  • SC创建binpath错误

    我正在尝试在 PowerShell 中运行以下命令 sc create StrongSwan binpath C Users Kanishk Desktop Strong Strong stronswan strongswan 5 6 3
  • 服务作为 SOA 中的中介

    我知道什么是 通常的 中介设计模式 维基百科中有一些描述 http en wikipedia org wiki Mediator pattern http en wikipedia org wiki Mediator pattern 在我的
  • 无法启动 Windows 服务,错误 1064

    我编写了一个在 Win10 上运行的 Windows 服务 它运行得非常好 直到我决定对其进行一些更改 我重写了一些逻辑 在调试和发布配置中进行了测试 一切都很好 然后 我使用卸载了当前版本的服务installutil exe u serv
  • 需要帮助编写循环任务调度程序

    我需要编写一个工具 它将按照用户可配置的时间表运行重复任务 我将用 C 3 5 编写它 它将在 XP Windows 7 或 Windows Server 2008 上运行 完成任务大约需要 20 分钟 用户可能想要设置多种配置 例如每日
  • Android 在启动时启动服务,如何在设备重启后重新启动服务类?

    我需要在启动时启动一项服务 我搜索了很多 他们正在谈论广播接收器 由于我是 Android 开发新手 所以我对 Android 上的服务并没有清楚的了解 请提供一些源代码 您的接收者 public class MyReceiver exte
  • 使用服务时应用程序终止时音乐暂停

    我正在使用一个Service类在后台播放音乐 当我在顶部显示通知栏时 我的应用程序出现问题 当我终止该应用程序时 音乐停止约 1 秒 然后再次开始 我不知道出了什么问题 我正在关注this https www simplifiedcodin
  • 了解 IServiceProvider 和 QueryService

    谁能解释一下背后的想法IServiceProvider and QueryService 我不明白服务是什么以及它与其他类型的对象或接口有何不同 我看到的解释很少 主要是一些评论here https learn microsoft com
  • Grails Spock 单元测试需要模拟事务管理器

    在 Grails 3 1 12 中 我想对服务进行单元测试 Transactional class PlanService List
  • Inno Setup - 在文件复制之前正确停止服务

    我们的安装过程包括一个 Windows 服务 如果我们的软件配置为作为服务器安装 相对于客户端安装 则会安装该服务 我添加了服务库 http www sandon it files services unicode iss为了能够管理服务
  • 如何打开定位服务

    当有人第一次拒绝时 如何从实际应用程序重新打开定位服务 我可以选择关闭或打开它 您只能提示他们在屏幕上打开定位服务 如下所示 UIApplication sharedApplication openURL NSURL URLWithStri
  • Android 后台服务示例,具有交互式调用方法

    我不是 Android 方面的专家 我正在寻找一个 Android 应用程序的示例 该应用程序使用一个服务 其中有真正的功能方法 或者换句话说 一个服务可以用来做什么 我们什么时候需要它 超越简单的东西服务举例 我确信您渴望获得一些工作代码
  • Android 后台倒计时器

    我有一个 Android 应用程序 它管理一个倒计时器 类 CountDownTimer 它显示在应用程序屏幕中 以显示到达 00 00 还剩多少时间 我现在的问题是 当我按主页按钮或启动另一个应用程序时 应用程序 计时器不会在后台运行 所

随机推荐

  • 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