在大规模微服务场景下,当您需要快速高效地处理大量并发HTTPS请求时,可以启用Multi-Buffer加速Envoy代理对TLS(Transport Layer Security)的处理,提升数据包的加解密速度,减少网络延迟,提升整个系统的并发处理能力和通信安全性。
前提条件
已创建ASM商业版(企业版或者旗舰版)实例,且实例为1.10及以上版本。具体操作,请参见创建ASM实例。
已创建ACK集群,且集群节点的实例规格族需要支持Multi-Buffer CPU机型Intel Ice Lake。具体操作,请参见创建ACK托管集群。
已添加集群到ASM实例。具体操作,请参见添加集群到ASM实例。
背景信息
随着网络安全技术的发展,TLS已经成为网络通信的基石。一个TLS会话的处理过程总体上可分为握手阶段和数据传输阶段。握手阶段最重要的任务是使用非对称加密技术协商出一个会话密钥,然后在数据传输阶段,使用该会话密钥对数据执行对称加密操作,再进行数据传输。
在微服务场景下,Envoy无论是作为Ingress Gateway还是作为微服务的代理,都需要处理大量的TLS请求,尤其在握手阶段执行非对称加解密的操作时,需要消耗大量的CPU资源,在大规模微服务场景下这可能会成为一个瓶颈。ASM结合Intel的Multi-Buffer加解密技术,可以加速Envoy中TLS的处理过程。
Multi-Buffer加解密技术使用Intel CPU AVX-512指令同时处理多个独立的缓冲区,即可以在一个执行周期内同时执行多个加解密的操作,成倍的提升加解密的执行效率。Multi-Buffer技术不需要额外的硬件,只需要CPU包含特定的指令集。目前阿里云在Ice Lake处理器中已经包含了最新的AVX-512指令集。
操作步骤
方式一:全局开启
-
登录ASM控制台,在左侧导航栏,选择。
-
在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择。
在基本信息页面右侧,单击功能设置。
在功能设置更新面板,选中启用基于MultiBuffer的TLS加解密性能优化,然后单击确定。
如果您使用通用型实例规格族g7作为Kubernertes节点,启用Multi-Buffer功能后,每秒查询率(QPS)将提升75%的性能;如果您使用的是弹性裸金属节点,提升的性能将更高。
方式二:网关实例级别开启
未创建ASM网关
-
登录ASM控制台,在左侧导航栏,选择。
-
在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择。
在入口网关页面,单击创建,在创建页面的高级选项区域,选中启用基于MultiBuffer的TLS加解密性能优化,进行相关配置,然后单击创建。
关于配置项的详细说明,请参见创建入口网关。
配置项
说明
支持的节点亲和性标签选择
根据节点标签匹配性能优化的节点。
轮询延时(毫秒)
该配置项通常不需要您手动调整。
Multibuffer的原理是同时处理多个加解密操作。例如Multibuffer可以同时处理8个加解密操作,若请求数量不足8个,则会等待一段时间,直到请求达到8个才会进行处理。如果请求量比较大,很快就能满足8个的处理条件;如果请求量比较小,可能很长时间都满足不了8个的处理条件。此时如果您指定了轮询延迟,当超过这个时间时,即使没有满足8个的处理条件,Multibuffer也会批量对已经有的请求进行加解密,减少等待时间。
已创建ASM网关
-
登录ASM控制台,在左侧导航栏,选择。
-
在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择。
关于配置项的详细说明,请参见创建入口网关。
在入口网关页面,单击目标网关名称,在页面的高级选项区域,单击性能优化右侧的
图标,选中启用基于MultiBuffer的TLS加解密性能优化,进行相关配置,然后单击确认配置项
说明
支持的节点亲和性标签选择
根据节点标签匹配性能优化的节点。
轮询延时(毫秒)
该配置项通常不需要您手动调整。
Multibuffer的原理是同时处理多个加解密操作。例如Multibuffer可以同时处理8个加解密操作,若请求数量不足8个,则会等待一段时间,直到请求达到8个才会进行处理。如果请求量比较大,很快就能满足8个的处理条件;如果请求量比较小,可能很长时间都满足不了8个的处理条件。此时如果您指定了轮询延迟,当超过这个时间时,即使没有满足8个的处理条件,Multibuffer也会批量对已经有的请求进行加解密,减少等待时间。
方式三:Pod级别开启
使用该方式需要ASM为1.14.3及以上版本。关于升级实例的具体操作,请参见升级ASM实例。
确保Pod会被调度到支持Multi-Buffer的节点上。
为Pod配置一个特殊的annotations。
annotations示例如下:
proxy.istio.io/config: | privateKeyProvider: cryptomb: pollDelay: 10ms重启Pod使配置生效。
FAQ
控制面启用了MultiBuffer功能,但数据面Kubernetes集群下的节点不是Intel Ice Lake的机型,有什么影响?
Envoy会输出告警日志,且MultiBuffer功能将不会生效。
2021-11-09T15:24:03.269127Z info sds service generate, Multibuffer enable: true
2021-11-09T15:24:03.269158Z info cache returned workload trust anchor from cache ttl=23h59m59.730845791s
2021-11-09T15:24:03.269177Z info proxyConfig: config_path:"/etc/istio/proxy" binary_path:"/usr/local/bin/envoy" service_cluster:"istio-ingressgateway" drain_duration:<seconds:45 > parent_shutdown_duration:<seconds:60 > discovery_address:"istiod.istio-system.svc:15012" proxy_admin_port:15000 control_plane_auth_policy:MUTUAL_TLS stat_name_length:189 concurrency:<> tracing:<zipkin:<address:"zipkin.istio-system:9411" > > proxy_metadata:<key:"DNS_AGENT" value:"" > status_port:15020 termination_drain_duration:<seconds:5 > multi_buffer:<enabled:true poll_delay:<nanos:20000000 > >
2021-11-09T15:24:03.269185Z info sds service generate, Multibuffer enable: true
2021-11-09T15:24:03.269211Z info cache returned workload certificate from cache ttl=23h59m59.730792927s
2021-11-09T15:24:03.269223Z info pollDelay config: 20ms
2021-11-09T15:24:03.269456Z info sds SDS: PUSH resource=ROOTCA
2021-11-09T15:24:03.269589Z info sds SDS: PUSH resource=default
2021-11-09T15:24:03.270330Z warning envoy config gRPC config for type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret rejected: Multi-buffer CPU instructions not available.
2021-11-09T15:24:03.271696Z warn ads ADS:SDS: ACK ERROR router~172.18.96.137~istio-ingressgateway1-d7447cb55-khr8s.istio-system~istio-system.svc.cluster.local-2 Internal:Multi-buffer CPU instructions not available.
2021-11-09T15:24:04.309379Z info Initialization took 1.267025329s
2021-11-09T15:24:04.309416Z info Envoy proxy is ready
2021-11-09T15:24:04.458149Z warning envoy config gRPC config for type.googleapis.com/envoy.config.cluster.v3.Cluster rejected: Error adding/updating cluster(s) outbound|15021||istio-ingressgateway1.istio-system.svc.cluster.local: Multi-buffer CPU instructions not available., outbound|80||istio-ingressgateway1.istio-system.svc.cluster.local: Multi-buffer CPU instructions not available., outbound|443||istio-ingressgateway1.istio-system.svc.cluster.local: Multi-buffer CPU instructions not available.ASM 1.10及以上的企业版或旗舰版提供了开启TLS加速时的自适应判断能力,若业务或者网关Pod被调度到的Node节点为非Intel Ice Lake机型,则不会下发对应的加速配置,TLS加速不会生效。
如何添加支持MultiBuffer的节点到集群中,并启用MultiBuffer?
在Kubernetes集群添加新的节点,且节点的实例规格需要支持Multi-Buffer CPU机型Intel Ice Lake。具体操作,请参见添加已有节点。
在新添加的节点上设置
multibuffer-support:true标签。具体操作,请参见管理节点标签和污点。在ASM网关的YAML配置中添加以下内容。具体操作,请参见ASM网关CRD说明。
通过增加节点亲和性,使Gateway实例调度到新添加的支持Multi-Buffer功能的节点上。
affinity: nodeAffinity: preferredDuringSchedulingIgnoredDuringExecution: - preference: matchExpressions: - key: feature.node.kubernetes.io/mb-feature-enabled operator: In values: - 'true' weight: 1在ASM企业版或旗舰版实例中启用MultiBuffer功能。具体操作,请参见上文启用MultiBuffer。
启用MultiBuffer功能后,该集群新添加的节点即可使用MultiBuffer功能,加速TLS处理过程。
相关文档
ASM提供了服务发现范围配置、Sidecar资源推荐和自适应配置推送优化功能,帮助您优化控制平面的配置推送效率与Sidecar的配置大小。更多信息,请参见配置推送优化概述。