运行 Envoy
以下说明将引导您将 Envoy 作为系统守护进程启动或使用 Envoy Docker 镜像。
检查 Envoy 版本
安装 Envoy 后,您可以按如下方式检查版本信息
$ envoy --version
...
$ docker run --rm \
envoyproxy/envoy:dev-fcdc9d6d5a9da98fe30ad749201034770ff6b30e \
--version
...
查看 Envoy 命令行选项
您可以使用 --help
标志查看 Envoy 命令行选项
$ envoy --help
...
$ docker run --rm \
envoyproxy/envoy:dev-fcdc9d6d5a9da98fe30ad749201034770ff6b30e \
--help
...
使用演示配置运行 Envoy
-c
或 --config-path
标志告诉 Envoy 其初始配置的路径。
Envoy 将根据文件扩展名解析配置文件,请参见 config path command line option
获取更多信息。
要将 Envoy 作为系统守护进程启动 下载演示配置
,并按如下方式启动
$ envoy -c envoy-demo.yaml
...
您可以在不指定配置文件的情况下启动 Envoy Docker 镜像,它将默认使用演示配置。
$ docker run --rm -it \
-p 9901:9901 \
-p 10000:10000 \
envoyproxy/envoy:dev-fcdc9d6d5a9da98fe30ad749201034770ff6b30e
...
要指定自定义配置,您可以将配置挂载到容器中,并使用 -c
指定路径。
假设您在当前目录中有一个名为 envoy-custom.yaml
的自定义配置
$ docker run --rm -it \
-v $(pwd)/envoy-custom.yaml:/envoy-custom.yaml \
-p 9901:9901 \
-p 10000:10000 \
envoyproxy/envoy:dev-fcdc9d6d5a9da98fe30ad749201034770ff6b30e \
-c /envoy-custom.yaml
...
检查 Envoy 是否正在 https://127.0.0.1:10000 上进行代理。
$ curl -v localhost:10000
...
您可以使用 Ctrl-c
退出服务器。
有关 Envoy 管理界面的更多信息,请参见 管理快速入门指南。
覆盖默认配置
您可以使用 --config-yaml
提供覆盖配置,它将与主配置合并。
此选项只能指定一次。
将以下代码段保存到 envoy-override.yaml
admin:
address:
socket_address:
address: 127.0.0.1
port_value: 9902
警告
如果您在 Docker 容器中运行 Envoy,您可能希望使用 0.0.0.0
。以这种方式公开管理界面可能会导致您对 Envoy 服务器的意外控制。有关更多信息,请参见 管理部分。
接下来,使用覆盖配置启动 Envoy 服务器
在 Linux/Mac 上:运行
$ envoy -c envoy-demo.yaml --config-yaml "$(cat envoy-override.yaml)"
...
在 Windows 上运行
注意
2023 年 8 月 31 日,由于资源不足,Envoy 项目结束了对 Windows 的官方支持。我们将继续接受与 Windows 构建相关的补丁。在另行通知之前,Windows 构建将从 Envoy CI 中排除,以及 Envoy 发布和安全流程。
$ envoy -c envoy-demo.yaml --config-yaml "$(Get-Content -Raw envoy-override.yaml)"
...
$ docker run --rm -it \
-p 9902:9902 \
-p 10000:10000 \
envoyproxy/envoy:dev-fcdc9d6d5a9da98fe30ad749201034770ff6b30e \
-c /etc/envoy/envoy.yaml \
--config-yaml "$(cat envoy-override.yaml)"
...
Envoy 管理界面现在应该在 https://127.0.0.1:9902 上可用。
$ curl -v localhost:9902
...
验证 Envoy 配置
您可以在 validate mode
下启动 Envoy。
这使您可以检查 Envoy 是否能够使用您的配置启动,而无需实际启动或重启服务,或建立任何网络连接。
如果配置有效,进程将打印 OK
并退出,返回码为 0
。
对于无效配置,进程将打印错误并退出,返回码为 1
。
$ envoy --mode validate -c my-envoy-config.yaml
[2020-11-08 12:36:06.543][11][info][main] [source/server/server.cc:583] runtime: layers:
- name: base
static_layer:
{}
- name: admin
admin_layer:
{}
[2020-11-08 12:36:06.543][11][info][config] [source/server/configuration_impl.cc:95] loading tracing configuration
[2020-11-08 12:36:06.543][11][info][config] [source/server/configuration_impl.cc:70] loading 0 static secret(s)
[2020-11-08 12:36:06.543][11][info][config] [source/server/configuration_impl.cc:76] loading 1 cluster(s)
[2020-11-08 12:36:06.546][11][info][config] [source/server/configuration_impl.cc:80] loading 1 listener(s)
[2020-11-08 12:36:06.549][11][info][config] [source/server/configuration_impl.cc:121] loading stats sink configuration
configuration 'my-envoy-config.yaml' OK
$ docker run --rm \
-v $(pwd)/my-envoy-config.yaml:/my-envoy-config.yaml \
envoyproxy/envoy:dev-fcdc9d6d5a9da98fe30ad749201034770ff6b30e \
--mode validate \
-c my-envoy-config.yaml
[2020-11-08 12:36:06.543][11][info][main] [source/server/server.cc:583] runtime: layers:
- name: base
static_layer:
{}
- name: admin
admin_layer:
{}
[2020-11-08 12:36:06.543][11][info][config] [source/server/configuration_impl.cc:95] loading tracing configuration
[2020-11-08 12:36:06.543][11][info][config] [source/server/configuration_impl.cc:70] loading 0 static secret(s)
[2020-11-08 12:36:06.543][11][info][config] [source/server/configuration_impl.cc:76] loading 1 cluster(s)
[2020-11-08 12:36:06.546][11][info][config] [source/server/configuration_impl.cc:80] loading 1 listener(s)
[2020-11-08 12:36:06.549][11][info][config] [source/server/configuration_impl.cc:121] loading stats sink configuration
configuration 'my-envoy-config.yaml' OK
Envoy 日志记录
默认情况下,Envoy 系统日志将发送到 /dev/stderr
。
这可以使用 --log-path
覆盖。
$ mkdir logs
$ envoy -c envoy-demo.yaml --log-path logs/custom.log
$ mkdir logs
$ chmod go+rwx logs/
$ docker run --rm -it \
-p 10000:10000 \
-v $(pwd)/logs:/logs \
envoyproxy/envoy:dev-fcdc9d6d5a9da98fe30ad749201034770ff6b30e \
-c /etc/envoy/envoy.yaml \
--log-path logs/custom.log
演示配置
配置了 监听器,它将访问日志记录到 /dev/stdout
12 typed_config:
13 "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
14 stat_prefix: ingress_http
15 access_log:
16 - name: envoy.access_loggers.stdout
17 typed_config:
18 "@type": type.googleapis.com/envoy.extensions.access_loggers.stream.v3.StdoutAccessLog
19 http_filters:
20 - name: envoy.filters.http.router
21 typed_config:
22 "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
Envoy Docker 容器中的默认配置也以这种方式记录访问。
分别将系统日志和访问日志记录到 /dev/stderr
和 /dev/stdout
在容器中运行 Envoy 时可能很有用,因为可以将流分离,并且日志记录不需要挂载任何其他文件或目录。
一些 Envoy 过滤器和扩展 也可能具有其他日志记录功能。
Envoy 网络
默认情况下,Envoy 可以使用 IPv4 和 IPv6 网络。
如果您的环境不支持 IPv6,您应该禁用它。
这可能是使用非 Linux 主机上的 Docker 时的情况(有关 Docker 中 IPv6 支持 的更多信息,请参见此处)。
您可以在配置中将 dns_lookup_family
设置为 V4_ONLY
来禁用 IPv6,如下所示
34 clusters:
35 - name: service_envoyproxy_io
36 type: LOGICAL_DNS
37 # Comment out the following line to test on v6 networks
38 dns_lookup_family: V4_ONLY
39 load_assignment:
40 cluster_name: service_envoyproxy_io
41 endpoints:
42 - lb_endpoints:
43 - endpoint:
44 address:
45 socket_address:
调试 Envoy
可以使用 -l or --log-level
选项设置 Envoy 系统日志的日志级别。
可用的日志级别为
trace
debug
info
warning/warn
error
critical
off
默认值为 info
。
您还可以使用 --component-log-level
选项为特定组件设置日志级别。
以下示例禁止所有日志记录,除了 upstream
和 connection
组件,它们分别设置为 debug
和 trace
。
$ envoy -c envoy-demo.yaml -l off --component-log-level upstream:debug,connection:trace
...
$ docker run --rm -d \
-p 9901:9901 \
-p 10000:10000 \
envoyproxy/envoy:dev-fcdc9d6d5a9da98fe30ad749201034770ff6b30e \
-c /etc/envoy/envoy.yaml \
-l off \
--component-log-level upstream:debug,connection:trace
...
提示
有关组件列表,请参见 logger.h 中的 ALL_LOGGER_IDS
。