架构
服务网格在逻辑上,分为控制层面control plane和数据层面data plane
- 控制层面 通过智能代理envoy管理流量路由,服务运行策略执行等
- 数据层面 数据层面由一组以sidecar方式部署的智能代理envoy组成,这些代理可以调节和控制微服务以及istiod之间的所有网络通信
服务网格主要由以下组件构成:
Envoy
Istio 使用 Envoy 代理的扩展版本。Envoy 是使用 C++ 开发的高性能代理,可为服务网格中的所有服务调解所有入站和出站流量。Envoy 代理是与数据平面流量交互的唯一 Istio 组件。
Envoy 代理被部署为服务的辅助工具,通过 Envoy 的许多内置功能在逻辑上增强了服务,例如:
- 动态服务发现
- 负载均衡
- TLS终止
- HTTP / 2 和 gRPC 代理
- 断路器
- 健康检查
- 分阶段、按百分比分配流量
- 故障注入
- 丰富的指标
这种 Sidecar 部署使 Istio 可以提取大量有关流量行为的信号作为属性。Istio 可以使用这些属性来执行策略决策,并将其发送到监视系统以提供有关整个网格行为的信息。Sidecar 代理模型还允许用户将 Istio 功能添加到现有部署中,而无需重新构造或重写代码。
Envoy 代理启用的一些 Istio 功能和任务如下:
- 流量控制功能:使用丰富的路由规则对 HTTP、gRPC、WebSocket 和 TCP 流量实施细粒度的流量控制。
- 网络弹性功能:设置重试、故障转移、断路器和故障注入。
- 安全和身份验证功能:实施安全策略并实施通过配置 API 定义的访问控制和速率限制。
- 基于 WebAssembly 的可插入扩展模型,允许自定义策略实施和网状流量的遥测生成。
istiod
- Istiod 提供服务发现,配置和证书管理。
- Istiod 将控制流量行为的高级路由规则转换为 Envoy 特定的配置,并在运行时将其传播到 Sidecar。Pilot 提取了特定于平台的服务发现机制,并将它们合成为标准格式,任何符合 Envoy API 的 Sidecar 都可以使用。
- Istio 可以支持针对多个环境(例如 Kubernetes,Consul 或 VM)的服务发现。
- 用户可以使用 Istio 的流量管理 API 来指示 Istiod 改进 Envoy 配置,以对服务网格中的流量进行更精细的控制。
- Istiod 安全性通过内置的身份和凭据管理实现了强大的服务到服务和最终用户身份验证。用户可以使用 Istio 升级服务网格中的未加密流量。使用 Istio,用户可以基于服务身份而不是相对不稳定的第 3 层或第 4 层网络标识符来实施策略。从版本 0.5 开始,用户可以使用 Istio 的授权功能来控制谁可以访问您的服务。
- Istiod 维护一个 CA 并生成证书以允许在数据平面中进行安全的 mTLS 通信。
运维
Istio 的 Listener,Route,Cluster 和 Endpoint 与 Envoy 中的概念类似。
- Cluster:在 Envoy 中,Cluster 是一个服务集群,Cluster 中包含一个到多个 Endpoint,每个 Endpoint 都可以提供服务,Envoy 根据负载均衡算法将请求发送到这些 Endpoint 中。Cluster 分为 Inbound 和 Outbound 两种,前者对应 Envoy 所在节点上的服务;后者占了绝大多数,对应 Envoy 所在节点的外部服务。可以使用如下方式分别查看 Inbound 和 Outbound 的 Cluster:
- Listeners:Envoy 采用 Listener 来接收并处理 Downstream 发过来的请求。
- Routes:配置 Envoy 的路由规则。Istio 下发的缺省路由规则中对每个端口(服务)设置了一个路由规则,根据 Host 来对请求进行路由分发,Routes 的目的为其他服务的 Cluster
- Endpoint:Cluster 对应的后端服务,可以通过 Istio Pc Endpoint 查看 Inbound 和 Outbound 对应的 Endpoint 信息
调试Envoy 和 Istiod
istio 提供了两个非常有价值的命令来帮助诊断流量管理配置相关的问题,Proxy-status 和 Proxy-config 命令。
Proxy-status 命令容许您获取网格的概况,并识别出导致问题的代理。
Proxy-config 可以被用于检查 Envoy 配置和诊断问题。
获取网格概况
Proxy-status 命令容许您获取网格的概况。如果您怀疑某一个 Sidecar 没有接收到配置或配置不同步时,Proxy-status 将告诉您原因。
如果列表中缺少代理,这意味着它目前没有连接到 Istiod 实例,因此不会接收任何配置。
- SYNCED 意思是 Envoy 知晓了 Istiod 已经将最新的配置发送给了它。
- NOT SENT 意思是 Istiod 没有发送任何信息给 Envoy, 这通常是因为 Istiod 没什么可发送的。
- STALE 意思是 Istiod 已经发送了一个更新到 Envoy,但还没有收到应答。这通常意味着 Envoy 和 Istiod 之间存在网络问题,或者 Istio 自身的 Bug。
所有评论(0)