从.net开发做到云原生运维(七)——服务网格Istio
1. 前言
上篇文章我们讲了dapr,dapr作为开发阶段使用的组件,需要开发人员知道怎么使用,到此篇文章之前,开发人员的开发任务已经完成了,剩下的就是一些运维相关的事情了。假设我们的服务已经开发完成,也已经完成了镜像的构建和部署文件的编写,那我们就可以领略下服务网格的魅力了。
2. 什么是服务网格(Service Mesh)
服务网格为工作负荷提供流量管理、复原能力、策略、安全性、强标识和可观测性等功能。 应用程序与这些操作功能相分离,服务网格将这些功能移出应用层并移到基础结构层。
对于什么是服务网格大家可以根据网上的一些资料和我给的文章链接进行学习阅读。这里就不展开了。
3. 不得不说的Istio
服务网格作为服务间通信的基础设施层有很多种实现,市面上比较流行的有以下一些。
作为服务网格的火热程度最高的Isito,我们肯定要着重讲讲了。
Istio 核心特性
我个人在实际中主要用到了Isito的流量管理和安全。
Istio 服务网格从逻辑上分为数据平面和控制平面。
- 数据平面 由一组智能代理(Envoy)组成,被部署为 Sidecar。这些代理负责协调和控制微服务之间的所有网络通信。它们还收集和报告所有网格流量的遥测数据。
- 控制平面 管理并配置代理来进行流量路由。
下图展示了组成每个平面的不同组件:
组件
以下各节概述了 Istio 的每个核心组件。
Envoy
Istio 使用 Envoy 代理的扩展版本。Envoy 是用 C++ 开发的高性能代理,用于协调服务网格中所有服务的入站和出站流量。Envoy 代理是唯一与数据平面流量交互的 Istio 组件。
Envoy 代理被部署为服务的 Sidecar,在逻辑上为服务增加了 Envoy 的许多内置特性,例如:
- 动态服务发现
- 负载均衡
- TLS 终端
- HTTP/2 与 gRPC 代理
- 熔断器
- 健康检查
- 基于百分比流量分割的分阶段发布
- 故障注入
- 丰富的指标
这种 Sidecar 部署允许 Istio 可以执行策略决策,并提取丰富的遥测数据,接着将这些数据发送到监视系统以提供有关整个网格行为的信息。
Sidecar 代理模型还允许您向现有的部署添加 Istio 功能,而不需要重新设计架构或重写代码。
由 Envoy 代理启用的一些 Istio 的功能和任务包括:
- 流量控制功能:通过丰富的 HTTP、gRPC、WebSocket 和 TCP 流量路由规则来执行细粒度的流量控制。
- 网络弹性特性:重试设置、故障转移、熔断器和故障注入。
- 安全性和身份认证特性:执行安全性策略,并强制实行通过配置 API 定义的访问控制和速率限制。
- 基于 WebAssembly 的可插拔扩展模型,允许通过自定义策略执行和生成网格流量的遥测。
Istiod
Istiod 提供服务发现、配置和证书管理。
Istiod 将控制流量行为的高级路由规则转换为 Envoy 特定的配置,并在运行时将其传播给 Sidecar。Pilot 提取了特定平台的服务发现机制,并将其综合为一种标准格式,任何符合 Envoy API 的 Sidecar 都可以使用。
Istio 可以支持发现多种环境,如 Kubernetes 或 VM。
您可以使用 Istio 流量管理 API 让 Istiod 重新构造 Envoy 的配置,以便对服务网格中的流量进行更精细的控制。
Istiod 安全通过内置的身份和凭证管理,实现了强大的服务对服务和终端用户认证。您可以使用 Istio 来升级服务网格中未加密的流量。使用 Istio,运营商可以基于服务身份而不是相对不稳定的第 3 层或第 4 层网络标识符来执行策略。此外,您可以使用 Istio 的授权功能控制谁可以访问您的服务。
Istiod 充当证书授权(CA),并生成证书以允许在数据平面中进行安全的 mTLS 通信。
4. Isito的实际应用
既然讲到了这么多的Isito,我们肯定也要说说Istio结合Dapr做些使用场景的介绍。
我以eShop on Dapr的项目为例,讲下改进的地方。
上图为官方仓库里的架构图。
下图是我基于Isito和Dapr改进后的架构图。
- K8s的Ingress分发简单请求
- 前端调用认证服务获取凭证
- Istio的Envoy边车可以做到基于pod标签拦截请求并提供Jwt token认证中间件,认证通过可以将token内容转发到后端服务,结合丰富的授权策略,可以将认证授权这部分代码从项目中抽离出来。
- 请求到达服务,通过Dapr提供的能力就可以做服务调用或者状态读写等操作。
这只是Istio的一部分能力,Istio还可以通过一些配置进行蓝绿部署,金丝雀发布,流量镜像等功能,这个可以参考官方的Bookinfo 应用教程进行学习。
云原生的学习,大家可以参考以下网站学习。