首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >构建另一种服务网格:使用SMI规范的新方法

构建另一种服务网格:使用SMI规范的新方法

作者头像
CNCF
发布2020-08-31 16:39:18
9590
发布2020-08-31 16:39:18
举报
文章被收录于专栏:CNCFCNCFCNCF

在这篇文章中,我将通过深入研究Maesh项目背后的技术细节,探究服务网格接口(Service Mesh Interface,SMI)规范的高级概念,是什么使该项目在其他项目中独一性,以及它们对SMI规范的贡献。此外,我还会介绍这个生态系统中的其他合作伙伴。对于不熟悉SMI的读者,在深入讨论技术部分之前,我将简要介绍一下该项目的历史和目标。

SMI项目简介

微软于2019年5月在KubeCon欧洲大会向全世界宣布了SMI项目。该项目的目标是为广泛采用的日常用例定义一组API抽象。在撰写本文时,该接口涵盖了访问控制策略、指标(遥测)、流量和路由(流量转移)。在2020年4月,微软慷慨地将这个项目捐赠给了CNCF沙箱,为社区提供了一个中立的家。

微软Brendan Burns在2019年3月对SMI规范做出了最初的提交,明确了项目的意图:人们应该能够使用和定义服务网格配置,而不需要紧紧绑定到任何特定的实现。项目的目标是建立一套标准规范,涵盖服务网格最广泛使用的各个方面。

该规范没有规定采用SMI API的组织必须受到约束。供应商可能构建超出SMI API范围的扩展或功能。鼓励采用者用一种与供应商无关的方法来实现他们的用例,并通过对项目的贡献来发展SMI规范。尽管这个项目还很年轻,但许多组织目前正在这样做,包括Containous以及Maesh项目。

谁参与了SMI规范?

好消息是,在实现SMI规范时,有多个提供者在不同程度上参与进来。为了更好地理解这些供应商以及他们与生态系统的关系,我将简要介绍他们是谁以及他们解决了什么问题。

服务网格实现

有一类软件通过使用SMI组定义的API直接实现SMI。每个实现都有其独特的属性。例子包括:

  • Istio:使用边车(sidecar)运行Envoy
  • Linkerd:使用自定义的边车代理实现
  • Consul Connect:利用边车代理,如Envoy和用于测试的内置代理,也支持用户定义的代理(HAproxy)
  • Maesh:使用自定义代理实现(Traefik)使用每个节点(DaemonSet)代理的方法

管理平面

虽然这些工具可能不能直接实现SMI所涵盖的功能,但它们通过采用和管理支持SMI规范的技术,在生态系统中扮演着重要的角色:

  • Weaveworks Flagger:作为Kubernetes部署的控制平面,同时支持多个服务网格实现
  • Service Mesh Hub:作为多个服务网格实现的管理平面
  • RIO:作为Linkerd的管理平面

介绍Maesh:一个更简单的服务网格

SMI规范的一个新实现是Maesh,它安装在Kubernetes集群上,并实现多个SMI API,以支持在集群上运行的服务之间进行东西通信。我们对服务网络有一个独特的看法,它提供了采用的灵活性、更低的性能开销和更少的破坏性升级。

新鲜的方法

作为团队构建Maesh的起点,实现SMI API非常有意义。API对已被广泛采用的特性提供了明确的共识,从而确保工程师不会浪费时间处理有限的用例。然后,我们能够专注于激发项目灵感的愿景,抛弃了服务网格景观中一些先前的假设。

在上面的图中,注意到明显缺乏边车代理。这是设计好的,让我们看一下。

深入了解技术领域

在深入了解Maesh中的技术细节以及如何实现无边车的服务网格之前,读者可以先了解一下本节中讨论的一些组件和配置,这可能会对你有所帮助。

  • DNS存根(DNS stubbing):这个功能是由CoreDNS暴露出来的,CoreDNS是部署在大多数Kubernetes发行版中的默认DNS提供商,它允许定义私有DNS区域,通常称为“存根域”(stub domain)
  • kube-dns:Kubernetes中的CoreDNS组件,负责处理私有(内部)DNS请求
  • kube-proxy:在每个Kubernetes节点上操作,负责负载平衡和代理内部UDP、TCP和SCTP数据包,用于服务对服务的通信

该团队决定采用一种方法,即使用DNS存根为CoreDNS打补丁,因此kube-dns将在内部解决特定于maesh的域查询。在Kubernetes中匹配标准DNS模式的请求将继续通过kube-proxy进行路由。相反,匹配存根条目的请求,service-name.local.maesh的,将通过它部署的Traefik代理进行路由。

Maesh部署的控制器处理SMI对象的接收,并配置每个Traefik代理节点(部署为DaemonSet),允许独立的pod无需任何修改即可操作。这种方法满足了最初的三个目标,不需要边车代理:

  • 确保用户可以升级服务网格而不中断
  • 减少操作的开销
  • 提供方便地选择进入或退出服务网格的灵活性

下一步

Maesh项目目前正在采用mTLS来进行东西方的安全通信,但也在为SMI项目贡献UDP通信类型规范的过程中。Containous很高兴能成为这一努力的一部分,我们也很期待看到其他SMI合作伙伴正在计划的创新。

Maesh项目是开源的,总是对贡献者开放。我们正在开发v1.4,其中包括实现一些最新的激动人心的更新,比如在流量规范中增加了HTTP头路由和流量分割。如果你想了解更多关于贡献的信息,请在任何未解决的问题向我们介绍你自己。

声明:这篇文章的作者受雇于Containous,Maesh项目的创建者和维护者。

Kevin Crawley

@notsureifkevin

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CNCF 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
服务网格
服务网格(Tencent Cloud Mesh, TCM),一致、可靠、透明的云原生应用通信网络管控基础平台。全面兼容 Istio,集成腾讯云基础设施,提供全托管服务化的支撑能力保障网格生命周期管理。IaaS 组网与监控组件开箱即用,跨集群、异构应用一致发现管理加速云原生迁移。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档