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 还被几个特定用例捆绑为开源发行版的一部分。