电信联通动态ip代理
Kubernetes Service是Kubernetes中的一个核心概念,它定义了一种抽象,用于表示一组提供相同功能的Pods(容器组)的逻辑集合,并提供了一种方式让这些Pods能够被系统内的其他组件发现并访问。简单来说,Service提供了一种让客户端能够稳定地连接到后端Pods的机制,即使这些Pods会动态地创建、销毁或迁移。
服务发现:Service允许客户端(如Pods中的应用程序)通过稳定的IP地址和端口号访问后端Pods集合,而无需关心实际Pod的IP地址或端口号,因为这些信息可能会因为Pod的重启或迁移而改变。
负载均衡:Kubernetes会自动在Service后面创建的Pods之间分配进入的流量,实现了简单的负载均衡。这意味着当多个Pods提供了相同的服务时,客户端的请求可以被均衡地分发到这些Pods上。
支持DNS:Kubernetes支持基于DNS的服务发现,允许Pods通过服务名(而不是IP地址)来相互通信。这大大简化了服务之间的调用和依赖关系的管理。
定义服务类型:Service可以有多种类型,最常见的是ClusterIP(默认,仅集群内部可访问)、NodePort(通过集群中每个节点的静态端口暴露服务)、LoadBalancer(在Cloud环境中,使用云提供商的负载均衡器暴露服务)和ExternalName(将服务映射到DNS名称,而不是选择Pods)。
在iptables 模式下,kube-proxy会在每个节点上通过iptables规则来实现请求的转发。它会创建一系列的iptables规则,这些规则根据Service的IP和端口,将访问Service的流量重定向到后端的Pod IP和端口上。这种方式简单直接,但随着Service和Pod数量的增加,iptables规则会急剧膨胀,影响性能。
作为iptables的改进,ipvs(IP Virtual Server)模式提供了更高的性能和更好的扩展性。ipvs使用更高效的哈希表来管理网络规则,可以更快地查找和转发流量。这使得在大规模集群中,Service的访问性能得到显著提升。
2、性能瓶颈:由于kube-proxy的报文转发完全依赖于软件实现(无论是iptables还是ipvs),这意味着它无法利用现代硬件(如DPU、SmartNIC)进行网络加速,在高负载跨节点转发的情况下,这种软件实现的性能瓶颈尤为明显。
3、资源消耗:基于软件实现的Kubernetes Service,在高负载跨节点转发的情况下会导致CPU资源消耗过高,从而影响整体系统的稳定性和性能。
与kube-proxy相似,许多开源的容器网络接口(CNI)插件,如使用Open vSwitch(OVS)的kube-ovn、Antrea等,通常依赖于自己的数据面处理机制来转发Service网络流量,在没有硬件加速的情况下,也面临类似的性能瓶颈和资源消耗问题。
驭云Service在驭云SDN的架构中实现,其中驭云SDN通过ovn/ovs机制将DPU&SmartNIC加入到同一个ovn集群,对网络进行统一的虚拟化,整体物理架构图如所示:
如图所示,驭云Service基于驭云SDN,上图各个组件中均会参与处理Service的逻辑,下面分别进行介绍:
ycloud-controller,是SDN系统的控制平面,处理Service的主要逻辑,将用户创建的Service数据通过ovn转换成实际的网络拓扑。
ycloud-cni,该组件作为一个DaemonSet运行在每个节点上,是SDN的CNI接口,同时也会负责各个节点上Service的一些处理逻辑。
在驭云SDN的概念中,所有后端资源,无论是Pod、VM还是裸金属服务器,都属于某一个VPC(虚拟私有云)。VPC实现了逻辑隔离的网络空间,这意味着不同VPC内的网络流量不会相互干扰,这提供了重要的安全边界,同时也便于多租户环境中的资源管理和隔离。然而,这种隔离也带来了一个挑战:如何允许不同VPC之间或者外部网络访问这些VPC内的资源。
Service需要解决的就是从不同地方经过Service访问到这些VPC内的资源,并且根据策略进行请求的负载均衡电信联通动态ip代理。在驭云Service中,具体包含以下场景:
在这种情况下,客户端可以直接通过Service的ClusterIP访问后端服务。ClusterIP是一种虚拟IP地址,由Kubernetes为Service分配,只在集群内部可见。流量在VPC内直接转发,无需经过额外的网关或负载均衡器。
当客户端运行在集群节点上时,它同样可以通过ClusterIP访问服务。Kubernetes的网络策略确保流量在节点和后端服务之间正确路由。这种访问方式同样限于集群内部,不需要EIP。
在此场景下,客户端通过云外访问集群内的服务。LoadBalancer类型Service会分配一个EIP,此时外部流量通过EIP被路由到集群内部的Service。
当客户端需要访问跨多个VPC的服务时,情况变得复杂。在这种情况下,当外部流量通过EIP进入集群内Service时,Servcie会同时充当网关,将流量正确地路由到目标VPC。
在控制层,我们对原生Service进行了封装,在Kubernetes基础上扩展了对Service的管理能力,整体控制面结构如下图所示:
由于内置资源无法满足我们需要功能,包括网络访问场景,和多种后端,于是驭云Service增加了YusurService与NetworkProbe两种自定义资源定义(CRDs):
YusurService: 一种扩展的Service概念,允许定义更广泛的后端资源,包括Pod、VM、BM(裸金属服务器)、VNicIP(虚拟网络接口IP)。通过使用选择器(selectors),可以灵活地匹配不同类型的后端资源,而不仅仅是Pod。支持定义多种网络场景,灵活的指定eip和clusterIP等。
NetworkProbe: 用于健康检查的新CRD,为每个后端资源生成相应的探针,实时监控其健康状态。这可以确保负载均衡器只将请求转发给健康的实例。
通过这样的架构,系统不仅提供了高级别的抽象来简化Service管理和后端资源的健康监控,还实现了跨VPC的负载均衡,增强了Kubernetes集群的网络功能。
Service的数据面依赖OVN和OpenVswitch,根据不同的访问场景,在不同的地方配置Load_Balancer,Load_Balancer是OVN的逻辑概念,可以应用在OVN的逻辑交换机或者逻辑路由器上面,它将在对应的地方上配置DNAT的规则,将访问VIP的报文转到合适的后端上去。
当创建了Service之后,LoadBalancer的网络策略会确保应用在vpc1内的所有Subnet上。当subnet3上的client访问10.0.0.100时,其请求将首先被subnet3上的LoadBalancer接收。LoadBalancer会基于其算法(例如轮询、最少连接数等)选择一个后端Pod,并将数据包的目标地址转换为所选Pod的实际IP地址。数据包随后会通过vpc1被转发到选定的Pod所在的Subnet,例如subnet1,最后转发至Pod1。
当创建了Service之后,LoadBalancer的网络策略会应用在vpc1上,当client访问200.0.0.100时,其请求将首先被这个EIP子网所属的eipGateway接收。eipGateway会将报文路由到Servic所属的VPC,vpc1内,此时LoadBalancer规则会基于其算法(例如轮询、最少连接数等)选择一个后端Pod,并将数据包的目标地址转换为所选Pod的实际IP地址。数据包随后会通过vpc1被转发到选定的Pod,完成一次转发。
当创建了Service之后,控制器会创建一个service-gateway的逻辑路由器,LoadBalancer的网络策略会应用在该路由器上,当client访问200.0.0.100时,其请求将首先被这个eip子网所属的eipGateway接收。eipGateway会将报文路由到service-gateway上,此时LoadBalancer规则会基于其算法(例如轮询、最少连接数等)选择一个后端Pod,并将数据包的目标地址转换为所选Pod的实际IP地址,源地址转换为所选service-gateway的系统IP地址。数据包随后会被转发到选定的Pod的vpc上,然后vpc将数据包送到Pod,完成一次转发。
基于DPU和SmartNIC的K8s Service解决方案展现出显著的优势,具体总结如下:
在复杂的网络拓扑下实现K8s Service,支持VPC网络隔离和EIP等高级网络功能,大大增强了Kubernetes集群在IaaS环境中的网络灵活性和安全性,满足复杂场景下的网络需求。
根据测试数据,本方案在带宽上性能提升了20%左右,pps上性能提升了2倍以上,延迟降低了20%以上。DPU和SmartNIC内置了强大的网络处理引擎,能够直接在硬件上完成报文的解析、转发和路由决策等任务,这种硬件加速机制使得在高负载跨节点转发时,仍能保持低延迟和高吞吐量,显著提升了Kubernetes Service的性能。
根据测试数据,本方案对CPU的消耗减少了25%左右。由于DPU和SmartNIC承担了大部分的网络处理工作,CPU从繁重的网络转发任务中解放出来,可以专注于执行其他更关键的计算任务,这不仅降低了CPU的资源消耗,还提升了整体系统的稳定性和性能。
综上所述,基于DPU和SmartNIC的K8s Service解决方案在应对复杂网络拓扑、性能瓶颈和资源消耗等方面具有明显的优势,能够显著提升Kubernetes集群在复杂IaaS环境中的网络性能和整体稳定性。
本方案来自于中科驭数软件研发团队,团队核心由一群在云计算、数据中心架构、高性能计算领域深耕多年的业界资深架构师和技术专家组成,不仅拥有丰富的实战经验,还对行业趋势具备敏锐的洞察力,该团队致力于探索、设计、开发、推广可落地的高性能云计算解决方案,帮助最终客户加速数字化转型,提升业务效能,同时降低运营成本。
。1分钟内即可完成整个集群部署,支持动态扩容,提供采集宿主机日志、容器日志、容器stdout等所有数据源的一站式采集。点此
。1分钟内即可完成整个集群部署,支持动态扩容,提供采集宿主机日志、容器日志、容器stdout等所有数据源的一站式采集。点此
【导读】Kubernetes项目使用Go语言编写,对Go api原生支持非常便捷。 本篇文章介绍了如何使用kubernetes client-go实践一个简单的与
交互过程 /
Docker 虽好用,但面对强大的集群,成千上万的容器,突然感觉不香了。 这时候就需要我们的主角 Kubernetes 上场了,先来了解一下
和Docker关系简单说明,本文利用图文讲解的很透彻,有需要的同学可以研究下 最近项目用到kubernetes(以下简称
集群服务访问失败? 原因分析:证书不能被识别,其原因为:自定义证书,过期等。 解决方法:更新证书即可。 问题2:
故障处理集锦 /
的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。这里主要讲 mysql 部署在
,是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful
,是领先的容器编排工具。该开源项目最初由 Google 开发,帮助塑造了现代编排的定义。该系统包括了部署和运行容器化系统所需的一切。
生态链包含哪些技术 /
即 Kubernetes,是一个开源的容器编排引擎,用来对容器化应用进行自动化部署、 扩缩和管理。