Istio 服务网格从逻辑上分为数据平面和控制平面。git
下图展现了组成每一个平面的不一样组件:github
Istio 中的流量分为数据平面流量和控制平面流量。api
Istio 使用 Envoy 代理的扩展版本。Envoy 是用 C++ 开发的高性能代理,用于协调服务网格中全部服务的入站和出站流量。Envoy 代理是惟一与数据平面流量交互的 Istio 组件。安全
Envoy 代理被部署为服务的 sidecar,在逻辑上为服务增长了 Envoy 的许多内置特性,例如:网络
这种 sidecar 部署容许 Istio 提取大量关于流量行为的信号做为属性。Istio 可使用这些属性来实施策略决策,并将其发送到监视系统以提供有关整个网格行为的信息。架构
由 Envoy 代理启用的一些 Istio 的功能和任务包括:负载均衡
Pilot
为 Envoy sidecar 提供服务发现、用于智能路由的流量管理功能(例如,A/B 测试、金丝雀发布等)以及弹性功能(超时、重试、熔断器等)。ide
Pilot
将控制流量行为的高级路由规则转换为特定于环境的配置,并在运行时将它们传播到 sidecar。Pilot 将特定于平台的服务发现机制抽象出来,并将它们合成为任何符合 Envoy API 的 sidecar 均可以使用的标准格式。微服务
下图展现了平台适配器和 Envoy 代理如何交互。性能
Pilot
抽象模型注册实例。Pilot
将流量规则和配置派发给 Envoy
代理,来传达这次更改。Citadel
经过内置的身份和证书管理,能够支持强大的服务到服务以及最终用户的身份验证。您可使用 Citadel 来升级服务网格中的未加密流量。使用 Citadel
operator 能够执行基于服务身份的策略。
Galley
是 Istio 的配置验证、提取、处理和分发组件。它负责将其他的 Istio 组件与从底层平台(例如 Kubernetes)获取用户配置的细节隔离开来。
您能够将单个网格配置为包括多集群。多集群部署可为您提供更大程度的隔离和可用性,但会增长复杂性。 若是您的系统具备高可用性要求,则可能须要集群跨多个可用区和地域。 对于应用变动或新的版本,您能够在一个集群中配置金丝雀发布,这有助于把对用户的影响降到最低。 此外,若是某个集群有问题,您能够暂时将流量路由到附近的集群,直到解决该问题为止。
Istio 负载测试 网格包含了 1000 个服务和 2000 个 sidecar,全网格范围内,QPS 为 70,000。 在使用 Istio 1.6 运行测试后,咱们获得了以下结果:
istio-telemetry
服务使用了 0.6 vCPU。https://preliminary.istio.io/docs/ops/deployment/architecture/
https://preliminary.istio.io/zh/docs/ops/deployment/architecture/
https://preliminary.istio.io/zh/docs/ops/deployment/deployment-models/
https://preliminary.istio.io/docs/ops/deployment/performance-and-scalability/
https://preliminary.istio.io/docs/ops/deployment/requirements/