EdgeMesh主要用来做边缘侧微服务的互访。

ServiceMesh

service mesh是一个服务网格的概念。在传统的架构里面都是通过像Dubbo来进行服务治理,服务治理的程序和我们应用程序强耦合在一起,对程序升级和运维带来很多麻烦。service mesh通过sidecar来使我们的治理能力独立,上图中绿色和蓝色是一个业务单元,绿色是我们的应用,蓝色是专门负责服务治理的程序,比如在Istio中就是envoy。应用的流量出来先导入envoy里面,在envoy里面可以配置服务访问的策略,就可以访问到对应的服务。

带来的好处就是应用程序无感知。

EdgeMesh

EdgeMesh架构

EdgeMesh在EdgeCore里面也是一个独立的Moudul,负责边缘侧流量的转发,已经把CNI的东西做好了,支持跨节点流量转发。APP的流量出来一个会导入到EdgeMesh里面,EdgeMesh里面有Listener负责监听;Resolver负责域名解析,它里面实现了一个DNS server;Dispatcher负责转发流量。RuleMgr作用是把endpoint、service、pod的信息通过MetaManager从数据库里取出来。

为什么域名解析会放到边缘?我们知道在原生k8s里面,域名解析是放在coreDNS活kubeDNS里面的做的,一般部署在master或一个单点生。这样会有一个问题:边缘和云的链接会经常断开,在这种情况下,域名解析服务就不能用了,因此需要把域名解析放到边缘,而不应该在master里面去解析,这时就需要把云上的service、endpoint、pod信息都同步到边缘。(后续会做一个优化,不获取全量信息,只把有效信息同步过来)

目前的设计主要致力于边和边的服务互访,云和边还有点问题,如果云和边要传一个数据还是推荐使用其他的数据通道。未来会做的工作是使用标准的istio进行服务治理控制,现在支持的是云上k8s的api,以后会考虑把istio集成进来,基于istio那一套规则来做。

目前边边的节点是在同一子网,本身就是互通的,未来考虑跨子网通信,可以通过cloudhub或者某一个中心点去转。(这一块也是我们实验室目前在做的事情,我们思路是通过在边缘动态配置一个envoy来统一接收需要代理的边缘节点服务的入口和出口流量,相当于把envoy配置成网关形式)

EdgeMesh转发流程

client pod是请求方,service pod是服务方。client pod里面有一个init container,类似于istio的init container。client先把流量打入到init container,init container这边会做一个流量劫持,它会把流量转到edge mesh里面去,edge mesh根据需要进行域名解析后转到对应节点的pod里面去。

这里有一个优化的点是:init container现在在每一个client pod里面都有一个,而它的功能作用在每一个pod里面都是一样的,后续会考虑把init container接耦出来。

EdgeMesh配置方式

当我们配置一个init container的时候,它就会拦截应用的请求数据,转发到EdgeMesh里面。

KubeEdge EdgeMesh设计原理的更多相关文章

  1. KubeEdge云边协同设计原理

    云端组件CloudCore与k8s Master的关系 从黑盒角度看,CloudCore就是k8s的一个插件,它是非侵入的来扩展k8s的一部分功能,将原来云上的节点映射到边缘端进行管理,一个Cloud ...

  2. Atitit ati licenseService    设计原理

    Atitit ati licenseService    设计原理 C:\0workspace\AtiPlatf\src_atibrow\com\attilax\license\LicenseX.ja ...

  3. kafka入门:简介、使用场景、设计原理、主要配置及集群搭建(转)

    问题导读: 1.zookeeper在kafka的作用是什么? 2.kafka中几乎不允许对消息进行"随机读写"的原因是什么? 3.kafka集群consumer和producer状 ...

  4. html5设计原理(转)

    转自:   http://www.cn-cuckoo.com/2010/10/21/the-design-of-html5-2151.html 今天我想跟大家谈一谈HTML5的设计.主要分两个方面:一 ...

  5. 学习HTML5必读之《HTML5设计原理》

    引子:很久前看过的一遍受益匪浅的文章,今天再次转过来,希望对学习HTML5的朋友有所帮助. 今天我想跟大家谈一谈HTML5的设计.主要分两个方面:一方面,当然了,就是HTML5.我可以站在这儿只讲HT ...

  6. 分布式文件系统FastDFS设计原理

    原文地址: http://blog.chinaunix.net/uid-20196318-id-4058561.html FastDFS是一个开源的轻量级分布式文件系统,由跟踪服务器(tracker ...

  7. ApplicationContext容器的设计原理

    1.在ApplicationContext容器中,我们以常用的FileSystemXmlApplicationContext的实现为例来说明ApplicationContext容器的设计原理. 2.在 ...

  8. BeanFactory容器的设计原理

    XmlBeanFactory设计的类继承关系 1.BeanFactory接口提供了使用IoC容器的规范.在这个基础上,Spring还提供了符合这个IoC容器接口的一系列容器的实现供开发人员使用. 2. ...

  9. Spring技术内幕——深入解析Spring架构与设计原理(一)IOC实现原理

    IOC的基础 下面我们从IOC/AOP开始,它们是Spring平台实现的核心部分:虽然,我们一开始大多只是在这个层面上,做一些配置和外部特性的使用工作,但对这两个核心模块工作原理和运作机制的理解,对深 ...

随机推荐

  1. 小程序 & taro 踩坑指南

    小程序 & taro 踩坑指南 微信开发者工具, 不支持 react bug https://github.com/NervJS/taro/issues/5042 solution just ...

  2. 创建gitHub账户并配置秘钥

    1. 登录注册地址 https://github.com/ 2.点击注册 Sign up 3.输入邮箱 密码 进行注册 4.注册成功后,登录邮箱验证 .然后通过邮箱和密码登录gitHub.设置 set ...

  3. [转]自动驾驶平台Apollo 2.5环境搭建

    原文地址:https://blog.csdn.net/jinzhuojun/article/details/80210180,转载主要方便随时查阅,如有版权要求,请及时联系. 我们知道,自动驾驶在学界 ...

  4. 1063 Set Similarity——PAT甲级

    1063 Set Similarity Given two sets of integers, the similarity of the sets is defined to be Nc/Nt*10 ...

  5. 谈一下HashMap的底层原理是什么?

    底层原理:Map + 无序 + 键唯一 + 哈希表 (数组+Entry)+ 存取值 1.HashMap是Map接口的实现类.实现HashMap对数据的操作,允许有一个null键,多个null值. Co ...

  6. vue之provide和inject跨组件传递属性值失败(父组件向子组件传值的两种方式)

    简单介绍:当一个子组件需要用到父组件的父组件的某些参数.那么这个时候为了避免组件重复传参,使用vue的依赖注入是个不错的方法,直接在最外层组件设置一个provide,内部不管多少嵌套都可以直接取到最外 ...

  7. Go中的if-else判断

    目录 go中的if-else判断 一.语法 go中的if-else判断 一.语法 if 条件 { //符合上面条件的执行 } else if 条件{ //符合上面条件的执行 } else { // 不 ...

  8. 低功耗蓝牙 ATT/GATT/Service/Characteristic 规格解读

    什么是蓝牙service和characteristic?如何理解蓝牙profile? ATT和GATT两者如何区分?什么是attribute? attribute和characteristic的区别是 ...

  9. 后端程序员之路 20、python复习

    Welcome to Python.orghttps://www.python.org/ 怎么用最短时间高效而踏实地学习 Python? - 知乎https://www.zhihu.com/quest ...

  10. mysql添加远程连接权限

    查看登录用户 mysql> select host,user,password from user; 想用本地IP登录,那么可以将以上的Host值改为自己的Ip即可. 这里有多个root,对应着 ...