envoyproxy/go-control-plane
GitHub: envoyproxy/go-control-plane
Envoy 官方维护的 Go 语言 xDS 控制面基础库,为构建自定义的 Envoy 配置管理服务提供 API Server 和缓存组件。
Stars: 1719 | Forks: 564
# control-plane
[](https://securityscorecards.dev/viewer/?uri=github.com/envoyproxy/go-control-plane)

[](https://goreportcard.com/report/github.com/envoyproxy/go-control-plane)
[](https://pkg.go.dev/github.com/envoyproxy/go-control-plane)
本仓库包含了一个基于 Go 的 API server 实现,该 server
实现了在
[data-plane-api](https://github.com/envoyproxy/data-plane-api) 中定义的发现服务 API。
## Proto 文件
Go proto 文件会在上游 Envoy 仓库 (https://github.com/envoyproxy/envoy) 的每次提交时进行同步。
同步是通过 `envoy-sync.yaml` 工作流触发的。
## 适用范围
由于现有平台的多样性,没有一个单一的
control plane 实现能够满足所有人的需求。因此,这个
代码库并不打算成为一个针对大规模
Envoy 代理集群的全功能 control plane。相反,它提供了可供
多个不同的 control plane 实现共享的基础设施。该
库提供的组件包括:
* _API Server:_ 一个通用的基于 gRPC 的 API server,实现了在
[data-plane-api](https://github.com/envoyproxy/data-plane-api) 中定义的 xDS API。
API server 负责将配置更新推送给
Envoy。使用者应该能够导入这个 Go 库,并在
生产环境中直接按原样使用该 API server。
* _配置缓存:_ 该库会将 Envoy 配置缓存在
内存中,以尝试对作为使用者的 Envoy 提供快速响应。
该库的使用者有责任填充缓存
并在必要时使其失效。缓存将基于预定义的
哈希函数进行键值映射,其 key 基于相应的
[Node 信息](https://github.com/envoyproxy/data-plane-api/blob/d4988844024d0bcff4bcd030552eabe3396203fa/api/base.proto#L26-L36)。
目前,本仓库不会处理将特定于平台的
资源表示(例如,服务、服务实例等)转换为
Envoy 风格配置的工作。根据使用情况和
反馈,我们可能会决定在以后的阶段重新审视这一方面。
## 要求
1. Go 1.25+
## 快速开始
建议使用 `make docker_tests` 来运行测试,因为它会在
与 CI 相同的环境中执行测试。这有助于确保生成一致的一组生成文件。
1. 构建并运行测试:
make docker_tests
2. 查看[示例 server](internal/example/README.md)。
## XDS API 版本控制
Envoy xDS API 遵循一个定义良好的[版本控制方案](https://www.envoyproxy.io/docs/envoy/latest/configuration/overview/versioning)。
### 已废弃
`V2` control-plane 代码已被移除,将不再受支持。有关支持各种 xDS 版本的早期讨论,请参见此处:
- [这里](https://docs.google.com/document/d/1ZkHpz6DwEUmAlG0kb2Mgu4iaeQC2Bbb0egMbECoNNKY/edit?ts=5e602993#heading=h.15nsmgmjaaml)
- [这里](https://envoyproxy.slack.com/archives/C7LDJTM6Z/p1582925082005300)
*注意*:如果仍然需要 `V2`,建议使用之前的 SHA。
## 资源缓存
因为 Envoy 客户端被假定为是短暂的(即可以任意来去),
所以 server 依靠配置缓存来最大限度地减少
客户端对 server 的负载。本
仓库中提供了几种缓存:
- `Simple` 缓存是一个基于快照的缓存,它为
每组代理维护一个一致的配置视图。它支持作为 ADS
server 运行,或者作为常规的解聚 xDS server 运行。在 ADS 模式下,缓存可以
保留响应,直到请求了被引用资源的完整集合
(例如,LDS 引用的整个 RDS 集合)。保留响应
能够实现对 xDS 集合的原子更新。
- `Linear` 是一种用于单一 type URL 集合的最终一致性缓存。
该缓存为缓存中的资源维护一个单一的线性版本历史记录和版本向量。
对于每个请求,它会将请求的版本与
所请求资源的最新版本进行比较,并返回任何
已更新的资源。此缓存假定资源是完全不透明的。
- `Mux` 缓存是一个简单的缓存组合器。它允许为
不同的 type URL 混合使用多个缓存,例如对 LDS/RDS/CDS 使用 simple 缓存,对 EDS 使用 linear 缓存。
## 用法
[示例 server](internal/example/README.md) 演示了如何将 go-control-plane 与您的代码集成。
标签:Envoy, EVTX分析, Go, gRPC, Python工具, Ruby工具, xDS, 控制平面, 日志审计, 服务网格