Envoy是專爲大型現代 SOA(面向服務架構)架構設計的 L7 代理和通訊總線。html
Envoy 目前不提供單獨的預先編譯好的二進制文件,但提供了 Docker 鏡像。這是開始使用 Envoy 的最快方式。若是您但願在 Docker 容器外使用 Envoy,則須要構建它。git
這些示例使用 v2 Envoy API,但僅使用 API 的靜態配置功能,這對於簡單的需求很是有用。 更復雜的需求是由動態配置來支持的。github
根據 Envoy 存儲庫中的文件運行這些命令。下面的部分給出了配置文件和執行步驟更詳細的解釋。docker
configs/google_com_proxy.v2.yaml 中提供了一個很是簡單的可用於驗證基於純 HTTP 代理的 Envoy 配置。 這不表示實際的 Envoy 部署:bootstrap
$ docker pull envoyproxy/envoy:latest $ docker run --rm -d -p 10000:10000 envoyproxy/envoy:latest $ curl -v localhost:10000
使用的 Docker 鏡像將包含最新版本的 Envoy 和一個基本的 Envoy 配置。此基本配置告訴 Envoy 將入站請求路由到 *.google.com。api
Envoy 經過 YAML 文件中傳入的參數來進行配置。架構
admin message 是 administration 服務必須的配置。address 鍵指定監聽地址,下面的例子監聽地址是 0.0.0.0:9901。dom
admin: access_log_path: /tmp/admin_access.log address: socket_address: { address: 0.0.0.0, port_value: 9901 }
static_resources 包含 Envoy 啓動時靜態配置的全部內容,而不是 Envoy 在運行時動態配置的資源。v2 API Overview 描述了這一點。curl
static_resources:
listeners 規範socket
listeners: - name: listener_0 address: socket_address: { address: 0.0.0.0, port_value: 10000 } filter_chains: - filters: - name: envoy.http_connection_manager config: stat_prefix: ingress_http codec_type: AUTO route_config: name: local_route virtual_hosts: - name: local_service domains: ["*"] routes: - match: { prefix: "/" } route: { host_rewrite: www.google.com, cluster: service_google } http_filters: - name: envoy.router
clusters 規範
clusters: - name: service_google connect_timeout: 0.25s type: LOGICAL_DNS # Comment out the following line to test on v6 networks dns_lookup_family: V4_ONLY lb_policy: ROUND_ROBIN hosts: [{ socket_address: { address: google.com, port_value: 443 }}] tls_context: { sni: www.google.com }
建立一個簡單的 Dockerfile 來執行 Envoy,假定 envoy.yaml(如上所述)位於本地目錄中。您能夠參考命令行選項。
FROM envoyproxy/envoy:latest COPY envoy.yaml /etc/envoy/envoy.yaml
使用如下命令構建您配置的 Docker 鏡像:
$ docker build -t envoy:v1
如今您能夠執行它:
$ docker run -d --name envoy -p 9901:9901 -p 10000:10000 envoy:v1
最後測試使用:
$ curl -v localhost:10000
若是您想經過 docker-compose 使用 envoy,則可使用 volume 覆蓋提供的配置文件。
咱們使用 Docker Compose 建立了許多 sandbox ,這些 sandbox 設置了不一樣的環境來測試 Envoy 的功能並顯示示例配置。 當咱們以爲人們更有興趣時,將添加和展現更多不一樣特徵的 sandbox。 如下 sandbox 可用:
除代理自己以外, Envoy 還被幾個特定用例捆綁爲開源發行版的一部分。