CN111427625B - 一种基于动态路由构建Kubernetes容器云外部负载均衡器的方法 - Google Patents

一种基于动态路由构建Kubernetes容器云外部负载均衡器的方法 Download PDF

Info

Publication number
CN111427625B
CN111427625B CN202010208970.6A CN202010208970A CN111427625B CN 111427625 B CN111427625 B CN 111427625B CN 202010208970 A CN202010208970 A CN 202010208970A CN 111427625 B CN111427625 B CN 111427625B
Authority
CN
China
Prior art keywords
component
loadbalancer
service
type
lbcontroller
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202010208970.6A
Other languages
English (en)
Other versions
CN111427625A (zh
Inventor
韦克璐
王志雄
赵凯麟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
China Asean Information Harbor Co ltd
Original Assignee
China Asean Information Harbor Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by China Asean Information Harbor Co ltd filed Critical China Asean Information Harbor Co ltd
Priority to CN202010208970.6A priority Critical patent/CN111427625B/zh
Publication of CN111427625A publication Critical patent/CN111427625A/zh
Application granted granted Critical
Publication of CN111427625B publication Critical patent/CN111427625B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files
    • G06F9/4451User profiles; Roaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5072Grid computing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/4557Distribution of virtual machine instances; Migration and load balancing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45595Network integration; Enabling network access in virtual machine instances

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明涉及云计算技术领域,尤其是一种基于动态路由构建Kubernetes容器云外部负载均衡器的方法,包括下述步骤:S1、初始化LBController组件、LBAnnouncer组件及LBAgent组件至Kubernetes的集群中;S2、通过上述三个组件使LoadBalancer类型Service IP对外暴露;S3、外部访问的请求通过spine‑leaf架构的leaf路由器并利用等价路由,分配到对应的工作节点上,从而到达节点上的容器。本发明能够解决在非云环境下Kubernetes集群无法使用LoadBalancer类型的service的问题。

Description

一种基于动态路由构建Kubernetes容器云外部负载均衡器的 方法
技术领域
本发明涉及云计算技术领域,尤其是一种基于动态路由构建Kubernetes容器云外部负载均衡器的方法。
背景技术
着云计算的不断发展,容器和Kubernetes已经成为云原生的基石,Kubernetes正在成为广大互联网公司和传统IT行业进行云化和简化运维的利器,在生产环境上得到大规模部署并被越来越多的公司采用。
在Kubernetes集群中,网络是非常基础和非常重要的一部分,提供外部入口则是这其中一个重要环节。Kubernetes提供了NodePort、Ingress和LoadBalancer三种方式将后端工作负载暴露在外部。
然而这三种方式都有一定的缺陷和不足。其中:
NodePort设计之初不是用于生产环境暴露服务的方式。其基于SNAT进行访问,Pod无法看到真正的IP;单点访问,容易造成性能瓶颈和单点故障;端口号访问的方式不易于记忆。
Ingress多用于L7,对于L4的支持不多,配置过于复杂;所有的流量都会经过Ingress Controller,仍然需要NodePort或LoadBalance将其暴露出去,也不可避免有单点故障和性能瓶颈。
LoadBalancer是Kubernetes提倡的方式,需要借助于云厂商提供的负载均衡器实现,对于非云环境下部署的Kubernetes集群,这一机制就无法使用。
发明内容
为了解决上述问题,本发明提供有一种基于动态路由构建Kubernetes容器云外部负载均衡器的方法,解决在非云环境下Kubernetes集群无法使用LoadBalancer类型的service的问题。
为了实现上述目的,本发明采用的技术方案为:
一种基于动态路由构建Kubernetes容器云外部负载均衡器的方法,包括下述步骤:
S1、通过yaml或json配置文件将LBController组件、LBAnnouncer组件及LBAgent组件初始化至Kubernetes的集群中并使所述LBController组件、所述LBAnnouncer及所述LBAgent组件运行在节点上;
S2、所述LBController通过kube-apiserver监控Kubernetes群集中的LoadBalancer类型Service及Endpoints的变化,并管理及分配LoadBalancer类型ServiceIP;所述LBAnnouncer组件与所述LBController组件连接,以获取所述LBController组件中LoadBalancer类型Service及Endpoints变化信息的数据,所述LBAnnouncer组件与leaf路由器独立建立BGP邻居,以广播Service IP的路由,并使LoadBalancer类型Service IP能够对外暴露;所述LBAgent组件能够获取Endpoints变化信息的数据,并通过iptables规则对原有的负载均衡进行修改;
S3、外部访问的请求访问步骤S2所暴露的LoadBalancer类型Service IP,通过spine-leaf架构访问到leaf路由器,leaf路由器根据等价路由完成的负载均衡,确定了请求的下一跳地址,将请求均衡分配到某个工作节点上后,外部访问的请求根据对应工作节点上的iptables规则进入对应工作节点上的容器。
进一步地,步骤S1中,所述LBController组件及所述LBAnnouncer按照Kubernetes的调度策略运行在某个或某几个工作节点上;所述LBAgent组件通过DaemonSet的方式运行在所有工作节点及管理节点上。
进一步地,步骤S2中,所述LBController组件的运行步骤为:
a1、所述LBController组件连接kube-apiserver,并根据所述yaml或json配置文件生成IP池,以供LoadBalancer类型Service使用,所述LBController组件对LoadBalancer类型的Service及Endpoints的信息进行缓存;
a2、所述LBController组件采用Watch接口监听LoadBalancer类型的Service及Endpoints的信息,LoadBalancer类型的Service及Endpoints出现信息变化时,所述LBController组件对所述IP池、所述LBAnnouncer组件及所述LBAgent组件进行操作;
进一步地,在步骤a2中,当生成新的LoadBalancer类型的Service时,所述LBController组件从yaml或json配置文件中或所述IP池中获取可用的IP,以分配给生成新的LoadBalancer类型的Service;如所分配的IP出现冲突或无可分配的IP时,生成新的LoadBalancer类型的Service进行报错;
当删除LoadBalancer类型的Service时,所述LBController组件能够将被删除LoadBalancer类型的Service的IP还回所述IP池中;
当更新LoadBalancer类型的Service后,如LoadBalancer类型的Service IP产生变化,且LoadBalancer类型的Service IP不出现冲突时,所述LBController为更新后的LoadBalancer类型的Service分配IP,如LoadBalancer类型的Service IP冲突时,更新后的LoadBalancer类型的Service报错。
进一步地,步骤S2中,所述LBAnnouncer组件的运行步骤为:
b1、所述LBAnnouncer组件根据yaml/json配置文件与leaf路由器使用BGP协议建立连接,并在所述LBController组件中获取LoadBalancer类型的Service IP及Endpoints的信息,以宣告路由;
b2、所述LBAnnouncer组件保持与leaf路由器的BGP连接,并监听所述LBController组件中LoadBalancer类型的Service及Endpoints的变化信息,当所述LBAnnouncer组件获得所述LBController组件的变化请求,所述LBAnnouncer组件将LoadBalancer类型的Service IP宣告至leaf路由器的BGP协议中,以使LoadBalancer类型Service IP能够对外暴露;
b3、所述LBAnnouncer组件根据Endpoints信息中的节点名,采用等价路由算法向leaf路由器新增或修改等价路由,以使LoadBalancer类型的Service的下一跳为对应的节点IP。
进一步地,步骤S2中所述LBAgent组件的运行步骤为:
c1、所述LBAgent组件通过添加、修改及删除kube-proxy中关于service的iptables规则,并通过创建、删除及更新路由转发表,以对原有的负载均衡进行修改;
c2、所述LBAgent关闭kube-proxy中的跨界点负载均衡和默认nat特性;
c3、所述LBAgent组件每经过设定的时间值,对LoadBalancer类型Service的iptables规则进行扫描,以对iptables规则的失败项获取及修正。
进一步地,步骤S3中,外部访问LoadBalancer类型的Service,请求到达leaf路由器时,leaf路由器根据等价路由使外部访问的请求分配到与Leaf路由器连接的对应节点;当外部访问的请求到达对应节点后,外部访问的请求根据步骤c1配置的iptables规则,以使外部访问的请求访问对应节点上的容器。
本发明的有益效果是:
1.在yaml或json配置文件的作用下,定义了LBController组件、LBAnnouncer组件及LBAgent组件中对象包含的元素及采取的动作,使每种对象都可以通过yaml或json配置文件来创建;Endpoints是用来记录每个LoadBalancer类型Service对应的所有容器的访问地址,LoadBalancer类型Service通过iptables规则与Endpoints关联的,通过LBController组件随时获取LoadBalancer类型Service及Endpoints的变化信息,以使LBController组件对LoadBalancer类型Service的IP和Endpoints进行管理;在LBAnnouncer组件的作用下,能够使LBAnnouncer组件与leaf路由器建立BGP邻居,使Kubernetes集群中的LoadBalancer类型Service IP能够进行广播,完成LoadBalancer类型Service IP对外暴露,完成LoadBalancer类型Service IP的对外暴露,以使外部访问的请求能够根据LoadBalancer类型Service IP对对应的容器进行访问。通过LBAgent组件获取Endpoints变化信息的数据,并通过iptables规则对原有的负载均衡进行修改,从而实现了对原来的负载均衡屏蔽,以使外部访问的请求能够直接到达容器上。
2.LBAnnouncer与leaf路由器使用动态路由协议建立连接和同步路由。LBAgent组件通过修改kube-proxy原有行为方式,避免对LoadBalancer类型的Service IP源地址转换和目的地址转换,保证请求源IP不被修改并传入容器中;通过等价路由实现了LoadBalancer类型Service的负载均衡特性,避免了单点故障,成倍提升了性能;暴露LoadBalancer类型的Service IP的方式可以与DNS解析结合,容易记忆。
附图说明
图1是本发明一较佳实施方式的基于动态路由构建Kubernetes容器云外部负载均衡器的结构框图。
图2是本发明一较佳实施方式的基于动态路由构建Kubernetes容器云外部负载均衡器的响应过程图。
图中,1-LBController组件,11-kube-apiserver,2-LBAnnouncer组件,3-LBAgent组件,4-节点,5-kube-proxy,6-leaf路由器,61-Spine路由器,7-容器。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本发明。本文所使用的术语“及/或”包括一个或多个相关的所列项目的任意的和所有的组合。
请同时参见图1及图2,本发明一较佳实施方式的基于动态路由构建Kubernetes容器云外部负载均衡器的方法,包括下述步骤:
S1、通过yaml或json配置文件将LBController组件1、LBAnnouncer组件2及LBAgent组件3初始化至Kubernetes的集群中并使LBController组件1、LBAnnouncer及LBAgent组件3运行在的工作节点4上。如读取yaml或json配置文件失败,则退出系统。
在yaml或json配置文件的作用下,定义了LBController组件1、LBAnnouncer组件2及LBAgent组件3中对象包含的元素及采取的动作,使每种对象都可以通过yaml或json配置文件来创建。
本实施例中,步骤S1中,LBController组件1及LBAnnouncer按照Kubernetes的调度策略运行在某个或某几个工作节点4上。LBAgent组件3通过DaemonSet的方式运行在所有工作节点4及管理节点4上。本实施例中的节点可以为物理机,虚拟机,云主机等所有类型的服务器。
S2、LBController通过kube-apiserver监控Kubernetes群集中的LoadBalancer类型Service及Endpoints的变化,并管理及分配LoadBalancer类型Service IP。
LBAnnouncer组件2与LBController组件1连接,以获取LBController组件1中LoadBalancer类型Service及Endpoints变化信息的数据,LBAnnouncer组件2与leaf路由器6独立建立BGP邻居,以广播Service IP的路由,并使LoadBalancer类型Service IP能够对外暴露。
BGP是互联网上一个核心的去中心化自治路由协议,由于BGP的去中心化特性,很容易搭建一个高可用路由层,保证网络的持续性。
LBAgent组件3能够获取Endpoints变化信息的数据,并通过iptables规则对原有的负载均衡进行修改。
S3、外部访问的请求访问步骤S2所暴露的LoadBalancer类型Service IP,通过spine-leaf架构访问到leaf路由器6,leaf路由器6根据等价路由完成的负载均衡,确定了请求的下一跳地址,将请求均衡分配到某个工作节点上后,外部访问的请求根据对应工作节点上的iptables规则进入对应工作节点上的容器7。
等价路由存在多条不同链路到达同一目的地址的网络环境中,如果使用传统的路由技术,发往该目的地址的数据包只能利用其中的一条链路,其它链路处于备份状态或无效状态,并且在动态路由环境下相互的切换需要一定时间,而等值多路径路由协议可以在该网络环境下同时使用多条链路,不仅增加了传输带宽,并且可以无时延无丢包地备份失效链路的数据传输。
Endpoints是用来记录每个LoadBalancer类型Service对应的所有容器7的访问地址,LoadBalancer类型Service通过iptables规则与Endpoints关联的。
通过LBController组件1随时获取LoadBalancer类型Service及Endpoints的变化信息,以使LBController组件1对LoadBalancer类型Service的IP和Endpoints进行管理。
在LBAnnouncer组件2的作用下,能够使LBAnnouncer组件与leaf路由器6建立BGP邻居,使Kubernetes集群中的LoadBalancer类型Service IP能够进行广播,完成LoadBalancer类型Service IP对外暴露,以使外部访问的请求能够根据LoadBalancer类型Service IP对对应的容器7进行访问。
通过LBAgent组件3获取Endpoints变化信息的数据,并通过iptables规则使外部访问的请求到达容器上,从而实现了对原来的负载均衡屏蔽,以使外部访问的请求能够直接到达容器上。
本实施例的步骤S2中,LBController组件1的运行步骤为:
a1、LBController组件1连接kube-apiserver,当LBController组件1连接kube-apiserver时候出现报错,则每隔一分钟重试连接。LBController组件1根据所述yaml/json配置文件生成IP池供LoadBalancer Service使用。LBController组件1对LoadBalancer类型的Service及Endpoints的信息进行缓存。
a2、LBController组件1采用Watch接口监听LoadBalancer类型的Service及Endpoints的信息,LoadBalancer类型的Service及Endpoints出现信息变化时,LBController组件1对IP池、LBAnnouncer组件2及LBAgent组件3进行操作。
在步骤a2中,当生成新的LoadBalancer类型的Service时,LBController组件1从yaml或json配置文件中或IP池,以分配给生成新的LoadBalancer类型的Service;如所分配的IP出现冲突或无可分配的IP时,生成新的LoadBalancer类型的Service进行报错。
当删除LoadBalancer类型的Service时,LBController组件1能够将被删除LoadBalancer类型的Service的IP还回IP池。
当更新LoadBalancer类型的Service后,如LoadBalancer类型的Service IP产生变化,且LoadBalancer类型的Service IP不出现冲突时,LBController为更新后的LoadBalancer类型的Service分配IP,如LoadBalancer类型的Service IP冲突时,更新后的LoadBalancer类型的Service报错。
在IP分配时IP冲突或无可分配IP,LoadBalancer类型的Service进行报错,防止了流程的堵塞。而被删除LoadBalancer类型的Service的IP还回IP池,能够使空闲IP得到充分利用。
由于每一个LoadBalancer类型的Service是与多个Endpoints对应的,当容器7进行新建或删除的时候,就会有一个Endpoints新建或删除,当LoadBalancer类型的Service新建或删除的时候,就会有一个service IP新建或删除,因此需要对LoadBalancer类型的Service及Endpoints的信息进行同时监听。
步骤S2中,LBAnnouncer组件2的运行步骤为:
b1、LBAnnouncer组件2根据yaml或json配置文件与leaf路由器6使用BGP协议建立连接,并在LBController组件1中获取LoadBalancer类型的Service IP及Endpoints的信息,以宣告路由。
b2、LBAnnouncer组件2保持与leaf路由器6的BGP连接,并监听LBController组件1中LoadBalancer类型的Service及Endpoints的变化信息,当LBAnnouncer组件2获得LBController组件1的变化请求,LBAnnouncer组件2将LoadBalancer类型的Service IP宣告至leaf路由器6的BGP协议中,以使LoadBalancer类型Service IP能够对外暴露。
b3、LBAnnouncer组件2根据Endpoints信息中的节点4名,采用等价路由算法向leaf路由器6新增或修改等价路由,以使LoadBalancer类型的Service的下一跳为对应的节点4IP。
步骤S2中LBAgent组件3的运行步骤为:
c1、LBAgent组件3通过添加、修改及删除kube-proxy5中关于service的iptables规则,并进行创建、删除及更新路由转发表,以对原有的负载均衡进行修改。
c2、LBAgent关闭kube-proxy5中的跨界点负载均衡和默认nat特性。通过关闭kube-proxy5中的负载均衡,使得本申请中的LBController组件1、LBAnnouncer组件2及LBAgent组件3能够提供负载均衡的作用;通过关闭默认nat特性实现了源地址的保持,解决源地址被转换的问题。
c3、LBAgent组件3每经过设定的时间值,对LoadBalancer类型Service的iptables规则进行扫描,以对iptables规则的失败项获取及修正。
LBAnnouncer组件2与leaf路由器6使用动态路由协议建立连接和同步路由。LBAgent组件3通过修改kube-proxy 5原有行为方式,避免对LoadBalancer类型的ServiceIP源地址转换和目的地址转换,保证请求源IP不被修改并传入容器中;通过等价路由实现了LoadBalancer类型Service的负载均衡特性,避免了单点故障,成倍提升了性能;暴露LoadBalancer类型的Service IP的方式可以与DNS解析结合,容易记忆。
步骤S3中,外部访问LoadBalancer类型的Service,请求到达leaf路由器6时,leaf路由器6根据等价路由使外部访问的请求分配到与Leaf路由器6连接的对应节点;当外部访问的请求到达对应节点后,外部访问的请求根据步骤c1配置的iptables规则,以使外部访问的请求访问对应节点上的容器7。
本实施例的外部访问的请求过程如图2所示,
图中,一个N个节点4的Kubernetes集群(N>1),包含节点4node1,node2…nodeN。他们的节点4IP分别是172.168.1.1,172.168.1.2…。
spine-leaf架构包括leaf路由器6及Spine路由器61。
Kubernetes群集中leaf路由器6具有M个交换机,分别为L1、L2…LM,其中,node1与L1及L2相连,node2与L1及L2连接…。leaf路由器6与LBAnnouncer组件2通过BGP协议连接,同时leaf路由器6开启了等价路由功能;
Spine路由器61具有两个交换机并分别为S1及S2,Spine路由器61分别与leaf路由器6连接,即为S1分别与L1、L2…LM连接,S2分别与L1、L2…LM连接,同时Spine路由器61开启了等价路由功能。
Kubernetes集群中创建了一个LoadBalancer类型的Service,假设为serviceA。
从图2中可见,外部访问的ServiceA在Spine路由器61有S1及S2两条路径,leaf路由器6有L1及L2两条路径可选,节点4也有node1及node2两条路径可选,总路径有2*2*2=8条。使得流量在整个网络中被分流,任意一层的设备宕机都不会影响用户的访问。
外部访问的请求过程为:
生成新的LoadBalancer类型的serviceA时,LBController组件1从yaml或json配置文件中或IP池中获取可用的IP,以分配给生成新的LoadBalancer类型的Service,该LoadBalancer类型的Service A的IP为10.100.1.10。
LBAnnouncer组件2根据yaml或json配置文件与leaf路由器6使用BGP协议建立连接,并在LBController组件1中获取LoadBalancer类型的Service A的IP及相关的Endpoints信息,以使BGP协议宣告路由。
LBAnnouncer组件2根据Endpoints信息中的节点4名,采用等价路由算法向leaf路由器6新增或修改等价路由,以使LoadBalancer类型的Service A的下一跳为对应的节点4IP,以使LoadBalancer类型Service A的IP对外暴露。
LBAgent组件3通过添加、修改及删除kube-proxy5中关于service的iptables规则,并进行创建、删除及更新路由转发表,以对原有的负载均衡进行修改,从而对原有的负载均衡被屏蔽。
外部访问的请求根据LoadBalancer类型Service A的IP,进入Spine路由器61中S1,通过S1进行计算,从而获得外部访问的请求的下一跳为L1及L2。外部访问的请求根据链路状态路由协议使外部访问的请求分配到leaf路由器6的L1中;通过L1进行计算,从而获得外部访问的请求的下一跳为node1和node2,外部访问的请求根据链路状态路由协议使外部访问的请求分配到node1中。外部访问的请求根据步骤c1配置的iptables规则,以使外部访问的请求访问对应节点4上的容器7。

Claims (7)

1.一种基于动态路由构建Kubernetes容器云外部负载均衡器的方法,其特征在于,包括下述步骤:
S1、通过yaml或json配置文件将LBController组件、LBAnnouncer组件及LBAgent组件初始化至Kubernetes的集群中并使所述LBController组件、所述LBAnnouncer及所述LBAgent组件运行在节点上;
S2、所述LBController通过kube-apiserver监控Kubernetes群集中的LoadBalancer类型Service及Endpoints的变化,并管理及分配LoadBalancer类型Service IP;所述LBAnnouncer组件与所述LBController组件连接,以获取所述LBController组件中LoadBalancer类型Service及Endpoints变化信息的数据,所述LBAnnouncer组件与leaf路由器独立建立BGP邻居,以广播Service IP的路由,并使LoadBalancer类型Service IP能够对外暴露;所述LBAgent组件能够获取Endpoints变化信息的数据,并通过iptables规则对原有的负载均衡进行修改;
S3、外部访问的请求访问步骤S2所暴露的LoadBalancer类型Service IP,通过spine-leaf架构访问到leaf路由器,leaf路由器根据等价路由完成的负载均衡,确定了请求的下一跳地址,将请求均衡分配到某个工作节点上后,外部访问的请求根据对应工作节点上的iptables规则进入对应工作节点上的容器。
2.根据权利要求1所述的一种基于动态路由构建Kubernetes容器云外部负载均衡器的方法,其特征在于:步骤S1中,所述LBController组件及所述LBAnnouncer按照Kubernetes的调度策略运行在某个或某几个工作节点上;所述LBAgent组件通过DaemonSet的方式运行在所有工作节点及管理节点上。
3.根据权利要求1所述的一种基于动态路由构建Kubernetes容器云外部负载均衡器的方法,其特征在于:步骤S2中,所述LBController组件的运行步骤为:
a1、所述LBController组件连接kube-apiserver,并根据所述yaml或json配置文件生成IP池,以供LoadBalancer类型Service使用,所述LBController组件对LoadBalancer类型的Service及Endpoints的信息进行缓存;
a2、所述LBController组件采用Watch接口监听LoadBalancer类型的Service及Endpoints的信息,LoadBalancer类型的Service及Endpoints出现信息变化时,所述LBController组件对所述IP池、所述LBAnnouncer组件及所述LBAgent组件进行操作。
4.根据权利要求3所述的一种基于动态路由构建Kubernetes容器云外部负载均衡器的方法,其特征在于:在步骤a2中,当生成新的LoadBalancer类型的Service时,所述LBController 组件从yaml或json配置文件中或所述IP池中获取可用的IP,以分配给生成新的LoadBalancer类型的Service;如所分配的IP出现冲突或无可分配的IP时,生成新的LoadBalancer类型的Service进行报错;
当删除LoadBalancer类型的Service时,所述LBController组件能够将被删除LoadBalancer类型的Service的IP还回所述IP池中;
当更新LoadBalancer类型的Service后,如LoadBalancer类型的Service IP产生变化,且LoadBalancer类型的Service IP不出现冲突时,所述LBController为更新后的LoadBalancer类型的Service分配IP,如LoadBalancer类型的Service IP冲突时,更新后的LoadBalancer类型的Service报错。
5.根据权利要求3所述的一种基于动态路由构建Kubernetes容器云外部负载均衡器的方法,其特征在于:步骤S2中,所述LBAnnouncer组件的运行步骤为:
b1、所述LBAnnouncer组件根据yaml/json配置文件与leaf路由器使用BGP协议建立连接,并在所述LBController组件中获取LoadBalancer类型的Service IP及Endpoints的信息,以宣告路由;
b2、所述LBAnnouncer组件保持与leaf路由器的BGP连接,并监听所述LBController组件中LoadBalancer类型的Service及Endpoints的变化信息,当所述LBAnnouncer组件获得所述LBController组件的变化请求,所述LBAnnouncer组件将LoadBalancer类型的ServiceIP宣告至leaf路由器的BGP协议中,以使LoadBalancer类型Service IP能够对外暴露;
b3、所述LBAnnouncer组件根据Endpoints信息中的节点名,采用等价路由算法向leaf路由器新增或修改等价路由,以使LoadBalancer类型的Service的下一跳为对应的节点IP。
6.根据权利要求1所述的一种基于动态路由构建Kubernetes容器云外部负载均衡器的方法,其特征在于:步骤S2中所述LBAgent组件的运行步骤为:
c1、所述LBAgent组件通过添加、修改及删除kube-proxy中关于service的iptables规则,并通过创建、删除及更新路由转发表,以对原有的负载均衡进行修改;
c2、所述LBAgent关闭kube-proxy中的跨界点负载均衡和默认nat特性;
c3、所述LBAgent组件每经过设定的时间值,对LoadBalancer类型Service的iptables规则进行扫描,以对iptables规则的失败项获取及修正。
7.根据权利要求6所述的一种基于动态路由构建Kubernetes容器云外部负载均衡器的方法,其特征在于:步骤S3中,外部访问LoadBalancer类型的Service,请求到达leaf路由器时,leaf路由器根据等价路由使外部访问的请求分配到与Leaf路由器连接的对应节点;当外部访问的请求到达对应节点后,外部访问的请求根据步骤c1配置的iptables规则,以使外部访问的请求访问对应节点上的容器。
CN202010208970.6A 2020-03-23 2020-03-23 一种基于动态路由构建Kubernetes容器云外部负载均衡器的方法 Active CN111427625B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010208970.6A CN111427625B (zh) 2020-03-23 2020-03-23 一种基于动态路由构建Kubernetes容器云外部负载均衡器的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010208970.6A CN111427625B (zh) 2020-03-23 2020-03-23 一种基于动态路由构建Kubernetes容器云外部负载均衡器的方法

Publications (2)

Publication Number Publication Date
CN111427625A CN111427625A (zh) 2020-07-17
CN111427625B true CN111427625B (zh) 2023-03-24

Family

ID=71549377

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010208970.6A Active CN111427625B (zh) 2020-03-23 2020-03-23 一种基于动态路由构建Kubernetes容器云外部负载均衡器的方法

Country Status (1)

Country Link
CN (1) CN111427625B (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111897641B (zh) * 2020-08-03 2023-07-28 海信电子科技(武汉)有限公司 微服务监控调度方法及显示设备
CN114650293B (zh) * 2020-12-17 2024-02-23 中移(苏州)软件技术有限公司 一种流量分流的方法、装置、终端和计算机存储介质
CN112764886A (zh) * 2021-01-29 2021-05-07 上海弘积信息科技有限公司 一种基于Kubernetes平台的负载均衡控制器
CN113037881B (zh) * 2021-02-05 2023-03-14 中国—东盟信息港股份有限公司 一种基于Kubernetes的云原生服务不间断的IP替换方法
CN113079207B (zh) * 2021-03-26 2022-07-08 重庆紫光华山智安科技有限公司 一种实现端口或网络高可用的方法、系统、终端及介质
CN113572838B (zh) * 2021-07-22 2023-04-07 北京金山云网络技术有限公司 基于Kubernetes的网络访问方法、装置、设备及介质
CN114338820A (zh) * 2021-12-31 2022-04-12 中国电信股份有限公司 网络访问方法、装置、电子设备及存储介质

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106888254A (zh) * 2017-01-20 2017-06-23 华南理工大学 一种基于Kubernetes的容器云架构及其各模块之间的交互方法
CN108900651A (zh) * 2018-06-22 2018-11-27 杭州才云科技有限公司 基于多租户环境的Kubernetes与Neutron对接方法、存储介质、设备
CN108989091A (zh) * 2018-06-22 2018-12-11 杭州才云科技有限公司 基于Kubernetes网络的租户网络隔离方法、存储介质、电子设备
CN109067828A (zh) * 2018-06-22 2018-12-21 杭州才云科技有限公司 基于Kubernetes和OpenStack容器云平台多集群构建方法、介质、设备
CN110457134A (zh) * 2019-08-08 2019-11-15 杭州阿启视科技有限公司 建立基于容器云和微服务架构的视频大数据云平台的方法
CN110531987A (zh) * 2019-07-30 2019-12-03 平安科技(深圳)有限公司 基于Kubernetes集群的管理方法、装置及计算机可读存储介质
CN110611697A (zh) * 2019-08-02 2019-12-24 杭州网银互联科技股份有限公司 一种混合云的网络架构及网络部署方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9985827B2 (en) * 2016-05-24 2018-05-29 Futurewei Technologies, Inc. Automated generation of deployment workflows for cloud platforms based on logical stacks

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106888254A (zh) * 2017-01-20 2017-06-23 华南理工大学 一种基于Kubernetes的容器云架构及其各模块之间的交互方法
CN108900651A (zh) * 2018-06-22 2018-11-27 杭州才云科技有限公司 基于多租户环境的Kubernetes与Neutron对接方法、存储介质、设备
CN108989091A (zh) * 2018-06-22 2018-12-11 杭州才云科技有限公司 基于Kubernetes网络的租户网络隔离方法、存储介质、电子设备
CN109067828A (zh) * 2018-06-22 2018-12-21 杭州才云科技有限公司 基于Kubernetes和OpenStack容器云平台多集群构建方法、介质、设备
CN110531987A (zh) * 2019-07-30 2019-12-03 平安科技(深圳)有限公司 基于Kubernetes集群的管理方法、装置及计算机可读存储介质
CN110611697A (zh) * 2019-08-02 2019-12-24 杭州网银互联科技股份有限公司 一种混合云的网络架构及网络部署方法
CN110457134A (zh) * 2019-08-08 2019-11-15 杭州阿启视科技有限公司 建立基于容器云和微服务架构的视频大数据云平台的方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
porter:面向裸金属环境的kubernetes开源负载均衡器;青云qingcloud;《网页在线公开:https://zhuanlan.zhihu.com/p/81194017》;20190904;第1-18页 *

Also Published As

Publication number Publication date
CN111427625A (zh) 2020-07-17

Similar Documents

Publication Publication Date Title
CN111427625B (zh) 一种基于动态路由构建Kubernetes容器云外部负载均衡器的方法
US11902364B2 (en) Automatic replacement of computing nodes in a virtual computer network
US10645056B2 (en) Source-dependent address resolution
US9979605B2 (en) Virtualization mapping
US10749936B1 (en) Managing communications having multiple alternative destinations
US8806482B1 (en) Interaction with a virtual network
US10110500B2 (en) Systems and methods for management of cloud exchanges
US10015094B1 (en) Customer-specified routing policies
Zheng et al. A heuristic survivable virtual network mapping algorithm
CN111510515B (zh) 一种区分混合应用环境的容器的方法及装置
CN111447146B (zh) 物理路由信息的动态更新方法、装置、设备和存储介质
Lin et al. ASIC: An architecture for scalable intra-domain control in OpenFlow
Togou et al. A hierarchical distributed control plane for path computation scalability in large scale software-defined networks
WO2021173319A1 (en) Service chaining in multi-fabric cloud networks
EP3424185A1 (en) Provisioning private network connections
US20220166715A1 (en) Communication system and communication method
He et al. How flexible is dynamic SDN control plane?
Simoens et al. Service-centric networking for distributed heterogeneous clouds
Moufakir et al. Collaborative multi-domain routing in SDN environments
Scharf et al. Monitoring and abstraction for networked clouds
US10122578B1 (en) Configuration propagation deployment policy
Valancius et al. {Wide-Area} Route Control for Distributed Services
CN108352997A (zh) 以分层分布式方式扩展云汇聚点
Togou et al. A distributed control plane for path computation scalability in software-defined networks
Sharma et al. Switchboard: A Middleware for Wide-Area Service Chaining

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant