Kubernetes 网络的四种场景分析

原作者: 人工智能 收藏 分享 邀请

导读:本文引见了Kubernetes收集的各类场景通讯形式,包罗4种场景通讯形式,包罗容器到容器、容器到办事和内部到外部。在设计Kubernetes集装箱平台时,建议按照这些通讯形式和详细的场

本文引见了Kubernetes收集的各类场景通讯形式,包罗4种场景通讯形式,包罗容器到容器、容器到办事和内部到外部。在设计Kubernetes集装箱平台时,建议按照这些通讯形式和详细的场景选择适宜的处理计划。此中,应特殊留意内部对外部的拜候。

AI人工智能网

互联网公司顾文军是金融业的修建师。2008年,他卒业于南京邮电年夜学电路与零碎专业。他花了12年多的时候研讨信息手艺根本举措措施、云计较、容器、年夜数据、人工智能、金融手艺和相干范畴的处理计划。

在现实的business 场景中,营业组件之间的关系很是庞杂,特殊是有了微办事的概念,使用法式摆设的粒度变得加倍邃密和矫捷。为了撑持营业使用组件的通讯,设计的Kubernetes收集首要存眷以下场景:

(1)慎密耦合的容器之间的直接通讯;

(2)吊舱与吊舱之间的笼统通讯;

(3)吊舱与办事之间的通讯;

(4)集群的内部和外部组件之间的通讯。

1.集装箱对集装箱通讯

统一窗格中的容器(窗格中的容器不会跨主机)共享不异的收集定名空间和不异的Linux和谈栈。是以,关于利用收集的各类操纵,就像它们在统一台机械上一样,它们甚至可以利用当地主机地址拜候彼此的端口。成果是复杂、平安和高效的,而且它还可以下降将现有法式从物理机或虚拟机移植到容器的难度。

下图中的暗影部门是在节点上运转的Pod实例。容器1和容器2共享一个收集的定名空间。因为共享一个称号空间,它们似乎运转在统一台机械上,而且它们翻开的端口不会抵触,是以它们可以直接与当地的Linux IPC通讯。他们只需求利用当地主机来拜候彼此。

集装箱对集装箱通讯

2.PODs之间的通讯

每个pod都有一个真正的全局IP地址,统一节点中的分歧Pod可以利用该Pod的IP地址直接彼此通讯,而无需利用其他发明机制,如DNS、Consul等。Pod能够运转在统一个节点上,也能够运转在分歧的节点上,是以通讯可以分为两品种型:统一节点上的pod之间的通讯和分歧节点上的pod之间的通讯。

1)统一个节点中的单位之间的通讯

如图所示,可以看出Pod1和Pod2经由过程Veth毗连到不异的Docker0网桥,而且它们的IP地址IP1和IP2是从Docker0网段主动获取的,该网段与网桥自己的IP3是不异的网段。此外,在Pod1和Pod2的Linux和谈栈上,默许路由是Docker0的地址,这意味着默许环境下,一切非当地收集数据都将被发送到Docker0桥,并由Docker0桥直接传输,是以它们可以直接彼此通讯。

统一节点内的Pod关系

2)分歧节点上的PODs之间的通讯

Pod的地址与Docker0在统一个网段中。我们晓得,Docker0网段和主机网卡是两个完整分歧的IP网段,分歧节点之间的通讯只能经由过程主机的物理网卡停止。是以,为了完成位于分歧节点上的Pod容器之间的通讯,我们必需找到一种经由过程主机的这个IP地址来寻址和通讯的方式。另一方面,也可以找到这些静态分派并埋没在Docker0前面的所谓“公有”IP地址。Kubernetes记实一切正在运转的PODs的IP分派信息,并将信息保留在etcd中(作为办事的端点)。这种公有IP信息关于点对点通讯也很是主要,由于我们的收集形式需求利用公有IP停止点对点通讯。如前所述,Kubernetes 收集是平展的,而且直接指向Pod地址,是以这些Pod的IP计划也很是主要,而且不会有抵触。总而言之,为了撑持分歧节点上的PODs之间的通讯,必需知足两个前提:

(1)在全部Kubernetes集群中计划Pod分派,没有抵触;

(2)找到一种方式,将Pod的IP与其地点节点的IP相干联,以便Pod可以经由过程这种联系关系彼此拜候。

按照前提1的请求,我们需求在摆设Kubernetes时计划Docker0的IP地址,以确保每个节点上Docker0的地址之间没有抵触。我们可以在计划背工动将它分派给每个节点,或许制订一个分派法则,装置的法式将本身分派和占用它。例如,Kubernetes 收集加强型开源软件法兰绒可以治理资本池分派。

按照前提2的请求,当Pod中的数据被发送出往时,需求一种机制来晓得另一个Pod的IP地址挂在哪个特定节点上。也就是说,起首找到节点对应的主机的IP地址,将数据发送到主机的网卡,然后将响应的数据传输到主机上的特定端口0。一旦数据达到主机节点,节点晓得若何将数据发送到Pod。

概况如下图所示。

跨节点的Pod通讯

在图6中,IP1对应于Pod1,IP2对应于Pod2。当拜候Pod2时,Pod1应当起首从源节点的eth0发送数据,然后找到并达到节点2的eth0。也就是说,从IP3到IP4,然后从IP4到IP2。

3.POD和办事之间的通讯

为了撑持集群的程度扩大和高可用性,Kubernetes笼统了办事的概念。办事是一组PODs的笼统,将按照拜候战略(LB)对其停止拜候。

Kubernetes建立办事时,会为办事分派一个虚拟IP地址,客户端经由过程拜候该虚拟IP地址来拜候办事,而办事担任将恳求转发到后端Pod。这近似于反向代办署理,但与通俗反向代办署理有一些分歧:起首,它的IP地址是虚拟的,需求一些技能才干从内部拜候;其次,它的摆设、启动和住手都是Kubernetes同一和主动治理。

在很多环境下,办事只是一个概念,办事的真正完成是其面前的kube代办署理办事进程。Kubernetes群集中的每个节点都将运转一个kube-proxy办事历程,该历程可被视为办事的通明代办署理和负载均衡器,其焦点功用是将对办事的拜候恳求转发给后真个多个Pod实例。关于每个TCP类型Kubernetes办事,kube代办署理将在当地节点上设置一个SocketServer来领受恳求,然后将其均匀发送到后真个Pod端口。这个进程默许采取轮回负载均衡算法。Kube代办署理和后端Pod之间的通讯与尺度的Pod到Pod通讯完整不异。此外,Kubernetes还经由过程点窜办事的办事标准-会话顺应性参数的值来供给会话连结功用的定向转发。假如设置值为“客户机IP”,来自统一客户机IP的一切恳求将被转发到统一后端Pod。此外,集群IP和节点端口办事的概念由kube-proxy经由过程Iptables和NAT转换完成,kube-proxy在运转进程中静态建立与办事相干的Iptables法则,完成了集群IP和节点端口的恳求流量在kube-proxy历程上重定向到响应办事的代办署理端口的功用。Iptables机制针对的是当地代办署理端口,是以假如Pod需求拜候办事,代办署理必需在它地点的节点上运转,代办署理组件将在每个节点上运转Kubernetes。在Kubernetes群集中,对办事群集IP和端口的拜候可以在任何节点上完成,由于每个节点上的kube代办署理为该办事设置不异的转发法则。

总之,因为kube-proxy的感化,在办事挪用进程中,客户端不需求关怀后真个几个PODs,中心进程中的通讯、负载均衡和毛病恢复是通明的,如下图所示。

办事的负载均衡转发

拜候办事的恳求,无论是集群IP+方针端口仍是节点IP+节点端口,都将被重定向到kube-proxy,以便按照节点的Iptables法则侦听办事的办事代办署理端口。在Kube代办署理收到办事的拜候恳求后,它将若何选择后端Pod?

起首,今朝,kube代办署理负载均衡只撑持轮回算法。该算法按照成员列表一一选择成员,假如一轮竣事,则从最先最先下一轮,依此类推。Kube-proxy的负载均衡器也撑持基于轮回算法的会话连结。假如在办事界说中指定了会话连结,库比代办署理将在领受恳求时从恳求的IP中查找能否有一个affinityState对象。假如这个对象存在而且会话没有超时,kube代办署理将把恳求转到由affinityState指向的后端Pod。假如当地没有来自恳求的IP的affinityState对象,请记实恳求的IP和指向的端点。上面的恳求将对峙建立的affinityState对象,它完成了客户真个IP会话连结功用。

接上去,我们深切阐发了kube代办署理的完成细节。kube代办署理进程为每个办事成立一个“办事代办署理对象”。办事代办署理对象是kube代办署理法式中的一个数据布局,它包罗一个用于监听这个办事恳求的套接字办事器。套接字办事器的端口是随机选择的当地余暇端口。此外,kube-proxy还构建了一个“负载均衡器组件”,以完成毗连到SocketServer上领受的后真个多个Pod毗连之间的负载均衡和会话连结才能。

kube代办署理经由过程查询和监控办事和端点在使用编程接口办事器中的转变来完成其首要功用,包罗为新建立的办事翻开一个当地代办署理对象(代办署理对象是Kube代办署理法式中的一个数据布局,办事端口是一个代办署理对象,包罗一个用于监控办事恳求的SocketServer),领受恳求,并逐一处置转变的办事列表。以下是详细的处置流程:

(1)假如办事未设置为IP(集群IP,不做任何处置;不然,获取办事的一切端口界说列表(规格端口字段)

(2)一一读取办事端口界说列表中的端口信息,按照端口称号、办事称号和称号空间判定对应的办事代办署理对象能否曾经在当地存在,假如不存在,则建立一个新的办事代办署理对象;假如存在,而且办事端口已被点窜,请先在Iptables中删除与办事相干的法则,封闭办事代办署理对象,然后履行新的进程,即,将办事代办署理对象分派给办事端口,并为办事建立相干的Iptables法则。

(3)更新负载平衡组件中响应办事的转发地址表,并断定新建办事转发时的会话连结战略。

(4)清算已删除的办事。

Kube代办署理和APIServer之间的交互进程

4.内部到外部拜候

作为一个根基的资本对象,Pod不只可以被集群外部的Pod拜候,还可以从内部利用。办事是一组具有不异功用的PODs的笼统,它是向内部世界供给办事的最适宜的粒度。

因为分派给集群IP规模池中的办事对象的IP只能在外部拜候,是以其他PODs可以无妨碍地拜候它。可是,假如此办事用作前端办事,并预备好为群集外的客户端供给办事,则它需求对内部可见。

Kubernetes撑持两个内部办事的类型界说:节点端口和负载均衡器。

(1)节点端口

界说办事时,指定例格类型=节点端口,并指定例格端口的值。节点端口,零碎将在Kubernetes群集中每个节点的主机上翻开一个现实端标语。如许,可以拜候节点的客户端可以经由过程该端标语拜候外部办事。

(2)负载均衡器

假如云办事供给商撑持内部负载均衡器,则可以经由过程标准类型=负载均衡器来界说办事,而且需求指定负载均衡器的IP地址。利用这品种型需求指定办事的节点端口和集群IP。

对该办事的拜候恳求将经由过程负载平衡器转发到后端Pod,负载分派的完成取决于云办事供给商供给的负载平衡器的完成机制。

(3)内部获取外部办事的准绳

当我们从内部拜候集群外部时,我们终极会达到特定的Pod。经由过程NodePort的方式是翻开kube代办署理,利用Iptables为NodePort办事设置法则,并将对办事的拜候权转移给kube代办署理,如许kube代办署理就可以像外部PODs拜候办事一样在后端拜候一组PODs。在这种形式下,kube-proxy被用作负载均衡器来处置对办事的内部拜候和对Pod的进一步拜候。而内部平衡器形式更常用。罕见的完成是利用内部负载均衡器,它面向集群中的一切节点。当收集流量被发送到负载均衡器地址时,它将辨认出它是办事的一部门,然后将其路由到恰当的后端Pod。

是以,当从内部拜候外部Pod资本时,有很多分歧的组合。

里面没有负载均衡器,可是里面没有负载均衡器,只要在非凡环境下才需求。在现实的出产项目中,我们需求拜候一个接一个启动的PODs,并向它们发送刷新指令。这是利用它的独一方式。这需求开辟额定的法式来读取办事下的端点列表,并逐一与这些PODs通讯。凡是,应当防止这种通讯形式。例如,每个Pod可以从集中式数据源提取号令,而不是将号令推送到它。由于每个Pod的详细启动和住手是静态的,所以依靠于详细的Pod相当于绕过了Kubernetes办事机制,这是可以完成的,但并不睬想。

在第二种环境下,采取节点端口形式,此中内部使用法式直接拜候办事的节点端口,并经由过程负载均衡器Kube代办署理拜候外部Pod。

第三种环境是负载均衡器形式,由于内部负载均衡器是一个具有Kubernetes常识的负载均衡器,它将侦听办事的建立,从而晓得后端Pod的最先和住手转变,是以它具有与后端Pod通讯的才能。可是,这里有一个成绩需求留意,即负载均衡器需求一种方式来直接与Pod通讯。也就是说,这个内部负载均衡器需求利用与Pod到Pod不异的通讯机制。

第四种环境很少利用,由于它需求两级负载均衡装备,而且收集的挪用在被随机负载均衡两次后更难跟踪。当现实出产情况中存在成绩时,很难跟踪收集数据的流程。

(4)内部硬件负载均衡器形式

在很多现实出产情况中,由于Kubernetes集群摆设在公有云情况中,所以传统的负载均衡器不晓得办事。现实上,我们只需求处理两个成绩,然后我们就可以把它酿成一个办事感知负载均衡器,这也是现实零碎中集群外部内部拜候Kubernetes的抱负形式。

经由过程编写一个法式来监控办事的更改,这些更改将按照负载均衡器的通讯接口作为法则写进负载均衡器。负载均衡器装备有效于直接拜候Pod的通讯装配。下图申明了这一进程。

自界说内部负载均衡器拜候办事

这里,供给了一个办事代办署理来完成对办事转变的感知。代办署理可以直接从etcd或经由过程接口挪用API办事器来监控办事和端点的转变,并将转变写进内部硬件负载均衡器。

同时,每个节点都运转带有路由发明和谈的软件,该和谈担任经由过程路由发明和谈将该节点上的一切地址多播到收集内的其他主机,当然还包罗硬件负载均衡器。如许,硬件负载均衡器就可以晓得每个Pod实例的IP地址在哪个节点上。经由过程以上两个步调,成立了一个基于硬件的内部办事感知负载均衡器。

详细环境请参考第五章的操练部门。

5.摘要

本章重点引见Kubernetes收集的各类场景形式,包罗四种场景通讯形式:容器到容器、容器到办事和内部到外部。在设计Kubernetes集装箱平台时,建议按照这些通讯形式和详细的场景选择适宜的处理计划。此中,应当留意的是,从外到内的拜候可以经由过程节点端口、负载平衡器或进口形式,这应当按照详细的场景停止阐发。

节点端口办事是地下办事的最原始体例,它将在一切节点上翻开一个特定的端口,发送到该端口的任何流量都将被转发到该办事。这种方式有很多错误谬误:每个端口只能有一个办事;默许环境下只能利用端口30000 ~ 32767。假如一个节点的IP地址发作转变,就会惹起成绩。因为这些缘由,不建议在出产中利用这种方式。假如办事可用性不是特殊存眷或许本钱是特殊存眷的,这个计划更适宜。

负载均衡器是办事表露的尺度体例,它将启动一个收集负载均衡器,并供给一个IP地址来将一切流量转发给办事。假如办事是直接地下的,这是默许方式。指定端口上的一切流量都将被转发到办事,而无需过滤、路由等。这意味着简直任何类型的流量都可以发送,如HTTP、TCP、UDP、Websocket、gRPC或其他。这种方式的最年夜错误谬误是,利用负载均衡器地下的每个办事都将取得本身的IP地址,而且必需为每个办事利用一个负载均衡器,这将破费良多钱。

进口不是真正的办事。相反,它位于多个办事的后面,充任集群中的“智能路由器”或进口点。默许进口节制器将启动一个HTTP负载均衡器。这将完成到后端办事的基于途径和基于子域的路由。进口能够是地下办事的最强无力的体例,但也能够是最庞杂的体例。假如您想在不异的IP地址下地下多个办事,而且这些办事都利用不异的L7和谈,那么进口是最有效的。


保举浏览:

      Kubernetes 收集的四种场景阐发


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

本文作者2020-6-28 08:27 AM
人工智能
粉丝1 阅读10 回复0

精彩阅读

排行榜

人工智能公众号

扫码微信公众号
我陪你畅想未来

最智能的人工智能网!
QQ:162057003
周一至周五 9:00-18:00
意见反馈:162057003@qq.com

扫一扫关注我们

Powered by Discuz! X3.4   © 2020 ( 鲁ICP备18055727号 )  |  |网站地图