运行 Envoy

以下说明将引导您将 Envoy 作为系统守护进程启动或使用 Envoy Docker 镜像。

检查 Envoy 版本

安装 Envoy 后,您可以按如下方式检查版本信息

$ envoy --version
...

查看 Envoy 命令行选项

您可以使用 --help 标志查看 Envoy 命令行选项

$ envoy --help
...

使用演示配置运行 Envoy

-c--config-path 标志告诉 Envoy 其初始配置的路径。

Envoy 将根据文件扩展名解析配置文件,请参见 config path command line option 获取更多信息。

要将 Envoy 作为系统守护进程启动 下载演示配置,并按如下方式启动

$ envoy -c envoy-demo.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)"
...

Envoy 管理界面现在应该在 https://127.0.0.1:9902 上可用。

$ curl -v localhost:9902
...

注意

合并 yaml 列表(例如,监听器集群)时,合并的配置将被追加。

因此,您不能使用覆盖文件来更改先前指定 监听器集群 的配置

验证 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

Envoy 日志记录

默认情况下,Envoy 系统日志将发送到 /dev/stderr

这可以使用 --log-path 覆盖。

$ mkdir logs
$ envoy -c envoy-demo.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 可以配置为以 不同的格式 记录日志,并记录到 不同的输出,除了文件和 stdout/err 之外。

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 选项为特定组件设置日志级别。

以下示例禁止所有日志记录,除了 upstreamconnection 组件,它们分别设置为 debugtrace

$ envoy -c envoy-demo.yaml -l off --component-log-level upstream:debug,connection:trace
...

提示

有关组件列表,请参见 logger.h 中的 ALL_LOGGER_IDS