Envoy Proxy在Ubuntu上的安装与配置指南
摘要:本文详细介绍了在Ubuntu系统上安装和配置Envoy Proxy的完整流程,包括通过APT仓库安装、Docker容器部署以及源码编译三种方式,并提供了基础配置示例和最佳实践,帮助读者快速上手这一云原生时代的高性能代理服务器。
总起:Envoy Proxy简介与安装方式概述
Envoy Proxy是Lyft开源的高性能、可扩展的第七层代理和通信总线,专为云原生应用设计。作为Service Mesh架构中的核心组件,Envoy提供了强大的流量管理、可观测性和安全功能,支持HTTP/2、gRPC、WebSocket等多种协议,并具备出色的动态配置能力。
为什么选择Envoy Proxy
在现代微服务架构中,Envoy Proxy凭借以下优势成为首选的代理解决方案:
- 高性能:基于C++开发,采用事件驱动架构,能够处理大规模并发连接
- 协议支持全面:原生支持HTTP/1.1、HTTP/2、gRPC、WebSocket等现代协议
- 动态配置:支持热更新,无需重启即可应用新配置
- 可观测性:提供丰富的指标、日志和追踪功能
- 可扩展性:通过过滤器机制支持自定义功能扩展
- 云原生设计:与Kubernetes等容器化环境无缝集成
安装方式概览
在Ubuntu系统上,有三种主要的Envoy安装方式:
- APT仓库安装:官方推荐的方式,适合生产环境,便于管理和更新
- Docker容器部署:轻量级、隔离性强的部署方式,适合容器化环境
- 源码编译安装:提供最大灵活性,可进行定制化配置,适合开发环境
本文将详细介绍这三种安装方式的步骤和注意事项,帮助读者根据自身需求选择最合适的安装方法。
分述:三种安装方式的详细步骤
1. APT仓库安装方式
APT仓库安装是Ubuntu系统上最简单、最推荐的Envoy安装方法,官方提供了预编译的二进制包,包含了所有必要的依赖项。
系统要求
- Ubuntu 20.04 LTS (Focal Fossa) 或更新版本
- 具有sudo权限的用户账户
- 稳定的网络连接
安装步骤
步骤1:添加Envoy GPG密钥
首先,我们需要添加Envoy的GPG密钥以验证软件包的真实性:
# 下载并添加Envoy的GPG密钥
wget -O- https://apt.envoyproxy.io/signing.key | sudo gpg --dearmor -o /etc/apt/keyrings/envoy-keyring.gpg
步骤2:添加Envoy APT仓库
根据您的Ubuntu版本,添加相应的APT仓库。以下是针对不同Ubuntu版本的命令:
# Ubuntu 20.04 LTS (Focal Fossa)
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/envoy-keyring.gpg] https://apt.envoyproxy.io focal main" | sudo tee /etc/apt/sources.list.d/envoy.list# Ubuntu 22.04 LTS (Jammy Jellyfish)
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/envoy-keyring.gpg] https://apt.envoyproxy.io jammy main" | sudo tee /etc/apt/sources.list.d/envoy.list# Ubuntu 24.04 LTS (Noble Numbat) - 如果已发布
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/envoy-keyring.gpg] https://apt.envoyproxy.io noble main" | sudo tee /etc/apt/sources.list.d/envoy.list
步骤3:更新软件包列表并安装Envoy
# 更新软件包列表
sudo apt-get update# 安装Envoy
sudo apt-get install envoy
步骤4:验证安装
安装完成后,可以通过以下命令验证Envoy是否正确安装:
# 检查Envoy版本
envoy --version
如果安装成功,您将看到类似以下的输出:
envoy version: 1c298d6e69f4b3b3363a0c8e8b6e5b3b6e5b3b6e/1.29.0/Clean/RELEASE/BoringSSL
优点与注意事项
优点:
- 安装过程简单快捷
- 自动处理依赖关系
- 便于后续更新和维护
- 官方支持,稳定可靠
注意事项:
- 需要sudo权限
- 依赖于网络连接和官方仓库的可用性
- 版本可能不是最新的
2. Docker容器部署方式
Docker容器部署是另一种流行的Envoy安装方式,特别适合容器化环境和微服务架构。
系统要求
- 已安装Docker Engine
- 具有Docker运行权限的用户账户
安装步骤
步骤1:拉取Envoy Docker镜像
# 拉取最新的Envoy官方镜像
docker pull envoyproxy/envoy:v1.29-latest# 如果需要特定版本,可以指定版本号
# docker pull envoyproxy/envoy:v1.28.0
步骤2:运行Envoy容器
# 基本运行命令
docker run --rm envoyproxy/envoy:v1.29-latest --version# 后台运行Envoy容器
docker run -d --name envoy \-p 9901:9901 \-p 10000:10000 \envoyproxy/envoy:v1.29-latest
步骤3:挂载配置文件
在实际使用中,通常需要挂载自定义配置文件:
# 创建本地配置目录
mkdir -p ~/envoy/config# 创建示例配置文件
cat > ~/envoy/config/envoy.yaml << EOF
static_resources:listeners:- name: listener_0address:socket_address: { address: 0.0.0.0, port_value: 10000 }filter_chains:- filters:- name: envoy.filters.network.http_connection_managertyped_config:"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManagerstat_prefix: ingress_httproute_config:name: local_routevirtual_hosts:- name: local_servicedomains: ["*"]routes:- match: { prefix: "/" }route: { cluster: service_cluster }http_filters:- name: envoy.filters.http.routerclusters:- name: service_clustertype: STRICT_DNSload_assignment:cluster_name: service_clusterendpoints:- lb_endpoints:- endpoint:address:socket_address: { address: httpbin.org, port_value: 80 }
admin:access_log_path: /tmp/admin_access.logaddress:socket_address: { address: 0.0.0.0, port_value: 9901 }
EOF# 运行容器并挂载配置文件
docker run -d --name envoy \-p 9901:9901 \-p 10000:10000 \-v ~/envoy/config:/etc/envoy \envoyproxy/envoy:v1.29-latest -c /etc/envoy/envoy.yaml
步骤4:验证部署
# 检查容器状态
docker ps# 查看容器日志
docker logs envoy# 测试代理功能
curl http://localhost:10000/get
优点与注意事项
优点:
- 环境隔离,不影响宿主系统
- 部署简单,版本切换方便
- 资源占用相对较小
- 适合微服务和容器编排环境
注意事项:
- 需要基本的Docker知识
- 配置文件管理相对复杂
- 网络配置需要额外考虑
3. 源码编译安装方式
源码编译安装提供了最大的灵活性,允许用户根据特定需求定制Envoy功能。
系统要求
- Ubuntu 18.04 LTS或更新版本
- 至少8GB内存
- 50GB可用磁盘空间
- 基本的开发工具和依赖
安装步骤
步骤1:安装必要的依赖
# 更新系统包
sudo apt-get update# 安装基本依赖
sudo apt-get install \autoconf \automake \build-essential \cmake \curl \git \libtool \patch \python3-pip \unzip \virtualenv# 安装Bazelisk(Bazel的包装器)
sudo wget -O /usr/local/bin/bazel https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-$(uname -m | sed -e 's/x86_64/amd64/' -e 's/aarch64/arm64/')
sudo chmod +x /usr/local/bin/bazel
步骤2:获取Envoy源码
# 克隆Envoy仓库
git clone https://github.com/envoyproxy/envoy.git
cd envoy# 检出特定版本(可选)
git checkout v1.29.0
步骤3:构建Envoy
# 使用Bazel构建Envoy
bazel build //source/exe:envoy-static# 构建过程可能需要较长时间,取决于系统性能
步骤4:安装Envoy
# 创建安装目录
sudo mkdir -p /opt/envoy/bin# 复制构建的二进制文件
sudo cp bazel-bin/source/exe/envoy-static /opt/envoy/bin/envoy# 创建符号链接
sudo ln -s /opt/envoy/bin/envoy /usr/local/bin/envoy# 设置执行权限
sudo chmod +x /opt/envoy/bin/envoy
步骤5:验证安装
# 验证安装
envoy --version# 测试基本功能
envoy --mode validate -c /dev/null
优点与注意事项
优点:
- 完全控制编译选项和功能
- 可以应用自定义补丁
- 获取最新功能和修复
- 适合开发和测试环境
注意事项:
- 编译过程耗时较长
- 需要较多的系统资源
- 维护成本较高
- 不适合生产环境新手使用
Envoy基础配置与最佳实践
无论采用哪种安装方式,正确的配置都是Envoy发挥其强大功能的关键。本节将介绍Envoy的基础配置和一些最佳实践。
基础配置示例
以下是一个简单的Envoy配置示例,实现了基本的HTTP代理功能:
# envoy.yaml
static_resources:listeners:- name: listener_0address:socket_address: { address: 0.0.0.0, port_value: 10000 }filter_chains:- filters:- name: envoy.filters.network.http_connection_managertyped_config:"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManagerstat_prefix: ingress_httproute_config:name: local_routevirtual_hosts:- name: local_servicedomains: ["*"]routes:- match: { prefix: "/" }route: { cluster: service_cluster }http_filters:- name: envoy.filters.http.routertyped_config: {}clusters:- name: service_clustertype: STRICT_DNSload_assignment:cluster_name: service_clusterendpoints:- lb_endpoints:- endpoint:address:socket_address: { address: httpbin.org, port_value: 80 }
admin:access_log_path: /tmp/admin_access.logaddress:socket_address: { address: 0.0.0.0, port_value: 9901 }
配置最佳实践
-
使用版本控制:将所有Envoy配置文件纳入版本控制系统,便于追踪变更和回滚。
-
模块化配置:对于复杂配置,考虑使用Envoy的配置合并功能或外部工具管理配置片段。
-
监控与日志:合理配置访问日志和指标收集,便于问题排查和性能分析。
-
安全配置:在生产环境中,确保启用TLS加密和适当的访问控制。
-
资源限制:根据实际需求设置合理的连接和请求限制,防止资源耗尽。
总结:选择适合的安装方式
通过本文的介绍,我们详细了解了在Ubuntu系统上安装Envoy Proxy的三种主要方式:APT仓库安装、Docker容器部署和源码编译安装。每种方式都有其适用的场景和优势。
安装方式对比
安装方式 | 适用场景 | 优势 | 局限性 |
---|---|---|---|
APT仓库安装 | 生产环境、常规部署 | 简单快捷、便于维护、官方支持 | 版本可能滞后、灵活性有限 |
Docker容器部署 | 容器化环境、微服务架构 | 环境隔离、部署灵活、资源占用少 | 需要Docker知识、配置管理复杂 |
源码编译安装 | 开发环境、定制需求 | 完全可控、可定制、获取最新功能 | 耗时较长、维护成本高、资源需求大 |
选择建议
- 生产环境:推荐使用APT仓库安装,稳定可靠且便于维护。
- 容器化环境:推荐使用Docker容器部署,与现有容器编排方案无缝集成。
- 开发测试:推荐使用源码编译安装,便于调试和功能定制。
后续学习方向
掌握Envoy的基本安装只是第一步,要充分发挥其强大功能,还需要进一步学习:
- 高级配置:包括负载均衡、健康检查、熔断机制等
- 安全配置:TLS配置、认证授权、安全策略等
- 可观测性:指标收集、日志分析、分布式追踪等
- Service Mesh集成:与Istio、Linkerd等服务网格的集成使用
- 性能优化:针对高并发场景的配置优化技巧
Envoy作为云原生时代的重要基础设施组件,掌握其安装和配置对于现代应用架构师和运维工程师来说是一项宝贵的技能。希望本文能够为您的Envoy学习之旅提供有价值的参考和指导。