Envoy 边缘服务代理教程
1. 项目介绍
Envoy 是一个云原生高性能的边缘/中间件/服务代理,由 Cloud Native Computing Foundation(CNCF)托管。它设计用于服务间的通信,提供包括负载均衡、TLS 终端、HTTP/2 及 gRPC 支持等功能。Envoy 的特性包括强大的统计收集、热重启、动态配置以及基于 xDS 协议的集中式管理。
2. 项目快速启动
环境准备
确保你的系统上已经安装了 git
, CMake
, Bazel
和必要的 C++ 开发工具链。
获取源码及构建
-
克隆 Envoy 源代码仓库:
git clone https://github.com/envoyproxy/envoy.git
-
进入源代码目录并构建:
cd envoy bazel build //source/exe:envoy-static
-
安装完成后,可找到二进制文件:
ls -l bazel-bin/source/exe/envoy-static
配置示例
Envoy 使用 JSON 或 YAML 格式的配置文件。以下是一个简单的监听本地 HTTP 请求的配置示例:
static_resources:
listeners:
- name: listener_0
address:
socket_address: { address: 0.0.0.0, port_value: 8080 }
filter_chains:
- filters:
- name: envoy.http_connection_manager
config:
codec_type: auto
stat_prefix: ingress_http
route_config:
name: local_route
virtual_hosts:
- name: local_service
domains: ["*"]
routes:
- match:
prefix: "/"
route:
cluster: service_cluster
http_filters:
- name: envoy.router
clusters:
- name: service_cluster
connect_timeout: 0.25s
type: strict_dns
lb_policy: round_robin
load_assignment:
cluster_name: service_cluster
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address: { address: localhost, port_value: 8081 }
启动 Envoy
使用上述配置启动 Envoy:
./bazel-bin/source/exe/envoy-static --config-path <path_to_your_yaml_config>
3. 应用案例和最佳实践
- 微服务架构:Envoy 可作为每个服务的 Sidecar,处理服务间通信,实现无侵入的服务发现、监控和服务网格。
- 负载均衡:利用 Envoy 实现跨数据中心或云环境的智能路由和负载均衡。
- 安全:使用 Envoy 对 TLS 证书进行管理,对请求进行验证和过滤,保护内部服务免受外部攻击。
- 可观测性:通过 Envoy 收集的大量指标和日志,配合 Prometheus 和 Grafana 可实现详细的性能分析和故障排查。
4. 典型生态项目
- Istio:一个流行的 Service Mesh 解决方案,使用 Envoy 作为数据平面代理。
- Linkerd:另一个服务网格项目,虽然有自己的轻量级代理,但也可以与 Envoy 结合使用。
- Consul:服务发现和KV存储解决方案,可以与 Envoy 集成,实现自动配置。
Envoy 提供丰富的功能和强大的生态系统,适合各种复杂的网络场景。探索其详细文档和社区资源以了解更多深入的应用技巧和最佳实践。