K8s吸取了前辈们的精华,除了平台外部访问App,还新增考虑了平台内部,App之间如何互相访问。
即K8s通过增加一个负载均衡的“LB”设备,来搞定平台内部的App间互相访问。给每个App取个别名,在LB上面登记一下,就可以被内部其他App访问。
由上图所示,可以看到,平台内部访问,一般都是水平画的,所以也叫做东西流量。一个完整的PaaS平台,就是需要南北流量+东西流量,全套治理的。
3.3 Docker原生访问方式还记得唐老师的《Docker网络实现》章节吧,Docker容器可以通过“节点IP+节点Port”的方式访问到容器。原理的容器所在节点,设置了NAT规则。报文一到达节点,根据目的端口,转发进入容器。
3.4 小结:K8s中3种访问容器的通道(1)通过南北流量(从集群外部访问App)访问App容器
(2) 通过东西流量(集群内App之间)访问App容器
(3) 通过Docker原生自带的方式,访问App容器
下一章节,我们简单介绍下每种方式,K8s分别怎么去实现的。
四、K8s怎么实现容器访问虽然K8s上面,有多种访问App容器的方法。但是不管用什么方式访问,一个App想要能被访问,就得得到K8s的同意。K8s把这个许可证叫做“Service”:也就是不管什么南北流量、东西流量,你的App想要能被访问,就得先申请Service许可证。
4.1 南北流量要实现一个App的访问通道,一定要2个东西:(1)LB负载均衡器 + (2)注册映射关系。
映射关系就是:报文来了,应该转发给哪个App实例? 即:找到 “哪个App + 哪个实例”。
负载均衡器呢,一般大家爱用Nginx,不过也有其他类型的实现。
K8s比CF聪明的地方是,没有自己去实现LB。而只定义了App需要怎么样才能登记到LB上面。即只定规范,不限制实现(这种思路,在k8s里面好多,比如存储的CSI,运行时的CRI的,容器网络的CNI 都是这样。)
Ø 4层LB
最简单的4层LB实现,K8s取了个名字:LoadBalancer(1)。
即定义:xx协议+xx端口 =》xx应用,具体规则自己去看资料。
Ø 7层LB
为了定义7层LB的规则,K8s给规范取了名字:Ingress(2)。
即定义:xx网址+xx-URL路径 =》xx应用,具体规则也自己看K8s资料。
南北LB都是全局级的,即:全局一个(HA多实例,咱也当一个整体)就行;不需要每个Slaver节点上一个。
4.2 东西流量东西流量,也一样,需要LB+规则注入。这里,K8s设计就比较有意思。