Envoy架构概览(7):断路,全局限速和TLS

断路

断路是分布式系统的关键组成部分。快速失败并尽快收回下游施加压力几乎总是好的。 Envoy网格的主要优点之一是,Envoy在网络级别强制实现断路限制,而不必独立配置和编写每个应用程序。 Envoy支持各种类型的完全分布(不协调)的电路中断:

  • 群集最大连接数:Envoy将为上游群集中的所有主机建立的最大连接数。实际上,这仅适用于HTTP / 1.1群集,因为HTTP / 2使用到每个主机的单个连接。
  • 群集最大挂起请求数:在等待就绪连接池连接时将排队的最大请求数。实际上,这仅适用于HTTP / 1.1群集,因为HTTP / 2连接池不会排队请求。 HTTP / 2请求立即复用。如果这个断路器溢出,集群的upstream_rq_pending_overflow计数器将增加。
  • 群集最大请求数:在任何给定时间,群集中所有主机可以处理的最大请求数。实际上,这适用于HTTP / 2群集,因为HTTP / 1.1群集由最大连接断路器控制。如果这个断路器溢出,集群的upstream_rq_pending_overflow计数器将增加。
  • 集群最大活动重试次数:在任何给定时间,集群中所有主机可以执行的最大重试次数。一般来说,我们建议积极进行断路重试,以便允许零星故障重试,但整体重试量不能爆炸并导致大规模级联故障。如果这个断路器溢出,集群的upstream_rq_retry_overflow计数器将递增。

每个断路极限可以按照每个上游集群和每个优先级进行配置和跟踪。这允许分布式系统的不同组件被独立地调整并且具有不同的限制。

请注意,在HTTP请求的情况下,断路将导致x-envoy-overloaded报头被路由器过滤器设置。

全局限速

尽管分布式电路断路在控制分布式系统中的吞吐量方面通常是非常有效的,但是有时并不是非常有效并且需要全局速率限制。最常见的情况是大量主机转发到少量主机,并且平均请求延迟较低(例如连接到数据库服务器的请求)。如果目标主机被备份,则下游主机将压倒上游集群。在这种情况下,要在每个下游主机上配置足够严格的电路中断限制是非常困难的,这样系统将在典型的请求模式期间正常运行,但仍然可以防止系统开始发生故障时的级联故障。全球限速是这种情况的一个很好的解决方案。

Envoy直接与全球gRPC限速服务集成。尽管可以使用任何实现定义的RPC / IDL协议的服务,但Lyft提供了一个使用Redis后端的Go编写的参考实现。特使的费率限制整合具有以下特点:

  • 网络级别限制过滤器:Envoy将为安装过滤器的侦听器上的每个新连接调用速率限制服务。配置指定一个特定的域和描述符设置为速率限制。这对速率限制每秒传送收听者的连接的最终效果。配置参考。
  • HTTP级别限制过滤器:Envoy将为安装过滤器的侦听器上的每个新请求调用速率限制服务,并且路由表指定应调用全局速率限制服务。对目标上游群集的所有请求以及从始发群集到目标群集的所有请求都可能受到速率限制。配置参考。

限速服务配置。

TLS

在与上游集群连接时,Envoy支持侦听器中的TLS终止以及TLS发起。 对于特使来说,支持足以为现代Web服务执行标准的边缘代理职责,并启动与具有高级TLS要求(TLS1.2,SNI等)的外部服务的连接。 Envoy支持以下TLS功能:

  • 可配置的密码:每个TLS监听者和客户端可以指定它支持的密码。
  • 客户端证书:除了服务器证书验证之外,上游/客户端连接还可以提供客户端证书。
  • 证书验证和固定:证书验证选项包括基本链验证,主题名称验证和哈希固定。
  • ALPN:TLS监听器支持ALPN。 HTTP连接管理器使用这个信息(除了协议推断)来确定客户端是否正在讲HTTP / 1.1或HTTP / 2。
  • SNI:SNI当前支持客户端连接。 听众的支持可能会在未来添加。
  • 会话恢复:服务器连接支持通过TLS会话票据恢复以前的会话(请参阅RFC 5077)。 可以在热启动之间和并行Envoy实例之间执行恢复(通常在前端代理配置中有用)。

基础实施

目前Envoy被写入使用BoringSSL作为TLS提供者。

启用证书验证

除非验证上下文指定了一个或多个受信任的授权证书,否则上游和下游连接的证书验证都不会启用。

示例配置

static_resources:
  listeners:
  - name: listener_0
    address: { socket_address: { address: 127.0.0.1, port_value: 10000 } }
    filter_chains:
    - filters:
      - name: envoy.http_connection_manager
        # ...
      tls_context:
        common_tls_context:
          validation_context:
            trusted_ca:
              filename: /usr/local/my-client-ca.crt
  clusters:
  - name: some_service
    connect_timeout: 0.25s
    type: STATIC
    lb_policy: ROUND_ROBIN
    hosts: [{ socket_address: { address: 127.0.0.2, port_value: 1234 }}]
    tls_context:
      common_tls_context:
        validation_context:
          trusted_ca:
            filename: /etc/ssl/certs/ca-certificates.crt

/etc/ssl/certs/ca-certificates.crt是Debian系统上系统CA软件包的默认路径。 这使得Envoy以与例如相同的方式验证127.0.0.2:1234的服务器身份。 cURL在标准的Debian安装上执行。 Linux和BSD上的系统CA捆绑包的通用路径是

  • /etc/ssl/certs/ca-certificates.crt (Debian/Ubuntu/Gentoo etc.)
  • /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem (CentOS/RHEL 7)
  • /etc/pki/tls/certs/ca-bundle.crt (Fedora/RHEL 6)
  • /etc/ssl/ca-bundle.pem (OpenSUSE)
  • /usr/local/etc/ssl/cert.pem (FreeBSD)
  • /etc/ssl/cert.pem (OpenBSD)

有关其他TLS选项,请参阅UpstreamTlsContexts和DownstreamTlsContexts的参考。

认证过滤器

Envoy提供了一个网络过滤器,通过从REST VPN服务获取的主体执行TLS客户端身份验证。 此过滤器将提供的客户端证书哈希与主体列表进行匹配,以确定是否允许连接。 可选IP白名单也可以配置。 该功能可用于为Web基础架构构建边缘代理VPN支持。

客户端TLS认证过滤器配置参考。

原文发布于微信公众号 - 智能计算时代(intelligentinterconn)

原文发表时间:2018-01-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏逸鹏说道

熔断器设计模式

如果大家有印象的话,尤其是夏天,如果家里用电负载过大,比如开了很多家用电器,就会”自动跳闸”,此时电路就会断开。在以前更古老的一种方式是”保险丝”,当负载过大,...

2745
来自专栏企鹅号快讯

防止“rm-rf/”误删除的5种方法

到周四了,大家好啊,在raksmart服务器Linux系统下防止“rm -rf /”误删除,不解释了,运维应该在每台服务器都去配置这个问题以减少灾难的发生,下面...

2286
来自专栏开源项目

码云推荐 | 基于 php 的定时计划任务框架 taskPHP

taskPHP 基于原生态 php 开发的定时计划任务框架,利用多进程实现任务的分配和运行,利用原生态php内存共享实现进程间通信,支持 Linux 和 Win...

47010
来自专栏FreeBuf

XXE漏洞利用技巧:从XML到远程代码执行

如果你的应用是通过用户上传处理XML文件或POST请求(例如将SAML用于单点登录服务甚至是RSS)的,那么你很有可能会受到XXE的攻击。XXE是一种非常常见的...

2312
来自专栏ytkah

dedecms如何快速删除跳转的文章(记得清空内容回收站)

  网站内容更新多了,有些页面修改了,这时其他相关页面也要做相应的调整,不然可能会出现404错误,那么dedecms如何快速删除跳转的文章呢?下面就随ytkah...

2746
来自专栏老秦求学

DNS信息

主机A记录: 描述主机地址记录,在dns域名和ip地址之间建立映射关系语法: owner class ttl A IP_v4_address  eg: host...

36914
来自专栏木制robot技术杂谈

用Python模拟登陆微博

前言 最近在研究模拟登陆,看了很多教程,发现基本上都是只教怎么处理后就能登陆成功,没有讲解怎样得到处理的方法。经过的一天的研究,把微博模拟登陆基本上弄清楚了,下...

4009
来自专栏小石不识月

DNS 记录简介

域名系统(DNS,Domain Name System)是因特网的地址簿。DNS 通过映射不容易忘记的域名(例如example.com)到诸如192.0.2.8...

4533
来自专栏安恒网络空间安全讲武堂

上传绕过总结

1.前端代码 2.逻辑绕过 3.文件内容检测 4.文件包含、文件备份 5.容器及语言特性 6.畸形报文 4.文件包含、文件备份 8.SQLI方面 上传文件时WA...

2518
来自专栏月牙寂

k8s源码分析-----kubelet(3)ContainerGC

第一时间获取文章,可以关注本人公众号 月牙寂道长 yueyajidaozhang

3528

扫码关注云+社区