千家信息网

如何掌握Envoy

发表于:2024-10-26 作者:千家信息网编辑
千家信息网最后更新 2024年10月26日,本篇内容介绍了"如何掌握Envoy"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!响应了时代号召的 E
千家信息网最后更新 2024年10月26日如何掌握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安全错误 数据库的锁怎样保障安全 辽宁数据软件开发价格参考价格 jsp读数据库图片 单位网络安全微视频 互联网时代出现了什么什么的科技 基于工程图的位置提取数据库 硬件技术升级属于网络安全吗 服务器安全维护外包 网格服务器 广州软件开发驻场需要多少钱 信息网络安全培训心得 低价收录数据库连年涨价揭秘知网 数据库与站点链接 网络安全生态化防御体系 中荷国际网络技术交流会 群核科技网络安全审查 香港宝莲禅寺佛教数据库 计算机软件开发含金量高的证书 网络安全学习过程 绵阳网络安全运营 网络安全模式如何缩小窗口 微信云开发服务器证书无效 常见计算机网络技术项目信息 单位制定网络安全工作制度 大专可以学计算机网络技术吗 软件开发的具体工作流程 融众网络技术有限公司 服务器模组多少钱 北信源网络技术有限公司 个人服务器商用 网络安全法律法规条例
0