你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

第 7 层(L7)策略概述(预览版)

网络策略对于通过定义和控制 Pod 通信来保护 Kubernetes 群集至关重要。 它们通过调节流量流来缓解未经授权的访问和潜在的安全漏洞。 高级容器网络服务使用 基于 FQDN 的网络策略增强安全性。 在此基础之上,高级容器网络服务现在提供 L7 策略支持,从而对应用程序级流量进行详细的检查和管理。 这一进步提高了 AKS 群集中网络通信的安全性和效率。 该产品/服务包括对广泛采用的协议的全面支持,包括 HTTP、gRPC 和 Kafka。

L7 策略的组件

Envoy 代理:Envoy 是 ACNS 安全代理中的一部分,作为执行 L7 策略的关键点。 TPROXY 会检查应用程序流量,并将其与定义的 L7 策略进行比较。 为了增强可伸缩性和资源管理,Envoy 部署为独立于 Cilium 代理的单独 DaemonSet。

L7 策略的工作原理

为应用程序或 Pod 启用 L7 策略强制实施时,首先评估传出网络流量,以确定其是否符合配置的应用程序级规则。 附加到源 Pod 的网络接口的 eBPF 探测器给数据包打上标记,然后将其重定向到节点本地的 Envoy 代理。 仅对实施 L7 策略的 Pod 进行此重定向,以确保策略有选择性地应用。

Envoy 代理使用 Cilium 网络筛选器进行扩充,然后根据策略条件决定是否将流量转发到目标 Pod。 如果允许,则流量会继续;如果不允许,Envoy 会将相应的错误代码返回给发起 Pod。 成功授权后,Envoy 代理可促进流量流,从而提供应用程序级别的可见性和控制。 这样,Cilium 代理就可以在策略引擎中强制实施详细的网络策略。 下图展示了 L7 政策执行的高层流程。

显示 L7 策略工作原理的屏幕截图。

使用 Hubble 和 Grafana 监视 L7 流量

为了深入了解 L7 流量流,特别是 HTTP、gRPC 和 Kafka,由 Cilium 提供支持的 Azure CNI 利用 Hubble 代理,后者默认使用高级容器网络服务启用。 Hubble 提供详细的流级别指标。

为了简化对这些 L7 指标的分析,我们提供了预配置的 Azure 托管 Grafana 仪表板。 可以在仪表板 > Azure 托管的 Prometheus 文件夹下找到它们,文件名例如“Kubernetes/Networking/L7(命名空间)”“Kubernetes/Networking/L7(工作负荷)”

这些仪表板提供对群集、命名空间和工作负荷级别的 L7 流数据的精细可见性。

注释

只有在群集上启用了此功能并应用相关策略时,这些仪表板才会显示数据。 此外,监视指标不是必须通过 Envoy(ACNS 安全代理的一个组件)进行传输。 相反,这些指标由 Hubble 代理收集,该代理安装在群集上作为高级容器网络服务的可观测性功能的一部分。

主要优势

精细 Application-Level 控制:L7 策略允许基于特定于应用程序的属性(例如 HTTP 方法、gRPC 路径和 Kafka 主题)对网络流量进行精细控制。 这超出了传统网络策略的基本 IP 地址和基于端口的控制。

增强安全性:通过检查应用程序级流量,L7 策略可以阻止利用应用程序层漏洞的攻击。 这包括阻止对特定 API 或服务的未经授权的访问。 此外,L7 策略是零信任安全策略的重要组成部分,支持在应用程序层强制实施最低特权原则。

正常错误处理:与通常以无提示方式丢弃未经授权的流量的 L3/L4 策略不同,L7 策略可以返回应用程序级错误代码(例如 HTTP 403、Kafka 授权失败),使应用程序能够更正常地处理错误。

可观测性:为应用于 AKS 群集的高级容器网络服务和 L7 策略启用了可观测性,可以使用 Grafana 仪表板监视流量和策略有效性。

限制和注意事项

  • 当前功能支持依赖于基于 HTTP、HTTPS、gRPC 和 Kafka 的 Cilium 第 7 层策略强制实施。
  • 在预览版中,支持的最大群集大小最多为 1,000 个节点或 40,000 个 Pod,以更大者为准。
  • 遍历 Envoy 代理的流量确实具有延迟。 用户可能会遇到超过每秒 3,000 个请求的明显延迟下降。
  • 作为我们的可观测性解决方案的一部分,我们提供了 envoy_http_rq_total 指标。 这些指标提供总请求计数,可用于来推导每秒请求数(rps)。
  • 在 Cilium 升级或推出期间,可以正常关闭现有会话。 应用程序应正常处理这些中断,通常通过在连接或请求级别实现重试机制。 在推出期间启动的新连接不会受到影响。
  • 通过高级容器网络服务 (ACNS) 实现的 L7 策略与通过 Istio 等替代方法实现的 L7 策略不兼容。 下表总结了受支持的方案。
功能/组件 使用 AKS 和 Istio(作为托管加载项)的 L7 策略
由 Cilium 提供支持的 Azure CNI 实现的 K8s 网络策略 已支持
Azure CNI 的 L4(FQDN)策略,由 Cilium 和 ACNS 提供支持。 已支持
由 Cilium 和 ACNS 提供支持的 Azure CNI 实现的 L7 (HTTP(s)/GRPC/Kafka) 策略 不支持

定价

重要

高级容器网络服务是一项付费服务。 有关定价的详细信息,请参阅高级容器网络服务 - 定价

后续步骤