Envoy 项目使用教程
1. 项目的目录结构及介绍
Envoy 项目的目录结构如下:
envoy/
├── ci
├── docs
├── examples
├── bazel
├── source
│ ├── common
│ ├── server
│ ├── extensions
│ └── ...
├── test
├── tools
└── ...
ci
: 包含持续集成相关的配置文件。docs
: 包含项目的文档,如官方文档、FAQ、博客等。examples
: 包含示例配置和使用案例。bazel
: 包含 Bazel 构建系统的相关文件。source
: 包含项目的核心源代码。common
: 包含通用代码。server
: 包含服务器相关的代码。extensions
: 包含各种扩展模块。
test
: 包含测试代码和测试配置。tools
: 包含开发和构建工具。
2. 项目的启动文件介绍
Envoy 的启动文件主要是 source/exe/envoy-static
,这是一个可执行文件,用于启动 Envoy 代理。启动文件的生成通常通过 Bazel 构建系统完成。
bazel build //source/exe:envoy-static
生成的 envoy-static
文件位于 bazel-bin/source/exe/
目录下。
3. 项目的配置文件介绍
Envoy 的配置文件通常是一个 YAML 文件,用于定义代理的行为和配置。配置文件的主要部分包括:
listeners
: 定义监听的端口和协议。clusters
: 定义后端服务的集群。routes
: 定义路由规则。admin
: 定义管理接口的配置。
一个简单的配置文件示例如下:
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_cluster }
http_filters:
- name: envoy.filters.http.router
clusters:
- name: service_cluster
connect_timeout: 0.25s
type: LOGICAL_DNS
lb_policy: ROUND_ROBIN
load_assignment:
cluster_name: service_cluster
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address: { address: service.example.com, port_value: 80 }
admin:
address:
socket_address: { address: 127.0.0.1, port_value: 9901 }
这个配置文件定义了一个监听在 10000 端口的 HTTP 代理,并将请求路由到 service.example.com
的 80 端口。
以上是 Envoy 项目的基本使用教程,包括项目的目录结构、启动文件和配置文件的介绍。希望这些内容能帮助你更好地理解和使用 Envoy 项目。