Sidecar代理用于增强服务调用之间的网络安全性、可靠性以及可观测性,但对于不需要经过Sidecar代理的特定场景,阿里云服务网格ASM支持您灵活控制流量免于经过Sidecar代理。本文介绍如何控制进出流量、目标地址免于经过Sidecar代理。
前提条件
已创建ASM实例。具体操作,请参见创建ASM实例。
已创建Kubernetes托管版集群。具体操作,请参见创建ACK托管集群。
已添加集群到ASM实例。具体操作,请参见添加集群到ASM实例。
已部署入口网关。具体操作,请参见创建入口网关。
设置进出流量免于经过Sidecar代理
对于性能敏感的场景,某些Pod可能不需要使用服务网格ASM提供的安全认证(如mTLS )和链路追踪(Trace)能力,可以通过设置进出流量是否经过Sidecar代理来实现。本文以配置7001、7002和7005端口的入站流量不经过Sidecar代理,但出站流量经过Sidecar代理为例,实现特定的入站流量免于经过Sidecar代理,降低istio-proxy的资源需求,提升整体性能。同时,由于出站流量经过Sidecar代理,您仍然可以使用服务网格的负载均衡等能力。
方式一:通过ASM控制台配置Sidecar拦截策略
以default命名空间为例,通过设置端口使出口流量经过Sidecar代理、设置端口使入口流量免于经过Sidecar代理实现命名空间级别配置Sidecar拦截策略。
登录ASM控制台。
在左侧导航栏,选择 。
在网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理。
在网格详情页面左侧导航栏,选择 。
在Sidecar代理配置页面单击命名空间页签。
选择default命名空间,单击按端口或地址来启用/禁用Sidecar代理左侧的图标,选中并配置如下参数,然后单击更新设置。
参数
说明
设置端口使出口流量经过Sidecar代理
配置为7001,7002,7005。
设置端口使入口流量免于经过Sidecar代理
配置为7001,7002,7005。
重启Pod,使Sidecar配置生效。
登录容器服务管理控制台。
在控制台左侧导航栏,单击集群。
在集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情。
在集群管理页左侧导航栏,选择 。
在容器组页面,单击目标Pod右侧操作列下的 。
在弹出的对话框,单击确定。
稍等一段时间,容器重启后配置生效。
方式二:通过容器服务管理控制台配置Sidecar拦截策略
本文以Deployment为例,通过Annotation方式单独为Pod配置Sidecar拦截策略。更多信息,请参见通过Annotation方式配置Sidecar Proxy。
登录容器服务管理控制台。
在控制台左侧导航栏,单击集群。
在集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情。
在集群管理页左侧导航栏,选择 。
在无状态页面单击目标应用右侧操作列下的详情。
在应用详情页面右上角单击查看Yaml。
在编辑 YAML对话框spec.template.metadata参数下添加如下内容,然后单击更新。
annotations: traffic.sidecar.istio.io/excludeInboundPorts: '7001,7002,7005' traffic.sidecar.istio.io/includeOutboundPorts: '7001,7002,7005'
重启Pod,使Sidecar配置生效。
登录容器服务管理控制台。
在控制台左侧导航栏,单击集群。
在集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情。
在集群管理页左侧导航栏,选择 。
在容器组页面,单击目标Pod右侧操作列下的 。
在弹出的对话框,单击确定。
稍等一段时间,容器重启后配置生效。
设置特定目标地址免于经过Sidecar代理
本文以配置不拦截对外访问的地址范围为47.XX.XX.144/32为例,具体操作步骤如下。
方式一:通过ASM控制台配置Sidecar拦截策略
登录ASM控制台。
在左侧导航栏,选择 。
在网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理。
在网格详情页面左侧导航栏,选择 。
配置全局或命名空间级别的Sidecar拦截策略。
全局
在Sidecar代理配置页面单击全局页签。
单击按端口或地址来启用/禁用Sidecar代理左侧的图标,配置不拦截对外访问的地址范围为47.XX.XX.144/32,然后单击更新设置。
命名空间
在Sidecar代理配置页面单击命名空间页签。
选择default命名空间,单击按端口或地址来启用/禁用Sidecar代理左侧的图标,选中并配置不拦截对外访问的地址范围为47.XX.XX.144/32,然后单击更新设置。
重启Pod,使Sidecar配置生效。
登录容器服务管理控制台。
在控制台左侧导航栏,单击集群。
在集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情。
在集群管理页左侧导航栏,选择 。
在容器组页面,单击目标Pod右侧操作列下的 。
在弹出的对话框,单击确定。
稍等一段时间,容器重启后配置生效。
方式二:通过容器服务管理控制台配置Sidecar拦截策略
本文以Deployment为例,通过Annotation方式单独为Pod配置Sidecar拦截策略。更多信息,请参见通过Annotation方式配置Sidecar Proxy。
登录容器服务管理控制台。
在控制台左侧导航栏,单击集群。
在集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情。
在集群管理页左侧导航栏,选择 。
在无状态页面单击目标应用名称。
在应用详情页面右上角单击查看Yaml。
在编辑 YAML对话框spec.template.metadata参数下添加如下内容,然后单击更新。
annotations: traffic.sidecar.istio.io/excludeOutboundIPRanges: 47.XX.XX.144/32
重启Pod,使Sidecar配置生效。
登录容器服务管理控制台。
在控制台左侧导航栏,单击集群。
在集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情。
在集群管理页左侧导航栏,选择 。
在容器组页面,单击目标Pod右侧操作列下的 。
在弹出的对话框,单击确定。
稍等一段时间,容器重启后配置生效。
结果验证
配置外部服务访问策略为REGISTRY_ONLY,可以更直观的验证流量是否经过Sidecar代理。在REGISTRY_ONLY模式下,如果经过了Sidecar代理,该目标地址会被拦截,显示访问失败;如果没有经过Sidecar代理,则访问成功。
在ASM控制台的Sidecar代理配置页面,单击全局页签。
单击外部服务访问策略左侧的图标,选中REGISTRY_ONLY,然后单击更新设置。
执行以下命令,访问http://47.XX.XX.144/productpage。
curl -I http://47.XX.XX.144/productpage
预期输出:设置47.XX.XX.144/32免于经过Sidecar代理后,访问http://47.XX.XX.144/productpage成功,您可以根据实际情况,设置特定目标地址免于经过Sidecar代理。