執行 Envoy

以下說明將逐步引導您以系統守護進程或使用 Envoy Docker 映像檔啟動 Envoy。

檢查您的 Envoy 版本

在您安裝 Envoy後,您可以如下檢查版本資訊

$ envoy --version
...

檢視 Envoy 命令列選項

您可以使用 --help 旗標檢視 Envoy 的命令列選項

$ envoy --help
...

使用示範設定執行 Envoy

-c--config-path 旗標會告知 Envoy 其初始設定的路徑。

Envoy 會根據檔案副檔名剖析設定檔,請參閱設定 路徑 命令 選項以取得更多資訊。

要將 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 設定

您可以在 驗證 模式中啟動 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 容器中的預設設定也會以這種方式記錄存取。

當在容器內執行 Envoy 時,將系統和存取日誌分別記錄到 /dev/stderr/dev/stdout 可能很有用,因為可以分離串流,並且記錄不需要掛載其他檔案或目錄。

某些 Envoy 篩選器和擴充功能也可能具有額外的記錄功能。

除了檔案和 stdout/err 之外,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 --log-level 選項設定 Envoy 系統日誌的日誌層級。

可用的日誌層級為

  • 追蹤

  • 除錯

  • 資訊

  • 警告/告警

  • 錯誤

  • 嚴重

  • 關閉

預設值為 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 以取得元件清單。