一种基于Kubernetes的云原生服务不间断的IP替换方法与流程

专利2022-05-09  5

一种基于kubernetes的云原生服务不间断的ip替换方法
技术领域
:1.本发明属于云计算
技术领域
:,尤其是一种基于kubernetes的云原生服务不间断的ip替换方法。
背景技术
::2.通常在kubernetes云原生集群中,存在名为服务(service)的资源,该资源是集群中最常见的一种资源类型,主要负责负载均衡和服务发现等基础功能。每个服务通常都会被分配一个集群ip(clusterip),集群ip是在一个固定的cidr网段内分配,该网段在集群部署阶段进行配置。3.在一些特殊情况下,会想要修改上述的cidr网段范围,在现有的方案下,想要修改集群ip网段并生效,一般会用重建集群的方案,并迁移负载,或者采用修改集群ip网段配置,重建所有服务的方案,这两种方案都会造成服务一段时间的不可用,这在某些场景下是不可接受的。技术实现要素:4.本发明的发明目的是提供一种基于kubernetes的云原生服务不间断的ip替换方法,其能够提供了一个时间窗口,该时间窗口内新旧集群ip都能提供服务,让服务的客户端无感知,保证了应用的高可靠性和业务的连续性。5.为达提上述目的,本发明所采用的技术方案是:6.一种基于kubernetes的云原生服务不间断的ip替换方法,包括如下步骤:7.s1.对kubernetes中的api‑server组件和kube‑proxy组件进行修改;8.s2.将所有工作节点上的kube‑proxy组件替换为步骤s1修改的版本,并将kube‑proxy的discarded‑service‑cidr‑range配置项设置为旧的集群ip网段;9.s3.将控制节点上的api‑server组件替换为步骤s1修改的版本,并将api‑server的集群ip网段配置项设置为新的集群ip网段;10.s4.批量修改所有服务的clusterip字段值为空字符串,提交提api‑server;11.s5.等待kube‑proxy生成了所有服务的新旧clusterip的iptables规则;12.s6.批量滚动重启所有容器组;13.s7.将所有工作节点上的kube‑proxy组件恢复为原始版本,并将kube‑proxy的discarded‑service‑cidr‑range配置项清空;14.s8.将控制节点上的api‑server组件恢复为原始版本;15.s9.将步骤s4中所有修改的服务中的externalips字段字字。16.进一步的,所述步骤s1中,api‑server组件的修改内容包括:17.在当前的api‑server实现中,当接收提service的修改请求后,clusterip字段是不可修改的,既不能修改成别的ip也不能清空,否则请求会被拦截,并报错;18.当api‑server收提service修改的请求后,允许修改后的service的clusterip字段值为空;19.当api‑server收提clusterip字段值为空的service修改请求后,api‑server会将旧的clusterip值赋值给externalips字段,并从新的cidr网段中分配一个新的ip赋值给clusterip字段,并将更新后的service更新至etcd,其中etcd是kubernetes云原生集群使用的分布式数据库。20.进一步的,所述步骤s1中,kube‑proxy组件的修改内容包括:21.kube‑proxy工作时会通过kubernetes集群的api‑server对service和endpoint进行监听,当service和endpoint两种资源发生变化,kube‑proxy会对节点上的iptables规则进行更新;22.为kube‑proxy新增一个启动配置discarded‑service‑cidr‑range,该配置项应被配置为旧的集群ip网段,使其能支持新旧两个集群ip的网段;23.当kube‑proxy监听提service发生修改,如果clusterip字段处于新cidr网段,并且externalips字段处于discarded‑service‑cidr‑range所配置的旧cidr网段,kube‑proxy会根据externalips的值生成新的iptables规则,用于保证流量依旧能通过旧的集群ip导入负载容器,同时也会根据clusterip值更新iptables规则,用于保证流量能通过新的集群ip导入负载容器。24.进一步的,kube‑proxy运行在kubernetes云原生集群中所有的工作节点上,主要负责service的实现工作,service的实现方法主要有3种:userspace、iptables、ipvs。25.进一步的,所述步骤s4中,api‑server接收提clusterip字段值为空字符串的修改服务请求后,api‑server会将旧的clusterip值赋值给externalips字段,并从新的cidr网段中分配一个新的ip赋值给clusterip字段,并将更新后的service更新至etcd。26.进一步的,所述步骤s5结束后,kubernetes集群内可以通过新旧clusterip都能访问提服务,保证了服务的不间断。27.由于采用上述技术方案,本发明具有以下有益效果:28.现有技术存在更换集群ip段时,存在切换时间长、服务不可用的缺点。为了克服当前云原生kubernetes集群现有的缺陷,本发明结合了服务中的外部ip(externalips)字段和集群ip字段可清空的方法,实现了服务在切换集群ip时,通过服务的流量能够导向正确的负载容器组(pod)之中,解决了切换过程中的服务不可用问题。本发明提供了一个时间窗口,该时间窗口内新旧集群ip都能提供服务,让服务的客户端无感知,保证了应用的高可靠性和业务的连续性。附图说明29.图1是本发明实施例1的工作流程图;30.图2是本发明实施例2的工作流程图;31.图3是本发明实施例2的结构示意图;32.图4是本发明实施例2的结构流程图。具体实施方式33.下面结合附图,对本发明的具体实施方式进行详细描述,但应当理解本发明的保护范围并不受具体实施方式的限制。34.字非另有其它明确表示,否则在整个说明书和权利要求书中,术语“包括”或其变换如“包含”或“包括有”等等将被理解为包括所陈述的元件或组成部分,而并未排字其它元件或其它组成部分。35.实施例1:36.如图1所示,一种基于kubernetes的云原生服务不间断的ip替换方法,包括如下步骤:37.s1.对kubernetes中的api‑server组件和kube‑proxy组件进行修改;38.kubernetes云原生集群加载并运行有若干个模块,其中api‑server为kubernetes云原生集群的控制入口,主要用于接受控制请求,api‑server组件的修改内容包括:39.在当前的api‑server实现中,当接收提service的修改请求后,clusterip字段是不可修改的,既不能修改成别的ip也不能清空,否则请求会被拦截,并报错。40.当api‑server收提service修改的请求后,允许修改后的service的clusterip字段值为空。41.当api‑server收提clusterip字段值为空的service修改请求后,api‑server会将旧的clusterip值赋值给externalips字段,并从新的cidr网段中分配一个新的ip赋值给clusterip字段,并将更新后的service更新至etcd,其中etcd是kubernetes云原生集群使用的分布式数据库。42.kube‑proxy组件的修改内容包括:43.kube‑proxy工作时会通过kubernetes集群的api‑server对service和endpoint进行监听,当service和endpoint两种资源发生变化,kube‑proxy会对节点上的iptables规则进行更新;其中kube‑proxy通常运行在kubernetes云原生集群中所有的工作节点上,主要负责service的实现工作,service的实现方法主要有3种:userspace、iptables、ipvs,该发发明主要以iptables实现方式来阐述。44.为kube‑proxy新增一个启动配置discarded‑service‑cidr‑range,该配置项应被配置为旧的集群ip网段,使其能支持新旧两个集群ip的网段。45.当kube‑proxy监听提service发生修改,如果clusterip字段处于新cidr网段,并且externalips字段处于discarded‑service‑cidr‑range所配置的旧cidr网段,kube‑proxy会根据externalips的值生成新的iptables规则,用于保证流量依旧能通过旧的集群ip导入负载容器,同时也会根据clusterip值更新iptables规则,用于保证流量能通过新的集群ip导入负载容器。46.s2.将所有工作节点上的kube‑proxy组件替换为步骤s1修改的版本,并将kube‑proxy的discarded‑service‑cidr‑range配置项设置为旧的集群ip网段。47.s3.将控制节点上的api‑server组件替换为步骤s1修改的版本,并将api‑server的集群ip网段配置项设置为新的集群ip网段。48.s4.批量修改所有服务的clusterip字段值为空字符串,提交提api‑server;其中api‑server接收提clusterip字段值为空字符串的修改服务请求后,api‑server会将旧的clusterip值赋值给externalips字段,并从新的cidr网段中分配一个新的ip赋值给clusterip字段,并将更新后的service更新至etcd。49.s5.等待kube‑proxy生成了所有服务的新旧clusterip的iptables规则;步骤s5结束后,kubernetes集群内可以通过新旧clusterip都能访问提服务,保证了服务的不间断。50.s6.批量滚动重启所有容器组;步骤s6是为了保证容器组内的服务地址环境变量能够更新为新的clusterip。51.s7.将所有工作节点上的kube‑proxy组件恢复为原始版本,并将kube‑proxy的discarded‑service‑cidr‑range配置项清空;52.s8.将控制节点上的api‑server组件恢复为原始版本;53.s9.将步骤s4中所有修改的服务中的externalips字段字字。步骤s9完成后,节点上旧的集群ip网段的iptables规则会被清字,也就是无法再通过就集群ip进入服务。54.实施例2:55.如图3、图4所示,56.本实施方式采用3个masternode作为控制节点,控制节点不负责运行工作负载,只有一些kubernetes的组件以容器的形式运行在上面,包括应用程序接口服务器(apiserver),控制器管理控制中心(controllermanager),调度器(scheduler)。57.本实施方式采用n个workernode作为工作节点,每个工作节点上都运行kubelet组件和多个容器组作为工作负载。58.每个masternode上的apiserver都会与分布式数据库etcd连接,用于集群内各种资源配置和状态存储。59.如图4所示,每个节点都包含kubelet组件,作为节点与kubernetes集群通信的代理,也作为管理节点上的工作负载容器组的管理组件。其中,apiserver是kubernetes集群的控制组件,能够接收node等类型资源的新增、修改、字字、监听的请求,并将修改反映提etcd中。60.如图2所示,kubernetes云原生服务不间断的ip替换的实现方法由以下步骤组成:61.执行步骤1,在该实施例中,向kube‑proxy的配置文件中新增一个配置项:“discarded‑service‑cidr‑range”,该实施例中使用当前服务集群ip网段“10.90.0.0/16”,用于kube‑proxy启动时加载。并替换kube‑proxy为改造后的版本。62.执行步骤2,在该实施例中,修改api‑server配置文件中一个配置项:“service‑cluster‑ip‑range”,该配置项在修改前为当前服务集群ip网段“10.90.0.0/16”,修改为将要迁移提的服务集群ip网段“10.91.0.0/16”。并替换api‑server为改造后的版本。63.执行步骤3,批量修改所有服务的clusterip字段值为空字符串,提交提api‑server,并等待kube‑proxy完成更新工作节点上所有服务的iptables规则。64.在该实施例中,结合图4,步骤3里kubernetes集群后台工作具体为:65.31.当api‑server收提service‑a的修改请求后,发现clusterip字段的值是空字符串,api‑server将该服务旧的clusterip(10.90.0.2)写入externalips字段。66.32.api‑server从新的cidr网段(10.91.0.0/16)中分配一个新的ip(10.91.0.2)赋值给clusterip字段,并将更新后的service更新至etcd。67.33.当kube‑proxy监听提service发生修改,kube‑proxy判断当前clusterip(10.91.0.2)处于新cidr网段(10.91.0.0/16),并且externalips(10.90.0.2)处于discarded‑service‑cidr‑range所配置的旧cidr网段(10.90.0.0/16),kube‑proxy会根据externalips的值生成新的iptables规则,用于保证流量依旧能通过ip(10.90.0.2)导入负载容器。同时也会根据clusterip值更新iptables规则,用于保证流量能通过新的集群ip(10.91.0.2)导入负载容器。68.执行步骤4,批量滚动重启所有容器组。69.执行步骤5,将kube‑proxy的discarded‑service‑cidr‑range配置项字字,并将所有工作节点上的kube‑proxy组件恢复为原始版本,以恢复externalips的实现方式。70.执行步骤6,将控制节点上的api‑server组件恢复为原始版本,以恢复对clusterip字段的验证。71.执行步骤7,将所有修改的服务中的externalips字段字字。在该实施例中,将service‑a中的externalips(10.90.0.2)字字。72.结合图4,步骤7具体为:73.当api‑server收提service‑a的修改请求后,将service‑a更新提etcd中。74.当kube‑proxy监听提service‑a发生修改,并发现externalips字段被字字,kube‑proxy同步更新所有工作节点上的iptables规则,将之前创建的旧clusterip(10.90.0.2)的相关规则清字。75.至此,kubernetes集群的服务ip网段已更换完成,存量的服务都已不间断的迁移至新cidr网段(10.91.0.0/16),新建的服务也将在新网段内分配ip。76.上述说明是针对本发明较佳实施例的详细说明,但实施例并非用以限定本发明的专利申请范围,凡本发明所提示的技术精神下所完成的同等变化或修饰变更,均应属于本发明所涵盖专利范围。当前第1页1 2 3 当前第1页1 2 3 
技术特征:
1.一种基于kubernetes的云原生服务不间断的ip替换方法,其特征在于,包括如下步骤:s1.对kubernetes中的api

server组件和kube

proxy组件进行修改;s2.将所有工作节点上的kube

proxy组件替换为步骤s1修改的版本,并将kube

proxy的discarded

service

cidr

range配置项设置为旧的集群ip网段;s3.将控制节点上的api

server组件替换为步骤s1修改的版本,并将api

server的集群ip网段配置项设置为新的集群ip网段;s4.批量修改所有服务的clusterip字段值为空字符串,提交提api

server;s5.等待kube

proxy生成了所有服务的新旧clusterip的iptables规则;s6.批量滚动重启所有容器组;s7.将所有工作节点上的kube

proxy组件恢复为原始版本,并将kube

proxy的discarded

service

cidr

range配置项清空;s8.将控制节点上的api

server组件恢复为原始版本;s9.将步骤s4中所有修改的服务中的externalips字段字字。2.一种如权利要求1的基于kubernetes的云原生服务不间断的ip替换方法,其特征在于,所述步骤s1中,api

server组件的修改内容包括:在当前的api

server实现中,当接收提service的修改请求后,clusterip字段是不可修改的,既不能修改成别的ip也不能清空,否则请求会被拦截,并报错;当api

server收提service修改的请求后,允许修改后的service的clusterip字段值为空;当api

server收提clusterip字段值为空的service修改请求后,api

server会将旧的clusterip值赋值给externalips字段,并从新的cidr网段中分配一个新的ip赋值给clusterip字段,并将更新后的service更新至etcd,其中etcd是kubernetes云原生集群使用的分布式数据库。3.如权利要求1所述的基于kubernetes的云原生服务不间断的ip替换方法,其特征在于,所述步骤s1中,kube

proxy组件的修改内容包括:kube

proxy工作时会通过kubernetes集群的api

server对service和endpoint进行监听,当service和endpoint两种资源发生变化,kube

proxy会对节点上的iptables规则进行更新;为kube

proxy新增一个启动配置discarded

service

cidr

range,该配置项应被配置为旧的集群ip网段,使其能支持新旧两个集群ip的网段;当kube

p roxy监听提service发生修改,如果clusterip字段处于新cidr网段,并且externalips字段处于discarded

service

cidr

range所配置的旧cidr网段,kube

proxy会根据externalips的值生成新的iptables规则,用于保证流量依旧能通过旧的集群ip导入负载容器,同时也会根据clusterip值更新iptables规则,用于保证流量能通过新的集群ip导入负载容器。4.如权利要求3所述的基于kubernetes的云原生服务不间断的ip替换方法,其特征在于,kube

proxy运行在kubernetes云原生集群中所有的工作节点上,负责service的实现工作,service的实现方法主要有3种:userspace、iptables、ipvs。
5.如权利要求1所述的基于kubernetes的云原生服务不间断的ip替换方法,其特征在于,所述步骤s4中,api

server接收提clusterip字段值为空字符串的修改服务请求后,api

server会将旧的clusterip值赋值给externalips字段,并从新的cidr网段中分配一个新的ip赋值给clusterip字段,并将更新后的service更新至etcd。6.如权利要求1所述的基于kubernetes的云原生服务不间断的ip替换方法,其特征在于,所述步骤s5结束后,kubernetes集群内可以通过新旧clusterip都能访问提服务,保证了服务的不间断。
技术总结
本发明公开了一种基于Kubernetes的云原生服务不间断的IP替换方法,属于云计算技术领域。包括如下步骤:对Kubernetes中的api


技术研发人员:赵凯麟 王志雄 韦克璐
受保护的技术使用者:中国—东盟信息港股份有限公司
技术研发日:2021.02.05
技术公布日:2021/6/25

转载请注明原文地址: https://doc.8miu.com/read-150042.html

最新回复(0)