00:00
大家好,欢迎大家继续收看上硅谷的Linux云计算视频,我是王瑶老师。那这节课呢,我们继续去学习我们的。腾讯方式。我们要先对K8S中的网络通讯有一定的认知以后,那才能帮助我们比较好的去构建我们的K8S集群。那首先我们先看第一点就是K8S。它的网络模型。他说假定了所有的pad都在一个可以。直接联通的。点评的网络空间中。这个概念非常重要。可以直接连通。我们其实对扁平的概念。已经有了一定的了解了,对吧,比如。在一些面试。那一些都会说,哎,我们公司是扁平化管理比较人性化。赶快加入我们公司吧。其实说白了来说,就是讲这家公司规模比较小,不然的话怎么可能扁平化。
01:04
那在K8S里的扁平化的概念就是所有的泡的。都可以通过对方的IP。直接到达。当然这里的直接到达,你需要加一个双引号。就是泡的认为我是直接到达的,其实底层有一堆的转换机制存在。比如到时候我可以带大家去看一下我们的弗兰诺的转换。一致对吧。这在GCE里,也就是谷歌的云服务器里,是现成的网络模型。在K8S中,假定这个网络已经存在了。也就意味着,如果我们想在自己的集群中去构建K8S的话,你先要去解决。空间。这个其实如果现在没有这些开源方案的话,就是比较难去做到的。原因是我们需要每一个机群的炮的容器,需要去打通。
02:01
那比如我们之前讲过的OVS对吧,欧V维。那这个软件加上我们的。隧道模式创。可以去实现我们的。但是比较费劲。那所幸的是,我们到今天为止已经有大量的一些企业加入到我们的KS开发队列来。比如我们后面要学到一个网络组件叫flano,它可以帮我们去实现这么一个。点评的网络空间。那我们接下来来看一下同一个泡之间。的多个容器。也就是我现在有一个炮筒。泡到里面呢,有很多容器。谁谁谁对吧。那他们之间要想互相访问的话,走的是谁呢?没忘吧,我们之前说过,只要是同一个炮的。它会共用我们的一个叫做什么pass容器的这么一个网络站。那他们之间互相访问的话,是不是走的就是这个网络站的I。
03:03
虎牙网卡。通过log host的方式就可以直接访问,这是完全没有问题的,能理解我的意思吧?这是第一种。第二种。各pad之间的通讯。各炮的之间的通讯。那这里说的叫overlay network,我们先跳一下,因为等会我们就会看到这个所谓的overlay network到底是一种怎样的方式,它叫全覆盖网络。那下一叫pod与service之间的通讯。通过各节点的IP规则。也就是通过IP规则到。提拉的转换去实现。当然,在最新版本中已经加入了。Is的机制去为他进行转发,这是完全没有问题的。那它的转化效率会更高。对吧,上限也会更高。对于我们现在来说,最主要想解决的就是这个O类网络到底是怎样去实现的。
04:01
以及他们今天之间经历了哪些的转换机制?好,那接下来我们去看一下。在K8S中呢,其实我们的。谷歌没有对自己的KS做了很强的定义。它允许我们通过CI的接口。去接入我们自己想要达到的这么一个网络。其中的flano是我们比较最常用的,在K8S里解决我们的扁平化网络的这么一种方案。符合我们的C接口对吧。No到底是什么呢?它是cor团队针对K8S设计的一个网络规划服务。小白来说就是可以让我们在不同节点主机。不同节点主机创建的刀客容器具有全局唯一的虚拟IP地址。并且还能在这些IP之间建立一个覆盖网络。通过这个覆盖网络。将数据包原封不动的传递到目标。容器内部。那从这句话提取出来的概念就是?
05:00
不同机器。这里指的是我们的物理机,对吧。上面运行的dock。首先,这些刀,这里面的容器,它们之间IP一定不能一致。都说扁平化了。那既然是扁平化的话,那万一你俩IP冲突的话,那是不是已经出现IP冲突这么一个报错了对吧。所以他们之间的IP一定不能一样。不能一样,其实很好解决,我们因为之前已经学过刀客了,我们学刀的时候是不是给大家说过啊。我可以去修改我们的包的启动的配置文件。把这个刀客零这个网桥它的IP地址。不能讲IP对吧,应该是他的分配网段给他改掉。那只要刀和零分配的网段不一样,那这里的容器的IP肯定能够不一样。是这个意思吧。那其实最难的就是这个pad。呼叫这个容器吧,我们现在包括里面还没有还没有泡的概念,对吧,这个容器,那这个容器如果想访问这个容器,想访问这个容器。
06:02
怎么让他能够直接通过对方的IP到达,这才是最难的。或者是迫切需要解决的。对吧,那。我们去看一下flyno是怎么解决的。这里画了两台大主机。物理机对吧。一个是19216866.11,一个是19216866.12。那这里呢,运行了四个pad。一个pod是webpr。一个是web app1,一个是web app3,一个是becon,也就我们前端组件。那它们的结构应该是bacon web p VE。IAPP3,然后所有流量访问到be上,他去经过自己的网关去处理,把什么样的请求分配到什么样的服务上,是这个意思吧。那也就意味着。当bacon想要去跟。Web I PR或者是web IPR,想要想要去跟我们的bacon通讯的时候,就需要跨主机了。
07:04
以及web I app3跟本机的BACK2个不同炮的之间通讯的话,那是是同主机的,他们到底怎样去解决?很重要对吧,好,那我们过来看一下,详细看一下。首先在我们的真实的note服务器上,我们会去安装一个Fla d的。守护进程。这个进程呢,会监听一个端口。这个端口就是用于后期转发数据包以及接收数据包的这么一个。那这个flano一旦这个进程启动以后,它会开启一个。网球叫弗兰诺林。这个网强弗兰诺林呢,专门去收集do克林转发出来的数据报。你可以理解为它也是一个钩子函数。强行获取我们的数据报文对吧。然后呢,这个刀零呢,会分配自己的IP到对应的po上。
08:00
到对应的po路上。那如果是,如果是我们的同一台主机的两个不同的pod之间访问的话,它走的其实是DO0的网桥。因为大家都是在同一个网条下面的两个不同的子网而已,就是子IP而已。那我凭什么不能走刀客的网站帮我转发呢?所以这是可以的。也就是在真实服务器的主机内核已经完成了支持数据化的转换,这个没有问题。难就难在怎么跨主机,还能通过对方的IP直接到达。那怎么到达呢?我们给大家走一下流程。首先我们现在假设web APP啊,想去把数据包发送到bacon。它的数据包是不是要原地址,要写自己的10.1.15.2.2的四。目标要写这里。那这个呢,因为目标对方的网段跟我不是同一个网段,这可以判断对吧。所以他要发到他的网关,这里的网关是DO0。
09:02
那到零上面会有对应的勾入函数,把这个数据包抓到我们的Fla里。这里还会有一堆的路由表记录,是从我们的etcd里去获取到,写入到我们当前的主机。判断到底路由到哪台机器。那到弗兰NO0以后,因为FLYNO0是弗兰no d的这么一个,开启这么一个。呃,望桥,所以这个数据包会到普兰诺地。到FLY诺地以后,它会对这个数据报文进行封装,怎么封装呢?看这里。有这么一个结构麦克,麦克部分。然后呢,到我们的下一层。三层,三层写的是原是1921686601。幺写的是幺二。目标写的是幺。那下一层封装是udp的数据包。也就意味着D它使用的是UDB的数据包,去转发这些数据包的。因为更快对吧。
10:00
毕竟在同一个局域网内部。再下一层,又封装了一层新的。三层信息原是10.1.15.2,目标是10.120.3。20.3。封装到这一层以后,外面封装了一个数据包实体。转发过来,原因是你的三层不是写了吗?你的目标是到幺二对吧,目标到幺二,所以呢,这个数据包肯定是能够到这里的。并且它的目标端口应该就是这里的弗兰D的端口,所以这个数据包会被弗兰D所截获。结果以后他会拆封,他知道这是干嘛的,对吧,他知道这是干嘛的,他会被拆封。拆分完了以后会转发到我们的弗兰豆灵。那兰努尼呢?会把它转换到dock里。刀灵呢加呢会被撸到来。端,并且这个是经过二次解封的,第一层的信息,我们的刀口林是看不见的,他看的是这一层信息。所以这里得到了,他一看,诶,目标是一个幺零点。
11:05
15.2的这么一个机器发过来的目标找的就是我自己的机器地址。对吧,那这样的话就可以实现我们的跨主机的。民化网络。其实这里消耗的资源还是比较高的,对吧。首先你要在这里进行数据包的二次封装,到这里还要解封。这就是我们的final。这么一个网络的通讯方案。那当然,我这里还有个远程的动态演示,我们可以过来看一下。两台不同的物理机对吧,转发到我们的网桥,到我们的真实网卡,然后再。进到我们的。的pod里。那这个呢,就是我们的D的这么一个转换机制。那接下来我们去看一下。No和我们的etcd之间有哪些关联?第一个就是。
12:02
存储管理no可分配的IP地址的网段资源。也就意味着我们的腐no在启动以后会向etcd里去插入。可以被分配的网段。并且把哪个网段分配到哪台机器了,它要记录上。防止这个已分配的网段。再被腐南龙利用,分配给其他的note节点。那这样的话,迟早有一天会出现我们所谓的IP冲突。对吧。其次,监控e dcd里每个pod的实际地址,并在内容中建立维护pod的节点路由表。为什么需要去维护炮的节点路由表?原因是我们想一下。在这里封装最上层的三层信息的时候,他要知道对方主机的地址信息。那我怎么知道你这个对吧,我怎么知道你这个抛的网段,它对应的物理阻机是1.12呢,啊是66.12呢,就是因为。通过这里的。
13:01
维护的e dcd中的pod实际地址信息的路由表去判断的。这是etcd和弗兰no之间的调用关系,需要注意一下,也就是etcd啊,其实在我们的K8S集群中,它的角色是非常非常非常非常非常重要。我说了好几个,非常值吧。所以如果要进行高可用的话,Etcd一定是我们最先要高可用的这么一个组件。它是必须要解决的。那所幸的是,ECD的官方已经给我们解决好了它的集群化,并且非常优秀的集群化。能理解我的意思吧,所以这就不需要我们去担心了,好。那接下来呢,我们再把刚才给大家讲的一些知识点给它统一一下。详细的看一遍对吧。第一个。同一个pod的内部通讯。因为共享的是同一个Linux协议站。共享都是我们的pass的这么一个基础容器的这么一个协议站,对吧,所以它使用的都是我们的low house的,或者叫回环网卡去通讯的。
14:07
没问题,这个没问题对吧。第二个炮的一到炮二访问,两个不同炮的直接访问。我们刚才已经学习过了,它会分为两种不同的情况。第一种情况就是再同一台机器。第二种情况是不在同一台机器。那在同一台机器很好理解了或很好实现了,就是由当前机器的DO0网桥直接转发请求至炮大,不需要经过我们的flano即可完成所谓的数据包送达。那我们可以看一下这里的演示对吧。直接通过我们的网桥在本期之间完成转换,非常简单,效率也非常之高。还有一种方式就是PD1和PD2不在同一台主机。那pad的地址和DO0在同一个网段。它兜零网段与主数主机的网卡是两个不同的网段。
15:03
并且不同的node通讯只能通过数组机的物理网卡进行,将pod IP和所在node IP关联起来,通过这个关联让pod可以互相访问。这里是简化版的说明,对吧,我们刚才解释起来的话,是不是没有这么简单啊,要经过很多的过程,这就是不同主题之间的访问路径。刚刚已经给大家详细解释过了,对吧,那。在这里就不。再赘述了。好,下一个。Pod至S外的网络。目前基于性能考虑,全部为IP转发和维护。嗯,这个呢,已经比较老了。最新版的,我们可以直接把它的转换模式改为。Is。也就通过iOS进行转化和维护。那这样的话性能会更高。能理解我意思吧,好。Pod到外网。Pod向外网发送请求,查找路由表,将数据包转换到数字机的网卡那。完成独有选择以后,IP tap执行MSQ,将原IP改为数集的网卡IP,向外发送请求,也就意味着如果pot里面的容器想上网。
16:10
直接通过我们的S钠的转换对吧。动态转换去完成所谓的上网行为。外网如果想访问pod内部呢?就需要通过借助到我们的service的node port方式才能去进行。所谓的。访问到集群内部。因为它虽然是一个扁平的网络,但你可别忘了,这个扁平化的网络是一个私有网络。并不能在跟物理机相连的网络内访问到它。谁要借助到我们的note进行映射?那这个呢,我们后面会详细讲解,大家现在先不要急。那这个呢,就是我们的不同情况下网络通讯的机制。要通讯的方式。那接下来我们继续往后看。在我们的K8S里,它有三层网络。
17:02
第一个叫节电网络。第二叫pod网络以及SW网络。需要注意的是。真实的物理的网络只有一个,就是节点网络。也就意味着我们在构建服务器的时候,只需要一张网卡就可以去实现,我并不是说多张网卡不行哈,一张网卡就可以实现。Po的网络呢,是一个虚拟网络,此外网络也是一个虚拟网络,需要大家注意一下。那这里我们都可以把它理解为是一个内部网络。所有的power都会在这个扁平化的网络中进行通讯。那如果想你想访问service的话,你需要在这么一个网络中去访问。呢,再去跟后端的pod进行所谓的对应的。通过IPS的。或者是通过LS的转换去达到。那当然,我们最新版都会用LYS进行所谓的。SVC的转换,这样的话效率会更高对吧。
18:02
那这是我们的一个节点的网络说明。那这章内容呢,我们讲到这里就已经结束了,对吧。让大家好好的去把我刚才在这张图里说的这么一个。数据包的转换流程,好好的在脑海中自己过一下。最好的方式就是不看我的,不看我的PPT对吧。或者是看着我的PPT,把我的注释给它去掉,自己给模拟一遍。的转换流程。那这样是学习的最好的方式。那这节课呢,我们就先讲到这里,我们下节课再见。
我来说两句