What this!理清服务网格中Sidecar代理的流量拦截配置

简介: 作为业内首个全托管Istio兼容的阿里云服务网格产品ASM,一开始从架构上就保持了与社区、业界趋势的一致性,控制平面的组件托管在阿里云侧,与数据面侧的用户集群独立。ASM产品是基于社区Istio定制实现的,在托管的控制面侧提供了用于支撑精细化的流量管理和安全管理的组件能力。通过托管模式,解耦了Istio组件与所管理的K8s集群的生命周期管理,使得架构更加灵活,提升了系统的可伸缩性。从2022年4月

作为业内首个全托管Istio兼容的阿里云服务网格产品ASM,一开始从架构上就保持了与社区、业界趋势的一致性,控制平面的组件托管在阿里云侧,与数据面侧的用户集群独立。ASM产品是基于社区Istio定制实现的,在托管的控制面侧提供了用于支撑精细化的流量管理和安全管理的组件能力。通过托管模式,解耦了Istio组件与所管理的K8s集群的生命周期管理,使得架构更加灵活,提升了系统的可伸缩性。从2022年4月1日起,阿里云服务网格ASM正式推出商业化版本, 提供了更丰富的能力、更大的规模支持及更完善的技术保障,更好地满足客户的不同需求场景,详情可进入阿里云官方网站 - 搜索服务网格ASM。

在服务网格中,对于Sidecar代理的配置是一块重要的独立内容。根据使用者的业务场景和具体需求,网格使用者往往需要针对性地为Sidecar代理应用不同的配置。配置的种类包括容器资源配置、请求拦截配置、声明周期配置、监控配置等等。

对流量拦截的配置是很多用户都亟需使用的功能,在实际的业务环境中,往往需要根据一些具体需求,在针对某些入口或出口流量时停止Sidecar的拦截。比如,某个业务容器需要使用某种自定义的协议对其依赖的服务进行请求,在Sidecar代理对该协议没有良好支持的情况下,需要针对性地将访问该服务的流量配置禁用Sidecar代理拦截,让所有相关流量绕过Sidecar代理。

针对常见的Sidecar流量拦截配置场景,社区服务网格istio提供了一些配置项,包括excludeOutboundIPRanges、includeOutboundIPRanges、excludeOutboundPorts、includeOutboundPorts、excludeInboundPorts和includeInboundPorts。服务网格ASM针对这些配置项提供了兼容的对应配置入口,以帮助用户灵活地针对Sidecar代理的流量拦截行为进行定制。服务网格ASM对应提供的配置项包括:拦截对外访问的地址范围、不拦截对外访问的地址范围、设置端口使出口流量免于经过Sidecar代理、设置端口使出口流量经过Sidecar代理、设置端口使入口流量免于经过Sidecar代理、设置端口使入口流量经过Sidecar代理。

OMG,WHAT THIS!一口气说完这些配置项名字,其难度已经不亚于连念100遍“吃葡萄不吐葡萄皮”了,而这些配置项到底如何生效、彼此之间关系究竟如何,则更可说是扑朔迷离。

各位不要着急,本文就来捋一捋这些配置项,看看能不能给诸位捋明白。

入口流量拦截配置

首先我们对这几个配置项进行分类。对于Sidecar代理来说,其拦截的流量分为两种:

  • 入口流量:由外部客户端发往本工作负载的流量
  • 出口流量:由本工作负载发往外部其他服务的流量

对应的,对Sidecar代理拦截行为的配置也分为针对入口流量的配置和针对出口流量的配置。我们先来看相对简单一点的针对入口流量的拦截配置,这包括设置端口使入口流量免于经过Sidecar代理 和 设置端口使入口流量经过Sidecar代理。

对于入口流量来说,由于流量的目的地肯定是本工作负载,我们只关注流量发往的端口,该端口也就是业务容器提供服务时所监听的端口。对于入口流量拦截的这两项配置,我们都可以配置一个以逗号分隔的端口列表,来指定需要拦截/不需要拦截的容器端口。即:

  • 设置端口使入口流量免于经过Sidecar代理:发往 指定端口 的请求将 不会被 Sidecar代理拦截。
  • 设置端口使入口流量经过Sidecar代理:发往 指定端口 的请求将 Sidecar代理拦截。此项可以被配置为“*”,代表拦截所有端口上的入口流量。

可以看到,这两项配置项的效果是截然相反的,那么同时配置时究竟谁会生效呢?

实际上,“设置端口使入口流量免于经过Sidecar代理”只有在“设置端口使入口流量经过Sidecar代理”被配置为“*”的情况下才能生效。而在上述的免于经过Sidecar代理的配置生效的情况下,则Sidecar代理将优先不拦截请求。

出口流量拦截配置

相对入口流量来说,出口流量的拦截配置要更加复杂一些,由于每一条出口流量都包含两个属性:

  • 出口流量的目标服务IP地址
  • 出口流量的目标服务端口

因此,针对这两项出口流量属性,各有两项配置项来规定当遇到属性匹配的出口流量时,Sidecar代理是否要对该出口流量进行拦截。

针对出口流量的目标服务IP地址:

  • 拦截对外访问的地址范围:发往 指定地址范围 内的请求 将会 被拦截
  • 不拦截对外访问的地址范围:发往 指定地址范围 内的请求 将不会 被拦截

针对出口流量的目标服务端口:

  • 设置端口使出口流量免于经过Sidecar代理:发往 指定服务端口 的请求 将会 被拦截
  • 设置端口使出口流量经过Sidecar代理:发往 指定服务端口 的请求 将不会 被拦截

针对出口流量的拦截行为,有上述4个配置项都可以对其产生影响,那么这四项配置之间到底是怎样的关系呢?

您可以效仿下面的做法,针对出口流量的拦截行为做如下的配置,并测试Sidecar代理是否对请求进行了拦截。一些现象如下:

  • 当地址设置不拦截,端口配置经过代理时:不拦截
  • 当地址不配置,端口配置经过代理:拦截
  • 当地址设置拦截,端口配置免于代理时:不拦截
  • 当地址不配置,端口配置免于代理时:不拦截

总结下来,对于一条出口流量请求,您可以根据以下的原则判断Sidecar代理是否会对其进行拦截:

  1. 当请求的目的地址位于“拦截对外访问的地址范围”的范围之内时、 或者 请求目标服务端口位于“设置端口使出口流量经过Sidecar代理”的端口列表之中时,Sidecar 将会 拦截请求
  2. 当请求的目的地址位于“不拦截对外访问的地址范围”的范围之内时、 或者 请求目标服务端口位于“设置端口使出口流量免于经过Sidecar代理”的端口列表之中时,Sidecar 将不会 拦截请求
  3. 如果判断请求同时满足了拦截与不拦截的条件,则 不拦截优先 ,Sidecar 将不会 拦截请求。

全局默认值

在默认情况下,服务网格ASM对Sidecar代理的流量拦截配置如下:

如您所见,“拦截对外访问的地址范围”与“设置端口使入口流量经过Sidecar代理”被设定为“*”,而其他项都为空,这将保证Sidecar代理默认拦截到所有的入口与出口流量。您可以在此基础上,为Sidecar代理定制自己的流量拦截行为。‍♀️

相关文章
|
Linux Windows
uboot配置时ln: failed to create symbolic link ‘asm’
uboot配置时ln: failed to create symbolic link ‘asm’
193 2
|
5月前
|
Cloud Native 容器 Kubernetes
基于阿里云服务网格流量泳道的全链路流量管理(三):无侵入式的宽松模式泳道
本文简要讨论了使用流量泳道来实现全链路流量灰度管理的场景与方案,并回顾了阿里云服务网格 ASM 提供的严格与宽松两种模式的流量泳道、以及这两种模式各自的优势与挑战。接下来介绍了一种基于 OpenTelemetry 社区提出的 baggage 透传能力实现的无侵入式的宽松模式泳道,这种类型的流量泳道同时具有对业务代码侵入性低、同时保持宽松模式的灵活特性的特点。同时,我们还介绍了新的基于权重的流量引流策略,这种策略可以基于统一的流量匹配规则,将匹配到的流量以设定好的比例分发到不同的流量泳道。
73529 16
基于阿里云服务网格流量泳道的全链路流量管理(三):无侵入式的宽松模式泳道
|
4月前
|
人工智能 自然语言处理 安全
使用阿里云服务网格高效管理LLM流量:(一)流量路由
ASM支持通过LLMProvider和LLMRoute资源管理大型语言模型流量。LLMProvider负责注册LLM服务,LLMRoute负责设定流量规则,应用可灵活切换模型,满足不同场景需求。
|
5月前
|
Java
使用ASM动态生成类的拦截代理类
使用ASM动态生成类的拦截代理类
58 0
|
6月前
|
存储 Oracle 关系型数据库
RAC创建ASM磁盘组时配置多路径和UDEV
RAC创建ASM磁盘组时配置多路径和UDEV
1374 7
|
运维 Serverless API
两全其美,Sidecarless 与 Sidecar 模式融合的服务网格新形态
本文主要介绍 ASM 如何落地这种 Sidecarless 和 Sidecar 模式融合的服务网格新形态,以及服务网格的 Serverless 化。
53026 25
|
Kubernetes API 容器
基于阿里云服务网格流量泳道的全链路流量管理(二):宽松模式流量泳道
基于阿里云服务网格流量泳道的全链路流量管理(二):宽松模式流量泳道
10971 13
|
Kubernetes Cloud Native 安全
基于阿里云服务网格流量泳道的全链路流量管理(一)严格模式流量泳道
灰度发布是一种常见的对新版本应用服务的发布手段,其特点在于能够将流量在服务的稳定版本和灰度版本之间时刻切换,以帮助我们用更加可靠的方式实现服务的升级。
29955 18
|
6月前
|
Kubernetes Cloud Native 测试技术
使用ASM流量泳道的全链路灰度发布实践
服务网格ASM实现全链路灰度发布:通过流量泳道隔离不同版本环境,配置虚拟服务实现灰度比例控制。从创建泳道、打标签、部署新版本到灰度切流、最终上线及下线旧版。
|
负载均衡 安全 Cloud Native
[大厂实践] 零配置服务网格与按需集群发现
[大厂实践] 零配置服务网格与按需集群发现
93 0