【阅读原文】戳:ASM Ambient 模式如何革新 Kubernetes 出口流量管理
在 Kubernetes 集群中,高效管理应用的出口(Egress)流量是一个绕不开的话题。基础的安全管控可以通过云平台的安全组或 Kubernetes 原生的网络策略(Network Policy)来实现,但这些方法大多停留在网络三、四层,也就是依据 IP 地址和端口进行访问控制。当我们需要更精细化的管理,比如控制应用只能访问某个外部 API 的特定路径,或是对访问外部服务的性能(如 QPS、延迟)进行监控时,这些传统方法便显得捉襟见肘。
为了实现七层(L7)的精细化流量管控,越来越多的企业选择服务网格来管理出口流量。然而,传统的 Sidecar 模式虽然功能强大,其出口流量管理的配置却相对复杂。在 Sidecar 模式下,要让集群内的服务通过出口网关安全的访问一个外部域名,通常需要手动配置 ServiceEntry、Gateway、VirtualService 和 DestinationRule 等多个资源,并确保它们之间正确关联。这个过程不仅对使用者的 Istio 知识储备有一定要求,也很容易因配置疏忽而出错。为了简化这一流程,ASM 虽专门推出了 ASMEgressTrafficPolicy 这一策略资源来打包复杂配置,但仍然对用户有一定的理解成本。
Ambient模式:出口流量管理的新思路
现在,ASM 推出的 Ambient 模式提供了一种更简洁的解决路径。它利用 Waypoint 组件,从根本上改变了现状,显著简化了出口流量的管理流程。
在 Ambient 模式下,管理出口流量的核心步骤被大大简化:
- 定义 ServiceEntry:和 Sidecar 模式一样,您首先需要创建一个 ServiceEntry 资源,将需要访问的外部服务(例如 api.externalservice.com)注册到服务网格中。这一步的目的是让网格能够识别这个外部目标。
- 启用 Waypoint 代理:接下来,您只需为代表外部服务的 ServiceEntry 添加一个标签,即可将其流量交由 Waypoint 代理来处理。
通过这两个简单的步骤,L7 出口流量的管控链路就建立起来了。不再需要手动配置专门的出口网关(Egress Gateway)和复杂的路由规则,Waypoint 代理自动承担了过去需要多个资源组合才能完成的工作。
配置对比:直观感受“大道至简”
这里以管理一个普通的 HTTP 出口服务为例,对比 Sidecar 和 Ambient 模式下的配置复杂度。
apiVersion: networking.istio.io/v1beta1 kind: ServiceEntry metadata: name: external-svc-http spec: hosts: - aliyun.com location: MESH_EXTERNAL ports: - number: 80 name: http protocol: HTTP resolution: DNS --- apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: egress-gateway namespace: default spec: selector: istio: egressgateway servers: - hosts: - '*' port: name: http number: 80 protocol: HTTP tls: mode: ISTIO_MUTUAL --- apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: egressgateway-vs spec: hosts: - aliyun.com gateways: - egress-gw - mesh http: - match: - gateways: - mesh port: 80 route: - destination: host: istio-egressgateway.istio-system.svc.cluster.local port: number: 80 weight: 100 - match: - gateways: - egress-gw port: 80 route: - destination: host: aliyun.com port: number: 80 weight: 100
这里配置的 Gateway 和 VirtualService 比较高阶,对于初学者而言理解和排错都颇具挑战。
Ambient 模式下,外部流量配置变得十分简洁:
# 部署Waypoint # 支持共享Waypoint,如果已经有Waypoint,可以跳过这一步 apiVersion: gateway.networking.k8s.io/v1 kind: Gateway metadata: name: waypoint spec: gatewayClassName: istio-waypoint listeners: - name: mesh port: 15008 protocol: HBONE --- apiVersion: networking.istio.io/v1beta1 kind: ServiceEntry metadata: name: external-svc-http labels: istio.io/use-waypoint: waypoint spec: hosts: - aliyun.com location: MESH_EXTERNAL ports: - number: 80 name: http protocol: HTTP resolution: DNS
是的,这就是全部所需配置。通过一个简单的标签,就将复杂的出口路由逻辑委托给了 Waypoint,实现了配置的极致简化。
Ambient 模式带来的实际好处
这种简化的工作流,为出口流量管理带来了实实在在的便利:
- 配置极大简化:将过去需要配置多个关联资源的复杂任务,简化为“一个”。这大大降低了服务网格的使用门槛和运维负担。
- 功能不打折扣:尽管配置简化,但强大的 L7 管控能力依然保留。您可以通过 AuthorizationPolicy、DestinationRule、VirtualService 等策略,精确控制哪些内部服务可以访问外部API 的哪些路径,或者对出口流量执行重试、超时等,之前的 TLS 升级也依旧支持。
- 完善的可观测能力:所有经由 Waypoint 代理的出口流量都会被自动记录。您可以轻松获取访问外部服务的 QPS、P99 延迟、请求成功率等关键指标,而无需修改任何应用代码。
总而言之,ASM Ambient 模式为复杂的 L7 出口流量管理提供了一条更平坦的路径。它通过 Waypoint 代理剥离了繁琐的配置细节,让开发者和运维团队能更专注于实现业务所需的安全与可观测性策略,而非底层设施的搭建。
ASM 已在 1.25 版本中正式支持 Ambient 模式,欢迎广大用户升级体验,共同迈入服务网格的极简时代。您可以点击阅读原文参考 ASM 官方文档获取更多信息。
我们是阿里巴巴云计算和大数据技术幕后的核心技术输出者。
获取关于我们的更多信息~