服务网格 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连接复用,提升性能。
相关文档
ASM提供了EgressTrafficPolicy资源,可以快速完成通过出口网关访问集群外服务的流量规则配置。具体信息,请参见使用ASMEgressTrafficPolicy管理出口流量。