千家信息网

如何掌握Envoy

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇内容介绍了"如何掌握Envoy"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!响应了时代号召的 E
千家信息网最后更新 2026年11月02日如何掌握Envoy

本篇内容介绍了"如何掌握Envoy"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

响应了时代号召的 Envoy

Envoy 是一个具有反向代理和负载均衡功能的单机软件,和 Nginx、Haproxy 属于同一类软件。与 Nginx 和 Haproxy 相比,Envoy 有一个的重要特色是:自带配置 API。

以 Nginx、Haproxy 为代表的负载均衡软件,在过去很多年的实际应用中,很少会在软件运行的时候更改配置,即使偶尔要修改配置文件,使用 reload 等命令重新加载就能满足需要。

以 Kubernetes 为代表的 PaaS 或者容器管理系统出现后,IT 系统沿着"分工专业化、更少的人做更多同质事情"的路线演进,在当前的演进过程中,反向代理与负载均衡的能力被集中管理、统一提供。

这一演进在 Kubernetes 中体现为作为集群出口的 ingress 代理集群内所有服务,在以 istio 为代表的 ServiceMesh 中体现为分散在各处的代理软件在同一个中心的控制下流转流量。 无论是作为 Kubernetes 的出口,还是作为 Mesh 中的一个节点,承担流量转发功能的组件都需要完成一个挑战: 在运行过程中频繁的更新配置。

新场景中的更新的频率是每秒 N 次,远远超过以往的场景中以周、月乃至年为周期的更新频率。这种情形下,热加载配置文件的方式明显迟缓笨重,有一些项目通过开发一个带有 API 功能的组件,实现生成配置文件、触发热加载的功能,以此赋予 Nginx、Haproxy 等传统负载均衡软件高频更新配置的能力。

但是,如果有一个软件原生带有配置 API,且专注于数据平面,它作为可靠的第三方存在,能够让控制平面专心于规则管理,那么它是不是会很受欢迎呢?

Envoy 就是这样一款软件。注意,这里只是在交代背景,不为 envoy 吹票,nginx、haproxy 等都在更新演进以适应场景的变化。

Cluster、Listener 与 Filter

Envoy 的功能和使用细节繁杂,但只要搞清楚了 Cluster、Listener 和 Filter 的用途,就把握住了大方向。

Cluster 就是一组 IP,相当于 Nginx 中 upstream,负载均衡策略在 cluster 中设置,cluster 中可以是 IP 也可以是域名:

难啃的配置文件

Envoy 的配置文件是从零开始了解 Envoy 时遇到的最大困难,它的配置比较繁杂,而且缺少系统的介绍。

配置文件在 envoy 启动时,用 -c 指定,内容分为以下几个部分:

{  "node": {    "id": "...",    "cluster": "...",    "metadata": "{...}",    "locality": "{...}",    "build_version": "..."  },  "static_resources": {    "listeners": [],    "clusters": [],    "secrets": []  },  "dynamic_resources": {    "lds_config": "{...}",    "cds_config": "{...}",    "ads_config": "{...}"  },  "cluster_manager": {    "local_cluster_name": "...",    "outlier_detection": "{...}",    "upstream_bind_config": "{...}",    "load_stats_config": "{...}"  },  "hds_config": {    "api_type": "...",    "cluster_names": [],    "grpc_services": [],    "refresh_delay": "{...}",    "request_timeout": "{...}",    "rate_limit_settings": "{...}"  },  "flags_path": "...",  "stats_sinks": [    {      "name": "...",      "config": "{...}"    }  ],  "stats_config": {    "stats_tags": [],    "use_all_default_tags": "{...}",    "stats_matcher": "{...}"  },  "stats_flush_interval": "{...}",  "watchdog": {    "miss_timeout": "{...}",    "megamiss_timeout": "{...}",    "kill_timeout": "{...}",    "multikill_timeout": "{...}"  },  "tracing": {    "http": "{...}"  },  "rate_limit_service": {    "grpc_service": "{...}"  },  "runtime": {    "symlink_root": "...",    "subdirectory": "...",    "override_subdirectory": "..."  },  "admin": {    "access_log_path": "...",    "profile_path": "...",    "address": "{...}"  },  "overload_manager": {    "refresh_interval": "{...}",    "resource_monitors": [],    "actions": []  }}

查看 envoy 容器中的默认配置文件,有助于建立感性认识,内容如下:

admin:  access_log_path: /tmp/admin_access.log  address:    socket_address:      protocol: TCP      address: 127.0.0.1      port_value: 9901static_resources:  listeners:  - name: listener_0    address:      socket_address:        protocol: TCP        address: 0.0.0.0        port_value: 10000    filter_chains:    - filters:      - name: envoy.http_connection_manager        typed_config:          "@type": type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager          stat_prefix: ingress_http          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:  - 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    load_assignment:      cluster_name: service_google      endpoints:      - lb_endpoints:        - endpoint:            address:              socket_address:                address: www.google.com                port_value: 443    tls_context:      sni: www.google.com

掌握 envoy 的配置文件,是把握住这款软件的关键一步,如何才能掌握 envoy 的配置呢?把它所有的配置细节记住当然算是掌握了,但是大多数时候我们并不需要如此,只需要知道实时反应配置文件全部细节的文档在哪里就足够了,剩下的交给时间和好奇心:

挑大梁的 filter

几乎可以这样说,在实际应用中最常提及的 envoy 功能都是 filter 提供的, filter 是流量在 envoy 内流转时经历的一个又一个处理环节,每个环节都会解读一些信息、作出一些判断,影响下一个环节的处理。

Cluster 和 Listener 中都有 filter 的位置,有的 filter 比较复杂还实现了 子 filter,例如专门处理 http 协议的 HttpConnectionManager。

这些 filter 的名称很好的展示了 envoy 能够做的事情,http、thrift、dubbo、zookeeper、mysql、mongo、redis,看起来是不是挺诱人的?

动态配置到底怎么回事?

envoy 的一大卖点就是自带配置 API,但要把它自带的 API 用起来还挺周折。envoy 率先提出使用统一的 data-plane-api ,定义了一套 API 标准,并期待能够得到广泛的认同和采纳,从新起的 Api 网关和 ServiceMesh 开源项目的选择来看,这一策略是有效的。

go-controller-plane 是 envoy 提出的 data-plane-api 的 go 语言实现,可以用它向 envoy 下发配置,这个库的使用方法三言两语说不清楚,先弄清楚下面三个项目的关系: envoy 就是单机软件 envoy,data-plane-api 是 API 接口标准,go-control-plane 是 API 接口标准的实现。

"如何掌握Envoy"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

配置 软件 文件 功能 均衡 更新 内容 就是 代理 代表 场景 实际 更多 标准 流量 环节 系统 细节 过程 项目 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海挚品互联网科技有限公司 广州为想互联网科技有限公司 互联网科技垄断 互联网科技未来 互联网公司 科技公司 万易互联网科技有限公司 碳银互联网科技 互联网科技博客 衡水科技产业互联网平台 承德科技产业互联网发展 阿里互联网科技公司 知域互联网科技有限公司大骗子 洛阳昕诺飞互联网科技有限公司 互联网保险科技创业 互联网数据科技专业 互联网科技如何创业 滨湖区互联网智能科技产品有哪些 九思连强互联网电子科技有限公司 互联网科技企业商标注意事项 现代互联网科技公司 善班互联网科技有限公司 南山科技园互联网公司有哪些 来此购互联网科技有限公司 江阴互联网智能科技产品进口 互联网领先科技宣传片 浙南科技城互联网大厦招聘 2021世界互联网领先科技成果发布 抖集互联网科技技术咨询 互联网科技平台产品运营 华人运通互联网科技公司
0