kube-proxy代理模式详解

这篇具有很好参考价值的文章主要介绍了kube-proxy代理模式详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

kube-proxy代理模式详解

kube-proxy当前支持以下几种代理模式:

1、userspace:最早的负载均衡方案,它在用户空间监听一个端口,所有服务通过iptables转发到这个端口,然后在其内部负载均衡到实际的Pod。该方式最主要的问题是效率低,有明显的性能瓶颈,不再推荐使用。

比如说创建一个service,对应的IP:1.2.3.4,port:8888,kube-proxy随机选择的端口是32890,则会在iptables中追加

-A PREROUTING -j KUBE-PORTALS-CONTAINER
 
-A KUBE-PORTALS-CONTAINER -d 1.2.3.4/32 -p tcp --dport 8888 -j REDIRECT --to-ports 32890

KUBE-PORTALS-CONTAINER 是kube-proxy在iptable中创建的规则链,在PREROUTING阶段执行

执行过程:

  • 当有请求访问service时,在PREROUTING阶段,将请求jumpKUBE-PORTALS-CONTAINER;
  • KUBE-PORTALS-CONTAINER中的这条记录起作用,把请求重定向到kube-proxy刚监听的端口32890上,数据包进入kube-proxy进程内;
  • 然后kube-proxy会从这个service对应的endpoint中根据SessionAffinity来选择一个作为真实服务响应请求。
    kube-proxy代理模式详解,运维,系统安全,kubernetes,负载均衡,云原生,运维

2、iptables:目前推荐的方案,完全以 iptables 规则的方式来实现 service 负载均衡。该方式最主要的问题是在服务多的时候产生太多的 iptables 规则,非增量式更新会引入一定的时延,大规模情况下有明显的性能问题。

比如说创建了一个service,对应的IP:1.2.3.4,port:8888,对应一个后端地址:10.1.0.8:8080,则会在iptables中追加(主要规则):

 -A PREROUTING -j KUBE-SERVICES
 
-A KUBE-SERVICES -d 1.2.3.4/32 -p tcp –dport 8888 -j KUBE-SVC-XXXXXXXXXXXXXXXX
 
-A KUBE-SVC-XXXXXXXXXXXXXXXX -j KUBE-SEP-XXXXXXXXXXXXXXXX
 
-A KUBE-SEP-XXXXXXXXXXXXXXXX -p tcp -j DNAT –to-destination 10.1.0.8:8080

KUBE-SERVICES 是kube-proxy在iptable中创建的规则链,在PREROUTING阶段执行

执行过程:

  • 当请求访问service时,iptables在prerouting阶段,将讲求jump到KUBE-SERVICES;
  • 在KUBE-SERVICES 中匹配到上面的第一条准则,继续jump到KUBE-SVC-XXXXXXXXXXXXXXXX;
  • 根据这条准则jump到KUBE-SEP-XXXXXXXXXXXXXXXX;
  • 在KUBE-SEP-XXXXXXXXXXXXXXXX规则中经过DNAT动做,访问真正的pod地址10.1.0.8:8080。
    kube-proxy代理模式详解,运维,系统安全,kubernetes,负载均衡,云原生,运维

3、ipvs:为解决iptables模式的性能问题,v1.11新增了ipvs模式(v1.8开始支持测试版,并在v1.11 GA),采用增量式更新,并可以保证service更新期间连接保持不断开。

在IPVS模式下,kube-proxy观察Kubernetes中service和endpoint对象的变化,通过调用netlink接口创建相应的IPVS规则,并周期性的对Kubernetes的service、endpoint和IPVS规则进行同步,当访问一个service时,IPVS负责选择一个真实的后端提供服务。

IPVS模式也是基于netfilter的hook功能(INPUT阶段),这点和iptables模式是一样的,但是用的是内核工作空间的hash表作为存储的数据结构,在这种模式下,iptables可通过ipset来验证具体请求是否满足某条规则。在service变成时,只用更新ipset中的记录,不用改变iptables的规则链,因此可以保证iptables中的规则不会随着服务的增加变多,在超大规模服务集群的情况下提供一致的性能效果。

在对规则进行同步时的性能也要高于iptables(只用对特定的一个hash表进行更新,而不是像iptables模式下对整个规则表进行操作),所以能提供更高的网络流量。

IPVS在对后端服务的选择上也提供了更多灵活的算法:

  • rr: round-robin(轮询算法)
  • lc: least connection (最小连接数算法)
  • dh: destination hashing(目的地址hash算法)
  • sh: source hashing(原地址hash算法)
  • sed: shortest expected delay(最短期望延时算法)
  • nq: never queue(永不排队算法)
    kube-proxy代理模式详解,运维,系统安全,kubernetes,负载均衡,云原生,运维

4、winuserspace:同userspace,但仅工作在Windows 节点上。

今天的分享就到此结束了

欢迎点赞评论互关三连

kube-proxy代理模式详解,运维,系统安全,kubernetes,负载均衡,云原生,运维文章来源地址https://www.toymoban.com/news/detail-532130.html

到了这里,关于kube-proxy代理模式详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • kube-proxy源码阅读

    通过阅读kube-proxy的源码可以将proxy的主要逻辑总结为下图所示: 首先顺着代码阅读到ProxyServer-Run()函数,这里是kube-proxy启动的主逻辑,启动了两个server,分别是: 每个服务都是通过定时任务保证服务存活: 然后通过informer机制的list/watch感知services(被观察者)和endpoints(被

    2024年02月11日
    浏览(45)
  • 【kubernetes】部署kubelet与kube-proxy

    前言 :二进制部署kubernetes集群在企业应用中扮演着非常重要的角色。无论是集群升级,还是证书设置有效期都非常方便,也是从事云原生相关工作从入门到精通不得不迈过的坎。通过本系列文章,你将从虚拟机准备开始,到使用二进制方式从零到一搭建起安全稳定的高可用

    2024年02月10日
    浏览(46)
  • Kubernetes核心组件之kube-proxy实现原理

    kube-proxy,负责为Service提供集群内部的服务发现和负载均衡。 了解不同网络组件的工作原理有助于正确设计和配置它们,以满足你的应用程序需求。 在Kubernetes网络的背后,有一个在幕后工作的组件。它将你的服务(Services)转化为一些可用的网络规则。这个组件被称为 Kube

    2024年02月03日
    浏览(30)
  • prometheus监控k8s kube-proxy target down

    解决 修改配置 删除 kube-proxy pod 使之重启应用配置

    2024年02月14日
    浏览(36)
  • 解决阿里云ESC启动kube-proxy服务时出现错误 亲测有效

    启动kube-proxy服务时出现错误如下:Failed to execute iptables-restore: exit status 1 (iptables-restore: invalid option – ‘5’ 我用的k8s是1.90 二进制安装 一般都是说版本过低怎么 降版本 1下载上传低版本iptable 下载地址 https://download.csdn.net/download/qq_33121481/13218948 主要是使用这个版本的 我以前使

    2024年02月03日
    浏览(31)
  • Kubernetes高可用集群二进制部署(五)kubelet、kube-proxy、Calico、CoreDNS

    Kubernetes概述 使用kubeadm快速部署一个k8s集群 Kubernetes高可用集群二进制部署(一)主机准备和负载均衡器安装 Kubernetes高可用集群二进制部署(二)ETCD集群部署 Kubernetes高可用集群二进制部署(三)部署api-server Kubernetes高可用集群二进制部署(四)部署kubectl和kube-controller-man

    2024年02月14日
    浏览(30)
  • 【K8S】外部访问请求原理流程(service、kube-proxy、pod的关系)

    用户发起请求,请求传送到Ingress Ingress :作用是定义请求如何转发到service的规则,ingress支持7层代理转发,它可以通过根据不同的域名或者URL访问路径把请求流量转发到不同的service上,实现调度不同业务域、不同URL访问路径的业务流量。 Service: 提供了服务的负载均衡和反向代

    2024年01月17日
    浏览(40)
  • 代理模式(Proxy模式)

    所谓的代理,就是一个人或者一个机构代替另一个人或者另一个机构去做一些事情(类似于中介或者代理商)。 远程代理 :为一个位于不同的地址空间的对象提供一个局域代表对象。 虚拟代理 :根据需要创建一个资源消耗大的对象,使得此对象只有在需要的时候才被真正创

    2024年02月21日
    浏览(29)
  • 设计模式-代理模式Proxy

    代理设计模式(Proxy Design Pattern)是一种结构型设计模式,它为其他对象 提供一个代理,以控制对这个对象的访问 。代理模式可以用于实现懒加载、安全访问控制、日志记录等功能。 在设计模式中,代理模式可以分为 静态代理和动态代理 。静态代理是指 代理类在编译时 就

    2024年02月10日
    浏览(32)
  • 设计模式之代理模式(Proxy)

    当我们需要使用的对象很复杂或者需要很长时间去构造,这时就可以使用代理模式(Proxy)。例如:如果构建一个对象很耗费时间和计算机资源,代理模式(Proxy)允许我们控制这种情况,直到我们需要使用实际的对象。一个代理(Proxy)通常包含和将要使用的对象同样的方法,一旦开

    2024年02月12日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包