在这篇文章中,我将通过深入研究 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 (Cloud Native Computing Foundation) 成立于 2015 年 12 月,隶属于 Linux Foundation,是非营利性组织。
CNCF(云原生计算基金会)致力于培养和保护一个厂商中立的开源生态系统,来推广云原生技术。咱们通过将最前沿的模式民主化,让这些翻新为公众所用。扫描二维码关注 CNCF 微信公众号。