首页 > 其他分享 >在K8S中,kube-proxy的工作模式是什么?

在K8S中,kube-proxy的工作模式是什么?

时间:2024-02-26 09:22:24浏览次数:30  
标签:iptables 负载 K8S 模式 IPVS proxy kube

kube-proxy 在 Kubernetes 集群中负责实现 Service 的网络代理和负载均衡功能,支持三种不同的工作模式:

  1. Userspace 模式(已过时):

    • 在早期的 Kubernetes 版本中(1.2 之前),kube-proxy 默认使用 Userspace 模式。
    • 在此模式下,kube-proxy 作为一个用户空间进程运行,为每个 Service 创建一个监听端口。
    • 当流量到达 Service 的 Cluster IP 时,iptables 规则会将其重定向到 kube-proxy 监听的端口上。
    • kube-proxy 接收到请求后,根据负载均衡算法选择合适的 Pod 并与其建立连接,将请求转发到选定的 Pod。
    • 用户空间模式存在的问题是由于涉及从内核空间到用户空间的上下文切换,导致额外的数据拷贝和较低的性能。
  2. iptables 模式:

    • 自 Kubernetes 1.2 版本起,iptables 模式成为默认模式。
    • 在该模式下,kube-proxy 不再直接接收和转发流量,而是通过实时监控 API Server 中 Service 和 Endpoint 的变化,并动态更新节点上的 iptables 规则来实现负载均衡。
    • 流量直接通过内核空间的 iptables 规则从客户端路由到目标 Pod,相比 Userspace 模式减少了上下文切换和数据拷贝,提高了性能。
    • 缺点是在服务数量非常多的情况下,iptables 规则集可能会变得庞大,非增量式的更新可能导致规则刷新时有一定的延迟。
  3. IPVS 模式:

    • 从 Kubernetes 1.8 版本开始支持试验性 IPVS 模式,并在 1.11 版本中作为正式功能推出。
    • IPVS(IP Virtual Server)是 Linux 内核中的另一种负载均衡解决方案,相比于 iptables 更高效,尤其在大规模场景下。
    • IPVS 模式下的 kube-proxy 也是通过监控 API Server 中的服务和端点事件,动态配置 IPVS 规则来进行负载均衡。
    • IPVS 模式提供了更好的可扩展性和更高效的连接跟踪及会话保持能力,适合更高负载和更多并发连接的场景。

综上所述,在现代 Kubernetes 集群中,通常推荐使用 IPVS 模式,因为它能够提供更高的性能和更精细的负载均衡控制。不过,具体选择哪种模式取决于集群管理员对性能、稳定性及运维复杂性的考量。

标签:iptables,负载,K8S,模式,IPVS,proxy,kube
From: https://www.cnblogs.com/huangjiabobk/p/18033633

相关文章

  • 在K8S中,影响pod调度的因素有哪些?
    在Kubernetes(K8s)中,影响Pod调度的因素非常多,主要包括但不限于以下几个方面:资源需求与限制:资源请求(Requests):Pod在创建时声明需要的最小资源量,如CPU和内存。调度器会寻找至少能满足这些资源请求的Node进行调度。资源限额(Limits):Pod可使用的最大资源量,超过限额可能会被系统限......
  • 在K8S中,"节点亲和性"和"节点选择器"的区别在哪里?
    在Kubernetes(K8s)中,“节点选择器”(NodeSelector)和“节点亲和性”(NodeAffinity)都是用来指导Pod调度到合适节点的机制,但它们在功能和灵活性上有一定的区别:节点选择器(NodeSelector):是较早且较为基础的一种调度策略,用于简单匹配节点的标签(labels)。当在Pod的规范中定义了节点选择......
  • k8s创建容器的两种办法
    1,命令行创建容器1.1kubectlrun通过命令行参数创建容器#从镜像仓库拉取kubectlrunmycentos007--image=centos-test-telnet:latest#从本地拉取kubectlrunmycentos007--image=centos-test-telnet:latest--image-pull-policy=Never1.2kubectlcreate命令创......
  • k8s-flannel网络详解
    1,网卡k8s安装完以后,查看k8s各node节点的网卡,会发现多了4个网卡docker0,flannel.1,cni0,veth,其中docker0纯粹是因为安装了docker服务才生成的网卡,和k8s集群是的逻辑架构没关系1.1docker0网卡docker0充当了一个网桥的功能,就是相当于一个集线器的功能,一个口收到信号......
  • Kubeflow架构
    Kubeflow核心组件notebook(JupyterHub)-大多数项目的第一步是某种形式的原型设计和实验。Kubeflow用于原型设计和实验的工具是JupyterHub(https://jupyter.org/hub),这是一个多用户中心,可以生成、管理和代理单用户Jupyternotebook的多个实例。Jupyternotebook支持整个计算过程:开......
  • 在K8S中,RS资源如何实现升级和回滚?
    在Kubernetes中,ReplicaSet(简称RS)是工作负载API对象,用于确保指定数量的Pod副本在集群中运行。当需要升级或回滚RS管理的Pod时,可以通过修改ReplicaSet的配置来实现。下面是如何实现RS资源的升级和回滚的步骤:升级RS资源修改ReplicaSet的配置:要升级RS,您需要修改其对应的Deploymen......
  • 在K8S中,SVC资源是否支持在K8S集群外部访问?
    在Kubernetes(K8S)中,Service资源可以通过特定类型支持在集群外部访问。以下是一些可以提供外部访问能力的Service类型:NodePort:NodePort服务会将服务映射到每个节点上的一个静态端口(范围默认为30000-32767)。通过这个端口,集群外部可以直接通过任意节点的IP地址和该NodePort来......
  • 在K8S中,如何实现金丝雀发布(灰度发布)?蓝绿发布?
    在Kubernetes(K8s)中,可以通过不同的策略来实现金丝雀发布(灰度发布)和蓝绿发布。以下是两种发布方式在K8s中的基本实现方法:金丝雀发布(灰度发布)金丝雀发布是一种逐步将新版本应用推送给部分用户群体,以收集反馈并监控新版本表现的方式。在K8s中,可以通过以下步骤实现:基于Deploym......
  • 在K8S中,如何让Pod运行一次?如何解决一次性任务?
    在Kubernetes(K8S)中,要让Pod运行一次并完成一次性任务,可以使用Job资源。Job是Kubernetes中用于运行一次性任务的工作负载API对象。它创建一个或多个Pod,并确保指定数量的Pod成功终止。当Pod成功完成后,Job将跟踪成功完成的情况。当达到指定的成功完成次数时,任务(即Job)就完成了。以下是......
  • 在K8S中,如果解决周期性任务?
    在Kubernetes(K8S)中,解决周期性任务可以使用CronJob资源。CronJob是Kubernetes提供的一种工作负载API对象,它允许你根据预定的时间表(类似于Unix系统的cron作业)来周期性地运行任务。以下是如何使用CronJob来解决周期性任务的步骤:创建CronJob资源配置文件:创建一个YAML文件(例如cron......