執行 Envoy
以下說明將逐步引導您以系統守護進程或使用 Envoy Docker 映像檔啟動 Envoy。
檢查您的 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 會根據檔案副檔名剖析設定檔,請參閱設定 路徑 命令 列 選項
以取得更多資訊。
要將 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 設定
您可以在 驗證 模式
中啟動 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 容器中的預設設定也會以這種方式記錄存取。
當在容器內執行 Envoy 時,將系統和存取日誌分別記錄到 /dev/stderr
和 /dev/stdout
可能很有用,因為可以分離串流,並且記錄不需要掛載其他檔案或目錄。
某些 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
選項設定特定元件的日誌層級。
以下範例會禁止除 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
以取得元件清單。