开源项目 Envoy 使用教程
1. 项目的目录结构及介绍
Envoy 项目的目录结构如下:
envoy/
├── .github/
├── api/
├── ci/
├── docs/
├── examples/
├── generated/
├── source/
├── test/
├── tools/
├── BUILD
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── WORKSPACE
目录介绍
- .github/: GitHub 配置文件和模板。
- api/: Envoy 的 API 定义文件。
- ci/: 持续集成配置文件。
- docs/: 项目文档。
- examples/: 示例配置和使用案例。
- generated/: 生成的代码文件。
- source/: 源代码文件。
- test/: 测试代码文件。
- tools/: 开发工具和脚本。
- BUILD: Bazel 构建文件。
- CONTRIBUTING.md: 贡献指南。
- LICENSE: 项目许可证。
- README.md: 项目介绍和使用说明。
- WORKSPACE: Bazel 工作区文件。
2. 项目的启动文件介绍
Envoy 的启动文件位于 source/exe/main.cc
。这个文件包含了 Envoy 的主函数入口,负责初始化和启动 Envoy 进程。
// source/exe/main.cc
int main(int argc, char** argv) {
// 初始化 Envoy
Envoy::MainCommon main_common(argc, argv);
// 启动 Envoy
return main_common.run();
}
3. 项目的配置文件介绍
Envoy 的配置文件通常是一个 YAML 文件,用于定义 Envoy 的运行时行为和网络配置。配置文件的示例可以在 examples/
目录中找到。
配置文件示例
node:
id: node_1
cluster: cluster_1
static_resources:
listeners:
- name: listener_0
address:
socket_address: { address: 0.0.0.0, port_value: 10000 }
filter_chains:
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: ingress_http
route_config:
name: local_route
virtual_hosts:
- name: local_service
domains: ["*"]
routes:
- match: { prefix: "/" }
route: { cluster: service_foo }
http_filters:
- name: envoy.filters.http.router
clusters:
- name: service_foo
connect_timeout: 0.25s
type: LOGICAL_DNS
lb_policy: ROUND_ROBIN
load_assignment:
cluster_name: service_foo
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address: { address: foo.example.com, port_value: 80 }
配置文件说明
- node: 定义节点信息。
- static_resources: 定义静态资源,包括监听器和集群。
- listeners: 定义监听器,包括地址和过滤链。
- clusters: 定义集群,包括连接超时、负载均衡策略和端点。
以上是 Envoy 项目的目录结构、启动文件和配置文件的介绍。希望这份教程能帮助你更好地理解和使用 Envoy 项目。