![dd16eda133ba001d698471d743a58352.png](https://img-blog.csdnimg.cn/img_convert/dd16eda133ba001d698471d743a58352.png)
本Topic是红帽的两位软件工程师。笔者按照自己的理解和这两位同事的探讨,对演讲内容进行解读(注解仅供参考,OCP是红帽OpenShift Container Platform的简称)。
![38591f322a0733cf8be6a2fccd45ad77.png](https://img-blog.csdnimg.cn/img_convert/38591f322a0733cf8be6a2fccd45ad77.png)
OCP3中,每个pod只能有一个IP地址,OCP4可以配置多个(有了CNI)。不同service之间的pod内部通讯,通过service访问。如果pod要访问外部网络,需要通过NAT的方式,用node的ip出去。如果OCP内部的service要访问外部应用,可以配置service endpoint(为外部的应用在OCP集群配置service)。
但是跨K8S集群的Pod是无法直接通讯的。如果K8S部署在异构云上,更是如此。
![92338202ddad17646bf42612f069ebd1.png](https://img-blog.csdnimg.cn/img_convert/92338202ddad17646bf42612f069ebd1.png)
但随着红有云的发展,将K8S部署到异构环境中的需求越来越多。这时候不同pod之间如何通讯呢?
这种场景的应用包括但不限于下图:
![30a7fcef1441c361fdbafd4a9694da2d.png](https://img-blog.csdnimg.cn/img_convert/30a7fcef1441c361fdbafd4a9694da2d.png)
![a10d96c79a9878ea0d9b1bc3f06f5733.png](https://img-blog.csdnimg.cn/img_convert/a10d96c79a9878ea0d9b1bc3f06f5733.png)
我们需要考虑以上几个问题。
![b307aec0094efbe3ce2e61c8a5dd52d9.png](https://img-blog.csdnimg.cn/img_convert/b307aec0094efbe3ce2e61c8a5dd52d9.png)
两个K8S集群pod之间要通讯,需要考虑两个集群的统一调度、连通,除此之外,还要考虑跨集群的服务注册发现和network policy等。
![51b80e32423b73cc3754c798c2d449b3.png](https://img-blog.csdnimg.cn/img_convert/51b80e32423b73cc3754c798c2d449b3.png)
解决这个问题需要推动开源项目来完成。上面的几个开源项目,红帽都参与了。Submariner是解决这个问题的关键。
![2ccd63abda5e13e097a28cd26c870b79.png](https://img-blog.csdnimg.cn/img_convert/2ccd63abda5e13e097a28cd26c870b79.png)
Submariner有两个组件:Engine(运行在网关节点)和Route Agent(运行通过daemonset的方式运行在所有的K8S节点上)。
![826c31bb00281bafc7e1832bcb68d774.png](https://img-blog.csdnimg.cn/img_convert/826c31bb00281bafc7e1832bcb68d774.png)
Submariner是一个开源项目,如上图所示,是为了解决跨K8S集群的pod互通的。上面的两个集群:东群和西群。没有Submariner的情况下,pod跨K8S无法互通。有了Submariner之后,在东群和西群中各推举一个网关节点。这个两个网关节点负责与broker cluster通讯,最终实现跨集群的pod通讯。如果网关节点除了问题,K8S集群可以再推举出一个。
![404537a0a12a5f118ba3dc21628f1f05.png](https://img-blog.csdnimg.cn/img_convert/404537a0a12a5f118ba3dc21628f1f05.png)
网关节点的选举方式见上图。
![de94aef6c6a296a2820bda576885224c.png](https://img-blog.csdnimg.cn/img_convert/de94aef6c6a296a2820bda576885224c.png)
网关节点的高可用见上图。
![09f0b6f04c32a88065d5a71f00d6772d.png](https://img-blog.csdnimg.cn/img_convert/09f0b6f04c32a88065d5a71f00d6772d.png)
目前工作方式和前提条件。
![5ef252ae5458bbcc4bb0bd99226c5640.png](https://img-blog.csdnimg.cn/img_convert/5ef252ae5458bbcc4bb0bd99226c5640.png)
通讯方式见上图:PodA在东群,podB在西群。网络包精通网关节点传到路由器和公有云,然后传到西群的网关节点最终到达podB。需要注意上图的虚线颜色,集群内部不加密,跨集群加密。
![e62dce6e58e584934d6a25725679aa1b.png](https://img-blog.csdnimg.cn/img_convert/e62dce6e58e584934d6a25725679aa1b.png)
Submariner目前尚处于Pre-Alpha阶段。后面还会增加新的功能。
那么,Submariner和联邦集群是否冲突呢?
答案是不冲突。Submariner解决的是pod跨K8S集群之间的通讯,而联邦集群解决的是跨集群的管理和调度,并不能解决pod在K8S 集群之间的通讯。因此,后续Submariner和联邦集群V2会一起工作,相互补充。
![84334a6be15caa6b995492bc0aacae42.png](https://img-blog.csdnimg.cn/img_convert/84334a6be15caa6b995492bc0aacae42.png)