Envoy 使用
Envoy的介绍
Envoy诞生于云原生流行之时,当微服务开发架构成为主流,需要管理和维护的应用越来越多,服务与服务之间的相互通信越来越复杂。Envoy的出现,提供了一个通用的代理层,处理不同服务之间的网络通信,并且通过强大的控制平台来管理这些通信。
Envoy是一个面向大规模现代服务架构而设计的7层负载和消息总线。主要信念是认为网络对应用程序应该是透明的。当出现网络和应用问题时,应该能够轻松找到问题的原因。其实Envoy的本质是网络代理,它可以代理你的应用服务。它主要的功能涵盖:L3/L4/L7代理、HTTP/2的支持、HTTP/3目前处于alpha阶段、GRPC支持、服务发现和动态配置、健康检查、负载均衡、流量管理、边缘代理支持、可观测性。
Envoy的安装
目前主流的服务网格是Istio,Envoy作为它的网络代理一部分。实际上,Envoy可以单独作为一个代理服务,部署在Kubernetes集群中。
首先我们准备一份Envoy的配置文件,为之后创建configmap:
1 | # 配置文件:envoy.yaml |
接下来定义Envoy:
1 | # envoy-deploy.yaml |
执行命令:
1 | kubectl create deploy nginx1 --iamge=nginx:alpine |
现在你可以通过访问curl localhost:10000来访问服务了。
ps: 你可以把9901端口代理出来,然后访问envoy的管理台页面;envoy中的配置文件,需要创建deployment之后,创建svc,不然会出现访问不到。
Envoy的术语
参考:
原文:https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/intro/terminology
中文:https://cloudnative.to/envoy/intro/arch_overview/intro/terminology.html
关于Envoy的几个专业术语:
- Host:主机,能够进行网络通信的实体。主要指引用程序
- Downstream:下游
- Upstream:上游
- Listener:监听器
- Cluster:集群
- Mesh:网格
- Runtime configuration:运行时配置
Envoy主要使用单进程-多线程架构。一个primary线程处理各种轻量协调任务,同时多个worker线程处理监听、过滤、转发。建议将worker线程数配置为物理机器的线程数。
Envoy的基本配置
以下是一份完整envoy的TCP/HTTP配置文档:
- 创建configmap
1 | # envoy-config.yaml |
- 创建deploy
1 | #envoy-deploy.yaml |
- 创建service:
1 | # envoy-svc.yaml |
- 对应服务创建,服务有TCP服务:10.59.100.96:5236,两个nginx deployment服务 nginx1, nginx2。这块可以直接使用kubectl create deploy; kubectl expose 创建就行。不做多的说明。10.59.100.96:5236是我用本地启动的一个MySQL服务。

之后就可以测试服务是否正常了。用对应的主机ip和主机NodePort端口就行。
Envoy的动态配置
- 配置文件 envoy.yaml
1 | # envoy.yaml |
- lds.yaml
1 | # lds.yaml |
- cds.yaml
1 | # cds.yaml |
- 对于 envoy 的配置,需要把 configmap 中的配置进行一些微调:
1 | apiVersion: apps/v1 |
记录
- match: { prefix: “/“ } 本来想在这里加上”/ng1”,测试发现,它是会增加一个path,原来的路径比如是localhost:10000/index.html可以访问的,会变成localhost:10000/ng1/index.html 这样的路径,这就需要在后端服务做一些配置了。