ljzsdut
GitHubToggle Dark/Light/Auto modeToggle Dark/Light/Auto modeToggle Dark/Light/Auto modeBack to homepage

00 Istio入门

istioctl

istioctl是istio的一个命令行管理工具,类似k8s的kubectl工具。

安装

直接拷贝二进制文件即可。

https://github.com/istio/istio/releases/tag/1.5.2

curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.5.2 TARGET_ARCH=x86_64 sh -
#bash
source tools/istioctl.bash

#zsh
source tools/_istioctl

istio

安装

istio可以使用istioctl进行安装,也可以使用helm进行。

istio可以安装不同的profile,代表不同的功能集合。

下面使用profile=demo使用istioctl进行:

istioctl manifest apply --set profile=demo  #prod建议使用profile=default,减少不必要的组件,提供性能

查看profile列表:

istioctl profile list

安装完成后,所有组件会安装在istio-system名称空间中。

卸载

istioctl manefest generate --set profile=demo |kubectl delete -f -

TcVc5a-1605452016275

Envoy

Istio 使用 Envoy 代理的扩展版本。Envoy 是用 C++ 开发的高性能代理,用于协调服务网格中所有服务的入站和出站流量。Envoy代理是唯一与数据平面流量交互的 Istio 组件。

Envoy代理中有2个进程:pilot-agent、envoy

Envoy 代理被部署为服务的 sidecar,在逻辑上为服务增加了 Envoy 的许多内置特性,例如:

  • 动态服务发现
  • 负载均衡
  • TLS 终端
  • HTTP/2 与 gRPC 代理
  • 熔断器
  • 健康检查
  • 基于百分比流量分割的分阶段发布
  • 故障注入
  • 丰富的指标

这种 sidecar 部署允许 Istio 提取大量关于流量行为的信号作为属性。Istio 可以使用这些属性来实施策略决策,并将其发送到监视系统以提供有关整个网格行为的信息。

sidecar 代理模型还允许您向现有的部署添加 Istio 功能,而不需要重新设计架构或重写代码。您可以在设计目标中读到更多关于为什么我们选择这种方法的信息。

由 Envoy 代理启用的一些 Istio 的功能和任务包括:

  • 流量控制功能:通过丰富的 HTTP、gRPC、WebSocket 和 TCP 流量路由规则来执行细粒度的流量控制。
  • 网络弹性特性:重试设置、故障转移、熔断器和故障注入。
  • 安全性和身份验证特性:执行安全性策略以及通过配置 API 定义的访问控制和速率限制。
  • 基于 WebAssembly 的可插拔扩展模型,允许通过自定义策略实施和生成网格流量的遥测。

sidecar如何捕获服务流量

详细文档:https://jimmysong.io/blog/envoy-sidecar-injection-in-istio-service-mesh-deep-dive/

业务服务的pod注入istio后,会在pod定义中添加一个initContainer和一个sidecar容器。

1、initcontainer:通过iptables规则捕获流量,让 Envoy 代理可以拦截所有的进出 Pod 的流量,即将入站流量重定向到 Sidecar,再拦截应用容器的出站流量经过 Sidecar 处理后再出站。(可以通过initcontainer容器的日志查看具体的iptables规则)

2、envoy中的pilot-agent作为sidecar容器中PID=1的进程进行会与pilot服务端进行通信,获取并生成envoy的启动配置;

3、pilot-agent启动envoy进程,通过监听多个不同的端口,处理不同的请求。(所以整个pod中除了原来的服务监听端口,又增加了几个其他的端口)

4、pilot-agent会监控并管理envoy的运行情况,比如envoy出错是负责重启,envoy配置变更后重新加载等。

Pilot

Pilot 为 Envoy sidecar 提供服务发现、用于智能路由的流量管理功能(例如,A/B 测试、金丝雀发布等)以及弹性功能(超时、重试、熔断器等)。

Pilot 将控制流量行为的高级路由规则转换为特定于环境的配置,并在运行时将它们传播到 sidecar。Pilot 将特定于平台的服务发现机制抽象出来,并将它们合成为任何符合 Envoy API 的 sidecar 都可以使用的标准格式。

bwOoB7-1605487033720

下图展示了平台适配器和 Envoy 代理如何交互。

KCwWCi-1605453189326

  1. 平台启动一个服务的新实例,该实例通知其平台适配器。
  2. 平台适配器使用 Pilot 抽象模型注册实例。
  3. Pilot将流量规则和配置派发给 Envoy 代理,来传达此次更改。

这种松耦合允许 Istio 在 Kubernetes、Consul 或 Nomad 等多种环境中运行,同时维护相同的 operator 接口来进行流量管理。

您可以使用 Istio 的流量管理 API 来指示 Pilot 优化 Envoy 配置,以便对服务网格中的流量进行更细粒度地控制。

Citadel

Citadel 通过内置的身份和证书管理,可以支持强大的服务到服务以及最终用户的身份验证。您可以使用 Citadel 来升级服务网格中的未加密流量。使用 Citadel,operator 可以执行基于服务身份的策略,而不是相对不稳定的 3 层或 4 层网络标识。从 0.5 版开始,您可以使用 Istio 的授权特性来控制谁可以访问您的服务。

Galley

Galley 是 Istio 的配置验证、提取、处理和分发组件。它负责将其余的 Istio 组件与从底层平台(例如 Kubernetes)获取用户配置的细节隔离开来。

参考文档

https://www.cnblogs.com/charlieroro/category/1761080.html