了解服务网格

学习目标

  • 概述服务网格的核心概念

  • 分解服务网格的核心优势

  • 说明服务网格在 Kubernetes 中如何工作

  • 简要描述服务网格的架构

服务网格:使用场景

视频:本节含 SAP 官方视频(视频 ID 1_1k5sqcae),需在 learning.sap.com 在线观看。

你的应用基于若干微服务。这些微服务在集群内部相互通信。你希望保护微服务之间的通信。你听说服务网格可以很好地完成这项任务。

什么是服务网格?

云原生应用通常被拆分为若干相互通信的分布式微服务。服务网格是一个处理服务之间通信的基础设施层,它与应用层解耦。由于应用层是独立的,应用无需实现诸如服务发现或安全性之类的标准功能。借助服务网格,这些任务可以从服务中转移到服务网格层。这样,网络功能就与应用逻辑解耦了。这一点也很重要,因为不同的团队可以用不同的语言编写微服务。指望每个团队都实现服务发现或安全性之类的标准功能是不现实的。

随着你的解决方案不断增长,微服务的数量也在增加。这导致服务之间的通信复杂度更高。诸如安全性、负载均衡和服务发现之类的需求变得愈发重要。服务网格可以帮助你解决这些问题。它可以保护微服务之间的通信,并提供负载均衡、服务发现或追踪等附加功能。

服务网格的优势

服务网格可以为你的解决方案提供多项优势。它们可以归为以下几类:

  • Security(安全性):服务网格可以提供安全功能,例如使用双向 TLS(mTLS)的服务间安全通信、请求身份验证等。

  • Observability(可观测性):服务网格可以提供追踪、日志记录和指标等功能。这些功能可以帮助你了解解决方案的行为。

  • Traffic Management(流量管理):流量管理让你可以控制服务之间的流量流向。

  • Resilience(弹性):服务网格可以提供熔断、超时和重试等功能。这些功能可以帮助你提高解决方案的弹性。例如,你可以定义当第一次尝试失败时,Envoy 代理应多长时间重试一次连接或请求。

让我们更仔细地看看这些优势:

安全性

在集群中使用服务网格,可以开箱即用地保护微服务之间的通信,而无需自行实现双向 TLS(mTLS)或加密等安全功能。服务网格会处理这些。作为另一项安全优势,边车代理(sidecar proxy)提供了为你的服务验证请求的能力。

可观测性

所有服务请求都会经过服务网格层。服务网格可以收集所有请求,并提供追踪、日志记录和指标等附加功能。这可以帮助你了解解决方案的行为以及请求是如何被处理的。

流量管理

借助流量管理,你可以控制服务之间的流量流向。你可以使用该功能来实现金丝雀发布、A/B 测试以及其他流程,使软件发布更可靠、更快捷。

Kubernetes 中的服务网格

对于 Kubernetes,有多种可用的服务网格解决方案。其中最流行的服务网格解决方案之一是 Istio 服务网格

通常,服务网格解决方案使用边车代理模式。代理作为边车容器部署在每个服务旁边。因此,一个服务的 Pod 至少包含服务容器和边车代理容器。

边车代理容器促进服务与服务网格之间的通信。它负责服务的业务逻辑。此外,如果你为 Pod 打上相应的标签,边车代理容器可以自动注入到该 Pod 中。在 Kyma 项目中,边车注入可以在命名空间级别或 Deployment 级别启用。如果启用,那么包含在相应标记的命名空间或 Deployment 中的每个 Pod 都会自动注入边车代理容器。

服务网格架构

服务网格通常由两个主要组件构成:控制平面和数据平面。

控制平面负责管理和配置代理以路由流量。

数据平面代表服务之间的通信。服务网络使用代理来转发进出服务网络中服务的所有入站和出站流量。它还负责集群的入站(ingress)和出站(egress)流量。

该图展示了一个服务网格架构,其中有两个 Pod,每个 Pod 包含一个容器和一个代理边车。数据平面处理边车之间的通信,而控制平面管理整个网格。

总结

服务网格是一个管理服务通信的基础设施层,将这项任务与应用层解耦。随着微服务数量的增长,服务网格有助于管理日益复杂的服务间通信。它提供多项优势,例如双向 TLS、请求身份验证、可观测性信号采集、流量管理等。在 Kubernetes 中,像 Istio 这样的服务网格使用边车代理模式。

延伸阅读

  • Istio Service Mesh