灵活控制流量免于经过Sidecar代理

Sidecar代理用于增强服务调用之间的网络安全性、可靠性以及可观测性,但对于不需要经过Sidecar代理的特定场景,阿里云服务网格ASM支持您灵活控制流量免于经过Sidecar代理。本文介绍如何控制进出流量、目标地址免于经过Sidecar代理。

前提条件

设置进出流量免于经过Sidecar代理

对于性能敏感的场景,某些Pod可能不需要使用服务网格ASM提供的安全认证(如mTLS )和链路追踪(Trace)能力,可以通过设置进出流量是否经过Sidecar代理来实现。本文以配置7001、7002和7005端口的入站流量不经过Sidecar代理,但出站流量经过Sidecar代理为例,实现特定的入站流量免于经过Sidecar代理,降低istio-proxy的资源需求,提升整体性能。同时,由于出站流量经过Sidecar代理,您仍然可以使用服务网格的负载均衡等能力。

为命名空间级别配置Sidecar拦截策略

方式一:通过ASM控制台配置Sidecar拦截策略

以default命名空间为例,通过设置端口使出口流量经过Sidecar代理设置端口使入口流量免于经过Sidecar代理实现命名空间级别配置Sidecar拦截策略。

  1. 登录ASM控制台

  2. 在左侧导航栏,选择服务网格 > 网格管理

  3. 网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理

  4. 在网格详情页面左侧导航栏,选择数据面组件管理 > Sidecar代理配置

  5. Sidecar代理配置页面单击命名空间页签。

  6. 选择default命名空间,单击按端口或地址来启用/禁用Sidecar代理左侧的Istio代理图标,选中并配置如下参数,然后单击更新设置

    参数

    说明

    设置端口使出口流量经过Sidecar代理

    配置为7001,7002,7005

    设置端口使入口流量免于经过Sidecar代理

    配置为7001,7002,7005

  7. 重启Pod,使Sidecar配置生效。

    1. 登录容器服务管理控制台

    2. 在控制台左侧导航栏,单击集群

    3. 集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情

    4. 在集群管理页左侧导航栏,选择工作负载 > 容器组

    5. 容器组页面,单击目标Pod右侧操作列下的更多 > 删除

    6. 在弹出的对话框,单击确定

      稍等一段时间,容器重启后配置生效。

方式二:通过容器服务管理控制台配置Sidecar拦截策略

本文以Deployment为例,通过Annotation方式单独为Pod配置Sidecar拦截策略。更多信息,请参见通过Annotation方式配置Sidecar Proxy

  1. 登录容器服务管理控制台

  2. 在控制台左侧导航栏,单击集群

  3. 集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情

  4. 在集群管理页左侧导航栏,选择工作负载 > 无状态

  5. 无状态页面单击目标应用右侧操作列下的详情

  6. 在应用详情页面右上角单击查看Yaml

  7. 编辑 YAML对话框spec.template.metadata参数下添加如下内容,然后单击更新

    annotations:
      traffic.sidecar.istio.io/excludeInboundPorts: '7001,7002,7005'
      traffic.sidecar.istio.io/includeOutboundPorts: '7001,7002,7005'

    Annotation

  8. 重启Pod,使Sidecar配置生效。

    1. 登录容器服务管理控制台

    2. 在控制台左侧导航栏,单击集群

    3. 集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情

    4. 在集群管理页左侧导航栏,选择工作负载 > 容器组

    5. 容器组页面,单击目标Pod右侧操作列下的更多 > 删除

    6. 在弹出的对话框,单击确定

      稍等一段时间,容器重启后配置生效。

设置特定目标地址免于经过Sidecar代理

本文以配置不拦截对外访问的地址范围为47.XX.XX.144/32为例,具体操作步骤如下。

方式一:通过ASM控制台配置Sidecar拦截策略

  1. 登录ASM控制台

  2. 在左侧导航栏,选择服务网格 > 网格管理

  3. 网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理

  4. 在网格详情页面左侧导航栏,选择数据面组件管理 > Sidecar代理配置

  5. 配置全局或命名空间级别的Sidecar拦截策略。

    • 全局

      1. Sidecar代理配置页面单击全局页签。

      2. 单击按端口或地址来启用/禁用Sidecar代理左侧的Istio代理图标,配置不拦截对外访问的地址范围47.XX.XX.144/32,然后单击更新设置

    • 命名空间

      1. Sidecar代理配置页面单击命名空间页签。

      2. 选择default命名空间,单击按端口或地址来启用/禁用Sidecar代理左侧的Istio代理图标,选中并配置不拦截对外访问的地址范围47.XX.XX.144/32,然后单击更新设置

  6. 重启Pod,使Sidecar配置生效。

    1. 登录容器服务管理控制台

    2. 在控制台左侧导航栏,单击集群

    3. 集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情

    4. 在集群管理页左侧导航栏,选择工作负载 > 容器组

    5. 容器组页面,单击目标Pod右侧操作列下的更多 > 删除

    6. 在弹出的对话框,单击确定

      稍等一段时间,容器重启后配置生效。

方式二:通过容器服务管理控制台配置Sidecar拦截策略

本文以Deployment为例,通过Annotation方式单独为Pod配置Sidecar拦截策略。更多信息,请参见通过Annotation方式配置Sidecar Proxy

  1. 登录容器服务管理控制台

  2. 在控制台左侧导航栏,单击集群

  3. 集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情

  4. 在集群管理页左侧导航栏,选择工作负载 > 无状态

  5. 无状态页面单击目标应用名称。

  6. 在应用详情页面右上角单击查看Yaml

  7. 编辑 YAML对话框spec.template.metadata参数下添加如下内容,然后单击更新

    annotations:
      traffic.sidecar.istio.io/excludeOutboundIPRanges: 47.XX.XX.144/32

    设置特定目标地址免于经过Sidecar代理

  8. 重启Pod,使Sidecar配置生效。

    1. 登录容器服务管理控制台

    2. 在控制台左侧导航栏,单击集群

    3. 集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情

    4. 在集群管理页左侧导航栏,选择工作负载 > 容器组

    5. 容器组页面,单击目标Pod右侧操作列下的更多 > 删除

    6. 在弹出的对话框,单击确定

      稍等一段时间,容器重启后配置生效。

结果验证

配置外部服务访问策略REGISTRY_ONLY,可以更直观的验证流量是否经过Sidecar代理。在REGISTRY_ONLY模式下,如果经过了Sidecar代理,该目标地址会被拦截,显示访问失败;如果没有经过Sidecar代理,则访问成功。

  1. ASM控制台Sidecar代理配置页面,单击全局页签。

  2. 单击外部服务访问策略左侧的Istio代理图标,选中REGISTRY_ONLY,然后单击更新设置

  3. 执行以下命令,访问http://47.XX.XX.144/productpage

    curl -I http://47.XX.XX.144/productpage

    预期输出:配置Sidecar拦截策略设置47.XX.XX.144/32免于经过Sidecar代理后,访问http://47.XX.XX.144/productpage成功,您可以根据实际情况,设置特定目标地址免于经过Sidecar代理。