关于服务网格

服务网格为工作负荷提供流量管理、复原能力、策略、安全性、强标识和可观测性等功能。 应用程序与这些操作功能相分离,服务网格将这些功能移出应用层并移到基础结构层。

方案

下面是使用服务网格时可为工作负荷实现的方案:

  • 加密群集中的所有流量 - 在群集中的指定服务之间启用相互 TLS。 这可以扩展到外围网络中的入口和出口。 为应用程序代码和基础结构提供安全的默认选项,且无需进行任何更改。

  • Canary 和分阶段推出 - 指定将一部分流量路由到群集中的一组新服务所要满足的条件。 成功测试 Canary 发布后,删除条件性路由,并分阶段逐渐增加路由到新服务的所有流量的百分比。 最终,所有流量都会定向到新服务。

  • 流量管理和操作 - 针对服务创建一个策略,用于限制将所有流量从特定来源路由到某个服务版本的速率。 或创建一个策略用于对指定服务之间的故障类应用重试策略。 在迁移或调试问题期间将实时流量镜像到新的服务版本。 在测试环境中的服务之间注入故障以测试复原能力。

  • 可观测性 - 通过分析服务之间的流量洞察服务的连接方式。 获取群集中所有流量以及入口/出口的指标、日志和跟踪。 将分布式跟踪功能添加到应用程序。

体系结构

服务网格通常由控制平面和数据平面构成。

控制平面 具有许多为服务网格的管理提供支持的组件。 这些组件通常包括一个管理界面(UI 或 API)。 通常,还有一个组件管理规则和策略定义(定义服务网格应如何实现特定的功能)。 还有一些组件管理安全性的各个方面,例如 mTLS 的强标识和证书。 服务网格通常还包含指标或可观测性组件,该组件从工作负荷收集和聚合指标与遥测数据。

数据平面 通常包括一个代理,该代理以透明方式作为分支注入到工作负荷。 此代理配置为控制进出包含工作负荷的 pod 的所有网络流量。 这样,就可以将代理配置为通过 mTLS 保护流量、动态路由流量、对流量应用策略,以及收集指标和跟踪信息。

典型的服务网格体系结构

功能

每个服务网格原生适合并专注于支持特定的方案,但你通常会发现,大多数服务网格实现下面的许多(但不是全部)功能。

流量管理

  • 协议 - 第7层(http、grpc)
  • 动态路由 - 条件、加权、镜像
  • 复原能力 - 超时、重试、断路器
  • 策略 - 访问控制、速率限制、配额
  • 测试 - 故障注入

安全

  • 加密 - mTLS、证书管理、外部 CA
  • 强标识 - SPIFFE 或类似功能
  • 身份验证 - 身份验证、授权

可观察性

  • 指标 - 黄金指标、prometheus、grafana
  • 跟踪 - 跨工作负荷跟踪
  • 流量 - 群集、入口/出口

网格

  • 支持的计算 - Kubernetes、虚拟机
  • 多群集 - 网关、联合

选择条件

在选择服务网格之前,请确保了解安装服务网格的要求和理由。 尝试提出以下问题。

  • 入口控制器是否足以满足我的需求? - 有时,在入口位置使用 a/b 测试或流量拆分等功能就足以支持所需的方案。 不要无谓地增大环境的复杂性。

  • 我的工作负荷和环境是否可容忍额外的开销? - 用于支持服务网格的所有附加组件都需要增加 CPU 和内存等资源。 此外,所有代理及其关联的策略检查会增大流量延迟。 如果工作负荷对延迟非常敏感或者无法提供额外的资源来满足服务网格组件的需求,请再三考虑。

  • 这是否会不必要地增大复杂性? - 如果安装服务网格的理由是获取某种对于业务团队或运营团队而言不一定重要的功能,请考虑是否值得增大安装、维护和配置的复杂性。

  • 是否能够以递进的方式采用此服务网格? - 某些提供多种功能的服务网格能够以更递进的方式采用。 安装所需的组件即可确保成功。 随着使用越来越熟练或者需要更多的功能,可以探索这些功能。 避免从一开始就迫不急待地安装所有组件。

如果在经过仔细的考虑后,你确定需要使用服务网格来提供所需的功能,则下一个决策是“要使用哪个服务网格?”

请考虑以下几个方面,以及哪种描述与要求最相符。 这可以引导你找出最适合环境和工作负荷的解决方案。 后续步骤部分提供了进一步详细介绍具体的服务网格及其如何映射到这些方面的链接。

  • 技术 - 流量管理、策略、安全性、可观测性

  • 商务 - 商业支持、基金会 (CNCF)、OSS 许可证、监管

  • 操作 - 安装/升级、资源要求、性能要求、集成(指标、遥测、仪表板、工具、SMI)、混合工作负荷(Linux 和 Windows 节点池)、计算(Kubernetes、虚拟机)、多群集

  • 安全性 - 身份验证、标识、证书管理和轮换、可插接式外部 CA

后续步骤

以下文档提供了有关可在 Azure Kubernetes 服务 (AKS) 中试用的服务网格的详细信息:

你还可能想要了解服务网格接口 (SMI) - 适用于 Kubernetes 中的服务网格的标准接口: