简介 istiod:简化控制平面

istiod 将 Istio 控制平面组件整合到单个二进制文件中。

2020 年 3 月 19 日 | 作者:Craig Box - Google

当微服务将服务映射到交付它们的独立团队,或者独立部署和独立扩展的价值大于编排成本时,微服务模式非常有用。我们定期与在现实世界中运行 Istio 的客户和团队进行交流,他们告诉我们,对于 Istio 控制平面来说,这些情况都不存在。因此,在 Istio 1.5 中,我们改变了 Istio 的打包方式,将控制平面功能整合到名为 istiod 的单个二进制文件中。

Istio 控制平面的历史

Istio 实现了一种多年来在 Google 和 IBM 都使用的模式,后来被称为“服务网格”。通过将客户端和服务器进程与代理服务器配对,它们充当应用程序感知的 数据平面,不仅仅是在主机之间移动数据包,或者在电线上传输脉冲。

这种模式帮助世界理解 微服务:通过轻量级协议连接的细粒度、松散耦合的服务。像 HTTP 和 gRPC 这样的通用跨平台和跨语言标准取代了专有传输,以及所需库的广泛存在,使不同的团队能够使用最适合的语言编写整体架构的不同部分。此外,每个服务可以根据需要独立扩展。对为这种网络实现安全、可观察性和流量控制的渴望推动了 Istio 的普及。

Istio 的 控制平面 本身就是一个现代的、云原生应用程序。因此,它从一开始就被设计为一组微服务。Istio 的各个组件,如服务发现(Pilot)、配置(Galley)、证书生成(Citadel)和可扩展性(Mixer)都是作为独立的微服务编写和部署的。这些组件需要安全地进行通信和可观察性,为 Istio 提供了“吃自己的狗粮”(或使用更法语的比喻,“喝自己的香槟”!)的机会。

复杂性的代价

优秀的团队会回顾自己的选择,并在事后诸葛亮的情况下重新审视它们。通常,当团队采用微服务及其固有的复杂性时,他们会寻求其他方面的改进,以证明这些权衡的合理性。让我们从这个角度来看待 Istio 控制平面。

整合的好处:介绍 istiod

既然已经确定微服务的一些常见好处不适用于 Istio 控制平面,我们决定将它们统一到单个二进制文件中:istiod('d' 代表 守护进程)。

让我们看看新包装的好处

istiod 将 Pilot、Galley、Citadel 和 sidecar 注入器以前执行的功能统一到单个二进制文件中。

一个单独的组件,istio-agent,通过将配置和机密安全地传递给 Envoy 代理,帮助每个 sidecar 连接到网格。虽然代理严格意义上仍然是控制平面的一部分,但它在每个 Pod 的基础上运行。我们通过将以前作为 DaemonSet 运行的每个节点功能滚动到每个 Pod 代理中,进一步简化了操作。

专家补充

仍然有一些情况,您可能希望独立运行 Istio 组件,或替换某些组件。

有些用户可能希望在网格之外使用证书颁发机构 (CA),我们有 关于如何执行此操作的文档。如果您使用不同的工具进行证书配置,我们可以使用该工具而不是内置的 CA。

展望未来

istiod 的核心只是一个打包和优化更改。它基于与独立组件相同的代码和 API 合同,并继续受到我们全面的测试套件的覆盖。这让我们有信心在 Istio 1.5 中将其设为默认值。该服务现在称为 istiod - 您将在升级过程完成后看到用于现有代理的 istio-pilot

虽然迁移到 istiod 看起来是一个很大的变化,并且对管理维护网格的人来说是一个巨大的改进,但它不会改变使用 Istio 的日常工作。istiod 不会更改用于配置网格的任何 API,因此您现有的流程将保持不变。

这种变化是否意味着微服务对于所有工作负载和架构来说都是错误的?当然不是。它们是工具箱中的工具,并且在反映您的组织现实时效果最佳。相反,这种变化表明该项目愿意根据用户反馈进行更改,并继续专注于简化所有用户的操作。微服务必须适度,我们相信我们已经找到了 Istio 的适当规模。

分享这篇文章