Istio 架构概览
Istio 是一个开放平台,用于在微服务之间提供统一的集成方式、管理微服务间的流量、执行策略并聚合遥测数据。它主要由以下几个组件组成:
- Envoy:作为每个微服务的 Sidecar 代理,处理集群内服务间以及服务与外部服务之间的进出流量。
- Istiod:Istio 的控制平面,提供服务发现、配置和证书管理。
- Pilot:负责运行时配置代理。
- Citadel:负责证书的发行和轮换。
- Galley:负责验证、摄取、聚合、转换和分发 Istio 配置。
- Operator:提供用户友好的选项来操作 Istio 服务网格。
Istio is composed of these components:
- **Envoy** - Sidecar proxies per microservice to handle ingress/egress traffic
between services in the cluster and from a service to external
services. The proxies form a _secure microservice mesh_ providing a rich
set of functions like discovery, rich layer-7 routing, circuit breakers,
policy enforcement and telemetry recording/reporting
functions.
> Note: The service mesh is not an overlay network. It
> simplifies and enhances how microservices in an application talk to each
> other over the network provided by the underlying platform.
- **Istiod** - The Istio control plane. It provides service discovery, configuration and certificate management. It consists of the following sub-components:
- **Pilot** - Responsible for configuring the proxies at runtime.
- **Citadel** - Responsible for certificate issuance and rotation.
- **Galley** - Responsible for validating, ingesting, aggregating, transforming and distributing config within Istio.
- **Operator** - The component provides user friendly options to operate the Istio service mesh.
Istio 关键功能
Istio Pilot
Pilot 的主要职责是动态配置代理(Envoy sidecars 和 ingress 等)。它通过以下几个步骤实现:
- 配置摄取:从 Kubernetes、文件或通过 xDS 读取不同的资源,并将它们聚合以构建代理配置。
- 配置转换:将聚合的数据转换为代理可以理解的配置。
- 配置服务:通过双向 gRPC 流接受代理客户端的连接,并为它们提供所需的配置。
## Proxy Configuration
Istiod's primary role - and most code - is to dynamically configure proxies (Envoy sidecars and ingress, gRPC, ztunnel, and more). This roughly consists of 3 parts:
1. Config ingestion (inputs to the system)
1. Config translation
1. Config serving (XDS)
Istio Agent
Istio agent 作为 Istiod 和 Envoy 之间的中间代理,主要负责以下功能:
- 工作负载证书分发:Envoy 通过 SDS 请求向 agent 请求证书,agent 向 CA 提交 CSR。
- 配置分发:Envoy 通过 ADS 请求向 agent 请求配置,agent 将请求转发给 Istiod。
At a high level, the Istio agent acts as an intermediate proxy between Istiod and Envoy. This is done
at two levels. For distributing workload certificates, Envoy will send [SDS](https://www.envoyproxy.io/docs/envoy/latest/configuration/security/secret)
requests to the agent, causing the agent to submit a CSR to the configured CA (generally Istiod). For other configuration,
Envoy will send [ADS](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/operations/dynamic_configuration#aggregated-xds-ads)
requests to the agent, which will be forwarded to the configured discovery server (general Istiod).
对 Istio 的理解
Istio 通过其控制平面和数据平面的设计,提供了一个强大的服务网格解决方案,使得微服务之间的通信更加安全、可控和高效。通过 Envoy 代理的使用,Istio 能够在运行时动态地管理和配置微服务之间的交互,而无需修改应用程序的代码。此外,Istio 的设计还考虑了易用性和可操作性,通过提供 Istio Operator 和丰富的配置管理功能,简化了服务网格的部署和管理过程。
Istio 组件划分与架构
Istio 主要由以下几个组件组成,每个组件负责不同的功能,组织在不同的文件夹中:
1. Envoy
- 组件名称: Envoy
- 功能: 处理微服务之间的进出流量。
- 文件夹名称: [proxy](file:///d%3A/PythonProj/istio-master/README.md#89%2C81-89%2C81)
2. Istiod
- 组件名称: Istiod
- 功能: Istio 的控制平面,负责服务发现、配置和证书管理。
- 子组件:
- Pilot: 动态配置代理。
- Citadel: 证书发行和轮换。
- Galley: 配置的验证和分发。
- 文件夹名称: [pilot](file:///d%3A/PythonProj/istio-master/README.md#85%2C8-85%2C8), [security](file:///d%3A/PythonProj/istio-master/README.md#91%2C8-91%2C8)
3. Operator
- 组件名称: Operator
- 功能: 提供用户友好的选项来操作 Istio 服务网格。
- 文件夹名称: [operator](file:///d%3A/PythonProj/istio-master/README.md#82%2C8-82%2C8)
4. Istioctl
- 组件名称: Istioctl
- 功能: 命令行工具,用于管理 Istio 服务网格。
- 文件夹名称: [istioctl](file:///d%3A/PythonProj/istio-master/README.md#79%2C8-79%2C8)
5. Addons
- 组件名称: Addons
- 功能: 提供与 Istio 集成的附加服务,如 Prometheus 和 Grafana。
- 文件夹名称: [samples/addons](file:///d%3A/PythonProj/istio-master/samples/addons/README.md#15%2C18-15%2C18)
组件架构图
以下是 Istio 的组件架构图,展示了各个组件如何相互作用:
+----------------+ +---------+ +----------+
| Envoy | | Istiod | | Operator |
| (Data Plane) +--->+ (Control +--->+ |
| | | Plane) | | |
+----------------+ +----+-----+ +----------+
|
v
+-----+------+
| Istioctl |
| |
+------------+
每个组件都在 Istio 的 GitHub 仓库中有对应的文件夹,可以在这些文件夹中找到相关的代码和文档。
在 Istio API GitHub 仓库 中,您可以找到 Istio 项目的 API 定义和常见配置格式。这些定义使用 protobuf 语法指定,涵盖了 Istio 的各个组件级 API 和配置。
主要内容和功能
- API 定义:包括网络、安全、遥测等多个方面的 API 定义。
- 配置格式:定义了如何配置 Istio 的各种资源,如网关、虚拟服务等。
- 生成代码:通过运行
make gen
命令生成相应的 Go、Python 代码和 Kubernetes 自定义资源定义文件。 - 向后兼容性:对于向后不兼容的更改,通过
buf breaking
测试来阻止,确保 API 的稳定性。
文件结构
仓库中包含多个目录,每个目录针对不同的 API 部分,例如:
networking
:包含与网络相关的 API 定义。security
:包含与安全相关的 API 定义。telemetry
:包含与遥测相关的 API 定义。
使用和贡献
- 更新 API:更新 protobuf 定义后,需要生成相应的代码文件并在同一个 PR 中提交。
- 贡献指南:所有对 API 的更改必须符合仓库的 API 指南。
这个仓库是 Istio 项目的核心部分,为 Istio 的配置和扩展提供了基础。如果您是开发者或者对 Istio 的内部工作机制感兴趣,这个仓库是一个宝贵的资源。