热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

深入理解Kubernetes之:Service[kubernetes基础入门]

在Kubernetes集群中,Service是一个抽象的概念。它通过一个虚拟的IP的形式(VIPs),映射出来指定的端口,通过代理客户端发来的请求转发到后端一组Pods中的一台(也

在Kubernetes 集群中, Service是一个抽象的概念。它通过一个虚拟的IP的形式(VIPs),映射出来指定的端口,通过代理客户端发来的请求转发到后端一组Pods中的一台(也就是endpoint)。这样的好处呢?显而易见,在Kubernetes中用到的管理微服务的常用的到的类型就是deployment, 里面有个参数replicas 来管理整个deployment里面Pod的生命周期,因为有容器的销毁和生成导致Pod IP也就是动态变化的。而Service做为客户端和Pod(backends)中间的代理层,并抽象一个clusterIP的虚拟IP ,集群内部都可以通过这个IP访访问到具体Pod的服务。Service在 Kubernetes 版本迭代中,有过几次变更。在 Kubernetes v1.0 中开始使用 user space proxy mode (用户空间代理态代理模式),Kubernetes v1.1 增加了iptables 代理模式,Kubernetes v1.2 默认把IPtables 当成kube-proxy 的代理模式。在 Kubernetes v1.8 增加了性能更强劲的ipvs proxy mode。

 
1. kube-proxy作用
 
在Kubernetes中,Service的Cluster IP实现数据报文请求的转发,都离不开在node上部署的比较重要的一个组件kube-proxy。
总结来说kube-proxy实现的主要有几点作用。
  • 实时watching Kubernetes kube-API ,获取建立Service的建立、升级信息,增加或者删除backend Pod 信息,来获取Pod 和 vip的映射关系。
  • 维护本地Netfilter 、 iptables、 IPVS 内核组件:
      通过修改和更新Netfilter,iptables,IPVS 规则,来实现数据报文的转发规则;
  • 实现每个node上 clusertIP的发布和路由为维护;
  • 构建路由信息,通过转发规则转发报文到VIPs对应的Pod。
 
2. Userspace 和 Kernelspace
 
说到kube-proxy 能操作iptables 和 netfilter 进行路由的变更和包的转发操作。我们需要弄清楚两个概念:Userspace(用户空间) 和 Kernelspace(内核空间)。
在Linux 系统中,内存被分成两个不同的区域:Userspace、Kernelspace。
Userspace值得是,在操作系统中,用户安装的所有的软件和并启动的进程的服务。
Kernelspace是值得是在操作系统中,能执行命令,提供操作系统的底层服务的能力。
Userspace 需要操作系统的资源时,例如为计算指令需要请求占用CPU time 、操作磁盘的I/O,或者fork一个程序进程等。都需要call   Kernel 请求资源服务。
通常,Kernelspace模块和进程比Userspace进程快得多,因为它们直接与系统硬件交互。如果了解更深入,这里有redhat的的一篇文章。
 

 
3. kube-proxy三种模式
在K8s中,kube-proxy有三种模式在实现虚拟IP、路由信息和报文转发。
  • userspace 代理模式
  • iptables 模式
  • IPVS 模式
我们分别对着三种模式进入细节的讨论。
3.1. Userspace Proxy Mode
在userspace 模式下,kube-proxy 就是一个反向代理的功能,对userspace 的报文封装往 kernelspace 转发,主要是处理路由规则下发、包转发规则、负载均衡功能,所以kube-proxy会在网络流量比较高时,数据报文传输比较高的情况下,kube-proxy会频繁在userspace和kernelspace来回进行上下文切换。
 
在这个模式下,kube-proxy 主要有这么几步来实现实现报文转发:
  • 通过watching kubernetes集群 cluster API, 获取新建、删除Service或者Endpoint Pod指令。
  • 获取建立新ClusterID的Service时,kube-proxy在本地node上开放随机端口,基于服务的“SessionAffinity”策略选择要转发到 backend Pod。
  • kube-proxy会安装iptables规则,以拦截到Services的VIPs和Services端口的流量,并将该流量重定向到在上述步骤中打开的主机端口。
  • 当重定向的流量获取到node端口时,kube-proxy 作为一个负载均衡,把流量分发到后端的backend。选择后端Pod的默认方式负载均衡是轮询。
 
从VIP转发流量重定向到到node上的随机端口,进行netfilter 包过滤;再回Userspace进行负载均衡转发;在这个Userspace这个模式下,没有用到iptables的路由规则,kube-proxy在这个过程中多次进行 Userspace 和kernelspace 的切换,因此Userspace 模式对性能损耗比其它两个方式要大。
 

当clusetr iP建立的时候,kube-proxy 就在本地node物理网卡上,生成一个随机端口,并建立了一条从 VIPs到node物理网卡IP上随机端口的netfiters规则。有请求包文转发到这个端口上的时候,kube-proxy 选择一个Pod并转发报文。
3.2. Iptables Proxy Mode
 
 基于userspace 模块性能原因,在 Kubernetes v1.2 以后,Iptables模式为Services的默认代理模式。在iptables 代理模式中,kube-proxy不在作为反向代理的在VIPs 和backend Pods之间进行负载均衡的分发。这个工作放给工作在四层的iptables来实现。iptables 和netfilter紧密集成,密切合作,都在kernelspace 就实现了包的转发。
 
在这个模式下,kube-proxy 主要有这么几步来实现实现报文转发:
  • 通过watching kubernetes集群 cluster API, 获取新建、删除Services或者Endpoint Pod指令。
  • kube-proxy 在node上设置iptables规则,当有请求转发到Services的 ClusterIP上后,会立即被捕获,并重定向此Services对应的一个backend的Pod。
  • kube-proxy会在node上为每一个Services对应的Pod设置iptables 规则,选择Pod默认算法是随机策略。
在iptables模式中,kube-proxy把流量转发和负载均衡的策略完全委托给iptables/netfiter 来做,这些转发操作都是在kernelspace 来实现,比userspace 快很多。
  

在iptables 中kube-proxy 只做好watching API 同步最新的数据信息这个角色。路由规则信息和转发都放在了kernelspace 的iptables 和netfiter 来做了。但是,这个这个模式不如userspace模式的一点是,在usersapce模式下,kube-proxy做了负载均衡,如果选择的backend 一台Pod没有想要,kube-proxy可以重试,在iptables模式下,就是一条条路由规则,要转发的backend Pod 没有响应,且没有被K8S 摘除,可能会导致转发到此Pod请求超时,需要配合K8S探针一起使用。
3.3. IPVS proxy mode
IPVS是LVS一个组件,提供高性能、高可靠性的四层负载均衡器。IPVS 是IP Virtual Server的简写。IPVS构建在netfilter上,作为Linux 内核的一部分,从传输层实现了负载均衡。IPVS能直接转发 基于Services的TCP 和UDP到真实服务器。IPVS能直接构建一个VIPs 并通过负载均衡算法,把请求转发到backend Pod。可能会将IPVS视为Linux内核负载平衡器,类似于kube-proxy在用户空间模式下所做的工作。
我们都知道,在Linux 中iptables设计是用于防火墙服务的,对于比较少规则的来说,没有太多的性能影响。但是对于,一个K8S集群来说,会有上千个Services服务,当然也会转发到Pods,每个都是一条iptables规则,对集群来说,每个node上会有大量的iptables规则,简直是噩梦。
同样IPVS可以解决可能也会遇见这样大规模的网络转发需求,但是IPVS用hash tabels来存储网络转发规则,比iptables 在这上面更有优势,而且它主要工作在kernelspace,减少了上下文切换带来的开销。
 
kube-proxy和IPVS在配置网络转发中,有这么几步:
  • 通过watching kubernetes集群 cluster API, 获取新建、删除Services或者Endpoint Pod指令,有新的Service建立,kube-proxy回调网络接口,构建IPVS规则。
  • 同时,kube-proxy会定期同步 Services和backend Pods的转发规则,确保失效的转发能被更新修复。
  • 有请求转发到后端的集群时,IPVS的负载均衡直接转发到backend Pod。
IPVS支持的负载均衡算法有这么几种:
  • rr: 轮询
  • lc: 最小连接数
  • dh: 目的地址hash
  • sh: 源地址hash
  • sed: 最短期望延迟
  • nq: 无须队列等待
在node上通过 “–ipvs-scheduler”参数,指定kube-proxy的启动算法。
 
总的来说,Kubernets的Service组件,越来越完善,性能也越来越高。至少现在,我们看到已经加入了四层的转发策略,在实际运用中,很多公司都有自己的接入层和中间API的网关,可以解决转发和流量调度;Pod服务注册通过调用服务中心也解决了对于后端Pod异常的监控检查功能。当然我们也希望尽量复用Kubernets技术和组件,降低服务的可维护性。


推荐阅读
  • 提升 Kubernetes 集群管理效率的七大专业工具
    Kubernetes 在云原生环境中的应用日益广泛,然而集群管理的复杂性也随之增加。为了提高管理效率,本文推荐了七款专业工具,这些工具不仅能够简化日常操作,还能提升系统的稳定性和安全性。从自动化部署到监控和故障排查,这些工具覆盖了集群管理的各个方面,帮助管理员更好地应对挑战。 ... [详细]
  • 直播带货系统中的推流技术详解
    本文介绍了RTMP(实时消息传输协议)及其在直播带货系统中的应用,并详细探讨了带货直播系统的连麦方案,包括服务端合流和客户端合流的优势与劣势。 ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • Linux 防火墙与端口管理必备命令
    在使用 Linux 系统进行服务部署和问题排查时,防火墙和端口管理是不可或缺的操作。本文将详细介绍如何查看防火墙状态、端口占用情况,以及如何开放和关闭端口,帮助初学者更好地掌握这些技能。 ... [详细]
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 为什么多数程序员难以成为架构师?
    探讨80%的程序员为何难以晋升为架构师,涉及技术深度、经验积累和综合能力等方面。本文将详细解析Tomcat的配置和服务组件,帮助读者理解其内部机制。 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • 在Linux系统中,网络配置是至关重要的任务之一。本文详细解析了Firewalld和Netfilter机制,并探讨了iptables的应用。通过使用`ip addr show`命令来查看网卡IP地址(需要安装`iproute`包),当网卡未分配IP地址或处于关闭状态时,可以通过`ip link set`命令进行配置和激活。此外,文章还介绍了如何利用Firewalld和iptables实现网络流量控制和安全策略管理,为系统管理员提供了实用的操作指南。 ... [详细]
  • Amoeba 通过优化 MySQL 的读写分离功能显著提升了数据库性能。作为一款基于 MySQL 协议的代理工具,Amoeba 能够高效地处理应用程序的请求,并根据预设的规则将 SQL 请求智能地分配到不同的数据库实例,从而实现负载均衡和高可用性。该方案不仅提高了系统的并发处理能力,还有效减少了主数据库的负担,确保了数据的一致性和可靠性。 ... [详细]
  • (1)前期知识:1. 单机架构:单一服务器计算机——其处理能力和存储容量有限。2. 集群架构(负载均衡器与多节点服务器)——通过增加节点数量来提升系统性能和可靠性,实现高效的任务分配和资源利用。 ... [详细]
  • 高端存储技术演进与趋势
    本文探讨了高端存储技术的发展趋势,包括松耦合架构、虚拟化、高性能、高安全性和智能化等方面。同时,分析了全闪存阵列和中端存储集群对高端存储市场的冲击,以及高端存储在不同应用场景中的发展趋势。 ... [详细]
  • CentOS 7 中 iptables 过滤表实例与 NAT 表应用详解
    在 CentOS 7 系统中,iptables 的过滤表和 NAT 表具有重要的应用价值。本文通过具体实例详细介绍了如何配置 iptables 的过滤表,包括编写脚本文件 `/usr/local/sbin/iptables.sh`,并使用 `iptables -F` 清空现有规则。此外,还深入探讨了 NAT 表的配置方法,帮助读者更好地理解和应用这些网络防火墙技术。 ... [详细]
author-avatar
追忆幽梦_554
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有