专栏首页CNCF构建另一种服务网格:使用SMI规范的新方法

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

在这篇文章中,我将通过深入研究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

本文分享自微信公众号 - CNCF(lf_cncf),作者:SMI

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-08-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用了 Service Mesh 后我还需要 API 网关吗?

    如文章标题所示,本文通过对 Service Mesh 技术和 API 网关的对比,着重分析了两者的功能重合点和分歧点,解答了开发者的困惑,为如何进行技术选型和落...

    CNCF
  • Linkerd和服务网格接口(SMI)

    本周早些时候,微软在Kubecon欧洲发布了服务网格接口(Service Mesh Interface,SMI)。SMI是一个规范,它完全通过Kubernete...

    CNCF
  • 围观 KubeCon China 2020 之服务网格

    由CNCF与全球开源志愿者共同发起的“Cloud Native + Open Source Virtual Summit China 2020中国线上峰会”(...

    CNCF
  • 资源 | 一个基于PyTorch的目标检测工具箱,商汤联合港中文开源mmdetection

    项目地址:https://github.com/open-mmlab/mmdetection

    机器之心
  • 献给即将35岁的初学者,焦虑 or 出路?

    一直以来,都有许多人说“程序员或测试员是个吃青春饭的职业”,甚至还有说“35 岁混不到管理就等于失业”的言论。

    测试开发技术
  • CI/CD 最佳实践的基本原则

    持续集成和持续部署(CI/CD)是许多组织使用的敏捷方法。它正在帮助这些组织有效、安全地发行软件。

    深度学习与Python
  • RFC2581 TCP拥塞控制

    苦叶子
  • 分布式链路追踪 SkyWalking 源码分析 —— Agent DictionaryManager 字典管理

    摘要: 原创出处 http://www.iocoder.cn/SkyWalking/agent-dictionary/ 「芋道源码」欢迎转载,保留摘要,谢谢!

    芋道源码
  • 理解Neutron (9): Neutron FWaaS 和 Nova 安全组

    特别说明:本文于2015年基于OpenStack M版本发表于本人博客,现转发到公众号。因为时间关系,本文部分内容可能已过时甚至不正确,请注意。

    SammyLiu
  • C#开发BIMFACE系列8 服务端API之获取文件上传状态信息

    在BIMFACE控制台上传文件,上传过程及结束后它会自动告诉你文件的上传状态,目前有三种状态:uploading,success,failure。即上传中、上传...

    张传宁老师

扫码关注云+社区

领取腾讯云代金券