服务网格详解:开源网格如何简化微服务通信
微服务架构开发中,DevOps 团队需配置许多独立组件。微服务协同工作需要建立通信通道共享信息和传输数据。
管理和监控服务间通信的一种方式是使用服务网格。
什么是服务网格?
服务网格 是添加到微服务架构的专用基础设施层。其主要角色是确保快速安全的服务间通信。这个低延迟工具管理和监控服务间通信和数据共享。
它由控制平面组成,开发者从中向网络层实施特定规则和策略。控制平面直接与数据平面协作,数据平面是运行在服务旁的 Sidecar 代理集合。这些代理负责服务间所有通信。此外,它们监控并提供整体应用性能宝贵洞察,帮助发现潜在问题避免停机。

代理提供宝贵能力,包括:
- 动态服务发现
- 负载均衡
- 健康检查
- 加密
- 可观测性
- 熔断器
- 基于百分比流量分割的分阶段发布
- 认证
- 丰富指标
- 授权
服务网格架构兴起
要充分理解服务网格如何工作,需探究为何开发此类工具。服务网格架构兴起源于解决微服务相关诸多问题。
许多开发团队从开发单体应用转向微服务架构。这将应用从单体单元分为协同工作的独立服务系统。应用由多自治服务组成,各有独立功能。
开发此类应用困难在于配置这些服务互通的最佳方式。应用性能依赖服务协作共享数据提供最佳用户体验。例如,网店可包含登录服务与购买服务通信,后者需库存数据库信息等。
微服务通过 API 通信,找到解决发现和路由最佳方案很重要。此外,开发者需确保系统内通信安全。防火墙保护应用免外部攻击,但微服务架构内部是扁平开放网络。
网格服务架构前,此任务由负载均衡器处理。但大规模下非实用方案,因部署和成本问题。服务网格作为上述所有问题终极解决方案开发而来。它呈现带中心化注册表(控制平面)的网络层,用 Sidecar 代理管理所有服务。代理比负载均衡器更易配置和扩缩。开发者可按需扩缩代理、修改路由规则而不修改服务。
服务网格效益
服务网格最显著效益:
- 安全性提升 —— 将服务网格引入微服务架构改善整体安全。此网络层引入自动授权、认证、加密和策略执行。使用双向传输层安全 (mTLS)确保所有服务间通信安全。服务用 TLS 证书标识建立连接。验证身份后建立加密通道共享数据。
- 流量控制与可见性 —— 服务网格主要功能之一提供流量控制。管理东西向流量及服务间流量。所有通信通过 Sidecar 代理,由控制平面管理。流量透明路由,给开发者更好数据交换可见性。对应用性能更清晰洞察,更易发现系统潜在问题。
- 可观测性 —— 平台管理所有流量,收集流量行为和用户交互宝贵洞察。有大量数据,业务分析师可规划改进应用策略。
- 开发者专注应用开发而非网络 —— 开发团队无需搭建管理整个网络层,可将服务网格引入架构。平台虽需初始配置,但自动化网络管理耗时任务。这让开发者专注微服务。让服务网格管理服务间交互节省时间金钱、提升生产力。
- 弹性 —— 服务网格提供功能帮助创建弹性微服务应用。熔断器模式帮助检测故障和延迟峰值。此外服务网格用负载均衡做服务发现和跨微服务网络路由流量。重试、超时、截止期限等功能增强弹性。
- 更快测试和部署周期 —— 用 Sidecar 代理做 Pod 间通信设置更简单快捷。不用将冗余功能编码进每个服务,部署代理连接服务。这加速整体开发测试周期。
开源服务网格列表
有多个开源服务网格可用。Istio、Linkerd、Consul 最广泛使用。
以下是各平台更多详情。
Istio
Istio 是 Google、IBM、Lyft 设计的开源基础设施。最早服务网格平台之一。使用Istiod,由多组件(Pilot、Citadel、Mixer)组成的控制平面操作配置服务网格。数据平面由Envoy代理组成,用C++开发。HTTP/TCP 连接由Gateway(Istio 负载均衡器)管理。VirtualService和DestinationRules定义路由规则和策略。

Linkerd
Linkerd 是轻量级开源服务网格,由云原生计算基金会 (CNCF) 项目开发。无额外配置即可在任何平台 Kubernetes 集群上简单安装。无配置在小集群有益。但大规模项目需配置可能性成功管理集群所有服务。
Sidecar 代理用Rust编写。Linkerd 用Controller做控制平面、Web Deployment做仪表板。此外利用 Prometheus 探索存储指标、Grafana 渲染显示仪表板。

Consul Connect
Consul 最初设计为服务发现工具,后演进为服务网格。不同于 Linkerd,Consul Connect 包含大量配置,给予网络环境更多控制。因此比 Linkerd 难用。此开源服务网格平台无关,不要求 Kubernetes 或 Nomad。但Nomad简化通过 Consul 管理微服务通信过程。

Microsoft Open Service Mesh
Open Service Mesh (OSM) 是CNCF Envoy 项目,实现服务网格接口管理和保护动态微服务应用。使用Envoy xDS做 Sidecar 容器。主要功能含流量转移、证书管理、启用 mTLS、自动 Sidecar 注入、访问控制策略。
Kuma
Kuma 是 Kubernetes 和 VMs 运行中服务网格的开源控制平面。有L4+L7 策略架构实现服务发现、路由、零信任安全和可观测性。平台高度可扩展且易设置。
OpenShift Service Mesh Red Hat
Red Hat 开发 OpenShift Service Mesh 管理微服务应用。提供多网络接口、用Security Context Constraint增强安全。用Jager测性能、用Kiali观测服务间交互。此外 OpenShift 包含Red Hat 3scale Istio Mixer Adapter强化 API 安全。
AWS App Mesh
Amazon 开发 App Mesh,免费服务网格软件管理微服务架构内所有服务。提供高可用性和微服务应用端到端可见性。AWS App Mesh 集成AWS Fargate、Amazon ECS、Amazon EC2、Amazon EKS、Kubernetes、AWS Outposts。监控工具自动导出监控数据。
Network Service Mesh
Network Service Mesh 是开源CNCF Sandbox 项目。是混合/多云 IP 服务网格,用简单 API 集促进连通性。建立容器内运行服务与外部端点连接。实现时需最小 Kubernetes 变更。
总结
服务网格简化微服务架构应用的管理维护。改善微服务架构整体安全,确保流量流可见性和可观测性。总体上,服务网格功能增强性能、加速开发周期。有多种开源方案可用,找最适合应用需求的一款。
云计算