将虚拟机更轻松地添加到 Istio 服务网格

通过简化虚拟机加入体验来降低复杂性。

2021 年 12 月 20 日 | 作者:Nick Nellis - Solo.io

Virtual Machine Traffic Flow

加入虚拟机的一些复杂性源于服务网格提供的众多功能。但是,如果您只需要其中的一部分功能呢?例如,从您的虚拟机到服务网格中运行的服务的安全通信。只要进行一些权衡,您就可以为您的虚拟机提供服务网格功能,而无需所有开销。

本地开发怎么样?随着越来越多的微服务部署到 Kubernetes,以及您的依赖关系图变得像蜘蛛网一样,本地开发变得越来越困难。如果本地机器可以简单地加入服务网格并调用网格应用程序会怎样。此解决方案可以通过不需要开发人员等待他们的代码部署来节省时间和金钱。

降低复杂性

Virtual Machine Istio Installation

如今,将虚拟机添加到您的 Istio 服务网格涉及很多 移动部分。您必须创建一个 Kubernetes 服务帐户、Istio 工作负载条目,然后在加入单个虚拟机之前生成配置。在自动执行此操作方面也存在复杂性,特别是对于自动扩展虚拟机而言。最后,您需要将 Istiod 暴露给您的集群外部。

添加虚拟机的复杂性来自对虚拟机应在服务网格中 100% 参与的期望。对于许多人来说,这不是必需的,通过查看您系统的实际需求,您也许可以简化虚拟机加入过程,并仍然获得您需要的功能。

那么,哪些用例可以满足,但仍然让虚拟机更容易与服务网格协同工作呢?

单向流量

有时,虚拟机只需要安全地与服务网格中的应用程序通信。当将基于虚拟机的应用程序迁移到 Kubernetes 时,情况经常如此,其他虚拟机可能依赖于这些应用程序。使用下面描述的方法,您仍然可以实现这一点,而无需上面提到的所有操作开销。

Single Direction Traffic Flow

开发人员访问服务网格

工程师通常没有资源来运行其环境所需的所有微服务。以下方法解释了如何以与虚拟机安全地与网格应用程序通信相同的方式实现这一点。

Local Machine Service Mesh

解耦 Envoy 和 Istio

与虚拟机相关的最大复杂性是将 envoy 连接到 istiod 以获取其配置。更简单的方法是完全不再连接它们。即使 Istio 不再知道在网格中通信的虚拟机,该通信仍然可以是安全且经过身份验证的。诀窍是向虚拟机颁发自己的工作负载证书,这些证书与网格工作负载在相同的信任链中。这也意味着最终用户将负责在虚拟机上手动配置 envoy。对于大多数人来说,这应该不是问题,因为预计它不会经常更改。

更简单的加入体验

Virtual Machine Traffic Flow

我们可以通过利用一些内置的 Istio 功能来实现更简单的设置。首先,我们需要为网格外部的应用程序与网格内部的应用程序通信提供一个安全隧道。

为此,我们只需创建一个 Istio东西向网关并启用AUTO_PASSTHROUGH。这会自动配置东西向网关,以通过 mTLS 将流量传递到正确的服务。这为您的虚拟机提供了与它试图访问的应用程序的端到端身份验证加密。

Virtual Machine On-boarding Steps

由于配置 envoy 与 istiod 通信的复杂性,直接配置虚拟机 envoy 更为实用。乍一看,这听起来很艰巨,但由于复杂性降低,我们只需要启用一些功能来使其工作。Envoy 需要配置为了解虚拟机需要与之通信的每个服务网格应用程序。然后,我们将这些配置为 envoy 中的集群,并将其设置为使用通过服务网格中的东西向网关进行的 mTLS 通信。其次,需要公开一个监听器来处理来自虚拟机应用程序的传入流量。最后,需要为每个虚拟机颁发证书,这些证书与服务网格应用程序共享相同的信任根。这允许端到端加密以及授权虚拟机可以与之通信的应用程序的能力。

更容易自动化

鉴于在加入虚拟机时,服务网格集群上不需要进行任何初始化,因此自动化要容易得多。虚拟机 envoy 所需的配置可以添加到您的管道中;envoy 容器可以通过 docker 拉取,或添加到您的镜像构建基础设施中;mTLS 证书也可以由第三方(如 HashiCorp 的 Vault)进行配置和维护。

更多运行时支持

由于这种安装方法不需要访问底层的操作系统网络。您可以在更多类型的环境中运行这种方法,包括 Windows 和 Docker。唯一的要求是您的 Envoy 包含在 此处 找到的 Istio 扩展。使用 Docker,您现在可以在本地机器上运行 Envoy 代理,并直接与服务网格通信。

Runtime Support

高级用例

gRPC 到 JSON

此技术还可以用来使虚拟机应用程序与 gRPC 应用程序通信,而无需实现 gRPC 端点。使用 envoy 的 gRPC/JSON 转换,虚拟机应用程序可以通过 REST 与其本地 envoy 通信,envoy 会将其转换为 gRPC。

gRPC to JSON Transformation

多向

即使您的服务网格可能不知道与之通信的虚拟机,您仍然可以使用服务条目将它们添加为外部端点。该服务条目可以是管理流量到多个虚拟机的 HTTPS 负载均衡器端点。这种设置通常仍然比将虚拟机完全加入虚拟网格更可行。

Multi Direction Traffic Flow

转发代理

也许在每个虚拟机上安装 envoy 仍然过于复杂。另一种方法是在自己的虚拟机上运行 envoy(或自动扩展组),并充当网格中的转发代理。这是一种访问网格服务更简单的解决方案,因为运行应用程序的虚拟机保持不变。

Forwarding Proxy

第 2 部分…

在第 2 部分中,我将解释如何配置 Istio 以及虚拟机以在网格中通信。如果您想预览,请随时联系 nick.nellis@solo.io

特别感谢

特别感谢 Dave Ortiz 为我们提供了虚拟机创意,并祝贺 Constant Contact 成为新的注册 Istio 用户!

分享这篇文章