dd16eda133ba001d698471d743a58352.png

本Topic是红帽的两位软件工程师。笔者按照自己的理解和这两位同事的探讨,对演讲内容进行解读(注解仅供参考,OCP是红帽OpenShift Container Platform的简称)。

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

但随着红有云的发展,将K8S部署到异构环境中的需求越来越多。这时候不同pod之间如何通讯呢?

这种场景的应用包括但不限于下图:

30a7fcef1441c361fdbafd4a9694da2d.png

a10d96c79a9878ea0d9b1bc3f06f5733.png

我们需要考虑以上几个问题。

b307aec0094efbe3ce2e61c8a5dd52d9.png

两个K8S集群pod之间要通讯,需要考虑两个集群的统一调度、连通,除此之外,还要考虑跨集群的服务注册发现和network policy等。

51b80e32423b73cc3754c798c2d449b3.png

解决这个问题需要推动开源项目来完成。上面的几个开源项目,红帽都参与了。Submariner是解决这个问题的关键。

2ccd63abda5e13e097a28cd26c870b79.png

Submariner有两个组件:Engine(运行在网关节点)和Route Agent(运行通过daemonset的方式运行在所有的K8S节点上)。

826c31bb00281bafc7e1832bcb68d774.png

Submariner是一个开源项目,如上图所示,是为了解决跨K8S集群的pod互通的。上面的两个集群:东群和西群。没有Submariner的情况下,pod跨K8S无法互通。有了Submariner之后,在东群和西群中各推举一个网关节点。这个两个网关节点负责与broker cluster通讯,最终实现跨集群的pod通讯。如果网关节点除了问题,K8S集群可以再推举出一个。

404537a0a12a5f118ba3dc21628f1f05.png

网关节点的选举方式见上图。

de94aef6c6a296a2820bda576885224c.png

网关节点的高可用见上图。

09f0b6f04c32a88065d5a71f00d6772d.png

目前工作方式和前提条件。

5ef252ae5458bbcc4bb0bd99226c5640.png

通讯方式见上图:PodA在东群,podB在西群。网络包精通网关节点传到路由器和公有云,然后传到西群的网关节点最终到达podB。需要注意上图的虚线颜色,集群内部不加密,跨集群加密。

e62dce6e58e584934d6a25725679aa1b.png

Submariner目前尚处于Pre-Alpha阶段。后面还会增加新的功能。

那么,Submariner和联邦集群是否冲突呢?

答案是不冲突。Submariner解决的是pod跨K8S集群之间的通讯,而联邦集群解决的是跨集群的管理和调度,并不能解决pod在K8S 集群之间的通讯。因此,后续Submariner和联邦集群V2会一起工作,相互补充。

84334a6be15caa6b995492bc0aacae42.png

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐