Istio+K8s,微服务的双剑合璧( 三 )


Sidecar 是一种单节点多容器的应用设计形式,主张以额外的容器来扩展或增强主容器 。
②Envoy 的作用是什么?
Envoy 是一个独立的进程,旨在与每个应用程序服务器一起运行 。
所有 Envoy组成了一个透明的通信网格,其中每个应用程序发送和接收来自本地主机的消息,并且不需要知道网络拓扑 。
与传统的服务通信服务的库方法相比,进程外架构有两个实质性好处:

  • Envoy 支持任何编程语言写的服务 。只用部署一个 Envoy 就可以在 JAVA、C++、Go、php、Python 等服务间形成网格 。
  • 任何使用过大型面向服务的体系结构的人都知道,部署库升级可能会非常痛苦 。Envoy 可以在整个基础设施中迅速部署和升级 。
Envoy 以透明的方式弥合了面向服务的体系结构使用多个应用程序框架和语言的情况 。
③Mixer
Mixer 是一个独立于平台的组件,负责在服务网格上执行访问控制和使用策略,并从 Envoy 代理和其他服务收集遥测数据,代理提取请求级属性,发送到 Mixer 进行评估 。有关属性提取和策略评估的更多信息,请参见 Mixer 配置 。
Mixer 中包括一个灵活的插件模型,使其能够接入到各种主机环境和基础设施后端,从这些细节中抽象出 Envoy 代理和 Istio 管理的服务 。
④Pilot
控制面中负责流量管理的组件为 Pilot,它为 Envoy Sidecar 提供服务发现功能,为智能路由(例如 A/B 测试、金丝雀部署等)和弹性(超时、重试、熔断器等)提供流量管理功能 。
它将控制流量行为的高级路由规则转换为特定于 Envoy 的配置,并在运行时将它们传播到 Sidecar 。
⑤Istio 如何保证服务通信的安全?
Istio 以可扩缩的方式管理微服务间通信的身份验证、授权和加密 。Istio 提供基础的安全通信渠道,使开发者可以专注于应用层级的安全 。
Istio 可以增强微服务及其通信(包括服务到服务和最终用户到服务的通信)的安全性,且不需要更改服务代码 。
它为每个服务提供基于角色的强大身份机制,以实现跨集群、跨云端的互操作性 。
如果我们结合使用 Istio 与 Kubernetes(或基础架构)网络政策,Pod 到 Pod 或者服务到服务的通信在网络层和应用层都将安全无虞 。
Istio 以 google 的深度防御策略为基础构建而成,以确保微服务通信的安全 。
当我们在 Google Cloud 中使用 Istio 时,Google 的基础架构可让我们构建真正安全的应用部署 。
Istio 可确保服务通信在默认情况下是安全的,并且我们可以跨不同协议和运行时一致地实施安全政策,而只需对应用稍作调整,甚至无需调整 。
Envoy 进阶Istio 使用 Envoy 代理的扩展版本,Envoy 是以 C++ 开发的高性能代理,用于调解服务网格中所有服务的所有入站和出站流量 。
Envoy 的许多内置功能被 Istio 发扬光大,例如:
  • 动态服务发现
  • 负载均衡
  • TLS 终止
  • HTTP2 & gRPC 代理
  • 熔断器
  • 健康检查、基于百分比流量拆分的灰度发布
  • 故障注入
  • 丰富的度量指标
Envoy 分为主线程、工作线程、文件刷新线程,其中主线程就是负责工作线程和文件刷新线程的管理和调度 。
而工作线程主要负责监听、过滤和转发,工作线程里面会包含一个监听器,如果收到一个请求之后会通过过滤链来进行数据过滤 。
前面两个都是非阻塞的,唯一一个阻塞的是这种 IO 操作的,会不断地把内存里面一些缓存进行落盘 。
【Istio+K8s,微服务的双剑合璧】总结来说,我们可以围绕如下五方面:
①服务的动态注册和发现
Envoy 可以选择使用一组分层的动态配置 API 来进行集中管理 。
这些层为 Envoy 提供了动态更新,后端群集的主机、后端群集本身、HTTP 路由、侦听套接字和通信加密 。
为了实现更简单的部署,后端主机发现可以通过 DNS 解析 (甚至完全跳过) 完成,层也可以替换为静态配置文件 。
②健康检查
构建 Envoy 网格的建议方法是将服务发现视为最终一致的过程 。Envoy 包括一个运行状况检查子系统,该子系统可以选择对上游服务集群执行主动运行状况检查 。
然后,Envoy 使用服务发现和运行状况检查信息的联合来确定健康的负载均衡服务器 。Envoy 还支持通过异常检测子系统进行被动运行状况检查 。
③高级负载均衡
分布式系统中不同组件之间的负载平衡是一个复杂的问题 。
由于 Envoy 是一个独立的代理而不是库,因此它能够在一个位置实现高级负载平衡技术,并使任何应用程序都可以访问 。


推荐阅读