動態配置(檔案系統)

此範例逐步說明如何使用基於檔案系統的動態配置來配置 Envoy。

它示範如何在不重新啟動伺服器的情況下更新動態提供給 Envoy 的配置。

步驟 1:啟動代理容器

將目錄變更為 Envoy 儲存庫中的 examples/dynamic-config-fs

建置並啟動容器。

這也應該啟動兩個上游 HTTP 回顯伺服器,service1service2

$ pwd
envoy/examples/dynamic-config-fs
$ docker compose pull
$ docker compose up --build -d
$ docker compose ps

       Name                            Command                State                     Ports
------------------------------------------------------------------------------------------------------------------------
dynamic-config-fs_proxy_1      /docker-entrypoint.sh /usr ... Up      0.0.0.0:10000->10000/tcp, 0.0.0.0:19000->19000/tcp
dynamic-config-fs_service1_1   /bin/echo-server               Up      8080/tcp
dynamic-config-fs_service2_1   /bin/echo-server               Up      8080/tcp

步驟 2:檢查網頁回應

您應該能夠向連接埠 10000 發出請求,該請求將由 service1 提供服務。

$ curl -s https://127.0.0.1:10000
Request served by service1

HTTP/2.0 GET /

Host: localhost:10000
User-Agent: curl/7.72.0
Accept: */*
X-Forwarded-Proto: http
X-Request-Id: 6672902d-56ca-456c-be6a-992a603cab9a
X-Envoy-Expected-Rq-Timeout-Ms: 15000

步驟 3:傾印 Envoy 的 dynamic_active_clusters 配置

如果您現在傾印代理的 dynamic_active_clusters 配置,您應該會看到它已配置為 example_proxy_cluster 指向 service1

$ curl -s https://127.0.0.1:19000/config_dump | jq -r '.configs[1].dynamic_active_clusters'
[
  {
    "cluster": {
      "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster",
      "name": "example_proxy_cluster",
      "type": "LOGICAL_DNS",
      "connect_timeout": "5s",
      "dns_lookup_family": "V4_ONLY",
      "load_assignment": {
        "cluster_name": "example_proxy_cluster",
        "endpoints": [
          {
            "lb_endpoints": [
              {
                "endpoint": {
                  "address": {
                    "socket_address": {
                      "address": "service1",
                      "port_value": 8080
                    }
                  }
                }
              }
            ]
          }
        ]
      }
    },
    "last_updated": "2020-10-25T20:37:05.838Z"
  }
]

步驟 4:替換容器內的 cds.yaml 以更新上游叢集

此範例設定為 Envoy 提供兩個動態組態檔案

編輯容器內的 cds.yaml,並將叢集位址從 service1 變更為 service2

 6    cluster_name: example_proxy_cluster
 7    endpoints:
 8    - lb_endpoints:
 9      - endpoint:
10          address:
11            socket_address:
12              address: service1
13              port_value: 8080

您可以使用容器內的 sed 來執行此操作

docker compose exec -T proxy sed -i s/service1/service2/ /var/lib/envoy/cds.yaml

注意

上面的範例使用 sed -i,它會作為就地編輯,因為 sed 會複製、編輯和移動以執行此操作。

步驟 5:檢查 Envoy 是否使用更新後的配置

再次檢查網頁回應,現在請求應由 service2 處理

$ curl https://127.0.0.1:10000 | grep "served by"
Request served by service2

傾印 dynamic_active_clustersexample_proxy_cluster 現在應該配置為代理到 service2

$ curl -s https://127.0.0.1:19000/config_dump | jq -r '.configs[1].dynamic_active_clusters'
[
  {
    "cluster": {
      "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster",
      "name": "example_proxy_cluster",
      "type": "LOGICAL_DNS",
      "connect_timeout": "5s",
      "dns_lookup_family": "V4_ONLY",
      "load_assignment": {
        "cluster_name": "example_proxy_cluster",
        "endpoints": [
          {
            "lb_endpoints": [
              {
                "endpoint": {
                  "address": {
                    "socket_address": {
                      "address": "service2",
                      "port_value": 8080
                    }
                  }
                }
              }
            ]
          }
        ]
      }
    },
    "last_updated": "2020-10-25T20:37:05.838Z"
  }
]

另請參閱

動態配置(檔案系統)快速入門指南

基於檔案系統的 Envoy 動態配置快速入門指南。

Envoy 管理員快速入門指南

Envoy 管理介面快速入門指南。

動態配置(控制平面)沙箱

使用 Go 控制平面動態配置 Envoy。