服务网格 ASM(Service Mesh)在出口流量管理方面,提供了多种灵活且高效的解决方案,为应用程序的安全性、可观测性和可靠性提供支持。本文将介绍ASM在出口流量管理方面提供的多种功能以及为什么要使用ASM出口网关。
丰富的出口流量管理能力
服务网格提供了丰富的管理L7出口流量的能力(流量路由、可观测、安全等),您可以根据需求选择要如何进行配置来实现相应的功能。
如果应用直接发起HTTPS请求,网格代理只能将其当成普通的TLS流量处理,网格的L7能力将会失效。因此,请确保您的应用发出的请求为HTTP明文请求。网格会根据您的配置,直接将HTTP请求转发给外部服务,或者自动将请求转换成HTTPS请求发往外部服务。
流量路由
在访问集群外HTTP服务时,您只需要在服务网格中配置对应的Service Entry,就可以使用例如出口镜像流量、出口流量按比例路由和虚拟服务中的其他高级能力。如果您访问的服务是HTTPS协议,需要再配置一个对应的DestinationRule。流量路由能力并不依赖ASM出口网关。
观测出口流量
如果请求是明文流量,您无需做任何操作即可通过日志、监控指标和链路追踪等方式观测出口流量。如果请求的流量需要加密,您只需要配置Service Entry和DestinationRule。应用发起明文流量,Sidecar自动将明文流量加密后进行转发。此时可以使用网格完整的可观测能力,该功能并不依赖ASM出口网关。
出口流量认证/鉴权
ASM针对集群的出口流量同样提供了丰富的认证/授权能力。您可以在ASM中实现校验出口流量的JWT、基于请求的L7/L4元数据限制特定客户端访问等高级安全能力。这些能力需要使用ASM出口网关来实现,请参见出口流量安全模型。
出口流量安全模型
对于纯TCP流量(非HTTP、非TLS),推荐您使用Kubernetes原生提供的NetworkPolicy来增强其安全性。
默认行为
ALLOW_ANY,网格代理不做任何事情。此时出口流量的行为完全不受控。安全级别最低。
REGISTRY_ONLY
开启REGISTRY_ONLY,应用只能访问通过Service Entry注册过的服务。
由于应用所有者有权限更改业务Pod的配置,有很多种方式可以让出口流量绕过Sidecar代理。如果请求绕过Sidecar代理,REGISTRY_ONLY提供的访问限制将会失效,此时应用可以不受限制的访问外部服务。因此,REGISTRY_ONLY并不能作为有效的安全策略。
此外,该方案只能限制指定命名空间的工作负载访问外部服务,无法将控制范围缩小到特定工作负载级别。
REGISTRY_ONLY和出口网关
出口网关可以作为理想的安全边界。作为一个单独的Deployment,其部署行为由网格管理员完全控制,应用所有者无法直接控制出口网关以及其上的安全策略。
同时,确保只有出口网关所在的节点可以访问外部服务,其余节点均无法访问外部服务。业务Pod无法直接访问外网,如果要让流量成功发往外部服务,应用所有者需要确保自己的应用对外访问的流量成功被Sidecar代理,并按照预期被转发给出口网关。
流量被透明转发到出口网关之后:
可以在出口网关上配置授权策略,实现细粒度的授权策略或接入自定义授权服务。
如果要访问的服务是HTTPS服务,可以在出口网关上配置HTTPS升级。出口网关会管理自动HTTPS连接,可以实现跨工作负载的HTTPS连接复用,提升性能。
和云防火墙配合使用
当您使用云防火墙严格限制 VPC 或 NAT 网关的出向流量时,必须为 ASM 出口网关的 Pod 分配一个固定的、可预测的 IP 地址范围,并将其在防火墙策略中加入白名单。
为实现这一目标,核心思路是确保出口网关 Pod 使用独立的、仅供其使用的 IP 地址段。在阿里云 ACK 集群中,我们提供以下两种实现方式:
使用 Terway CNI 为 Pod 分配固定 IP(推荐)。
如果您的 ACK 集群网络模式为 Terway,可以直接利用其原生能力为出口网关 Pod 分配固定 IP,并关联独立的虚拟 交换机和安全组。这是最直接、最简洁的方案。具体操作,请参见为Pod配置固定IP及独立虚拟交换机、安全组。
使用主机网络(HostNetwork)间接为Pod分配固定IP。
当无法使用方式一时,可以通过以下步骤,将出口网关 Pod 的 IP 间接固定为其所在节点的 IP:
创建独占节点池:创建一个专用的节点池,专门用于运行出口网关。确保此节点池的 IP 范围与集群中其他业务 Pod 的 IP 范围不重叠。具体操作,请参见创建和管理节点池。
添加节点污点 (Taint):为该节点池中的所有节点添加污点,以防止其他无关的 Pod 被调度到此节点池。
配置出口网关:修改出口网关的部署配置,使其:
启用主机网络模式 (
hostNetwork: true
。添加相应的容忍度 (Tolerations),以匹配专用节点池的污点。
配置亲和性 (Affinity),确保 Pod 必须或优先调度到该独占节点池。
完成以上述配置后,出口网关 Pod 将使用其所在节点的 IP 地址作为出口 IP。您只需将该独占节点池的 IP 网段加入云防火墙白名单即可。
相关文档
ASM提供了EgressTrafficPolicy资源,可以快速完成通过出口网关访问集群外服务的流量规则配置。具体信息,请参见使用ASMEgressTrafficPolicy管理出口流量。