监控被阻止和直通的外部服务流量

如何使用 Istio 监控被阻止和直通的外部流量。

2019 年 9 月 28 日 | 作者:Neeraj Poddar - Aspen Mesh

了解、控制和保护您的外部服务访问是您从 Istio 等服务网格获得的主要优势之一。从安全和运营角度来看,监控被阻止的外部服务流量至关重要,因为它们可能会暴露可能的错误配置或安全漏洞,例如如果应用程序尝试与它不应该被允许访问的服务通信。类似地,如果您目前有一个允许任何外部服务访问的策略,那么监控流量将有助于您逐步添加显式 Istio 配置以允许访问并更好地保护您的集群。无论哪种情况,通过遥测获得对该流量的可视性都非常有帮助,因为它使您能够创建警报和仪表板,并更好地推理您的安全态势。这是 Istio 生产用户强烈要求的功能,我们很高兴在 1.3 版本中添加了对该功能的支持。

为了实现这一点,Istio 默认指标 已通过显式标签进行扩充,以捕获被阻止和直通的外部服务流量。本博文将介绍如何使用这些扩充的指标来监控所有外部服务流量。

Istio 控制平面使用名为 BlackHoleCluster 和 Passthrough 的预定义集群来配置 sidecar 代理,分别阻止或允许所有流量。为了了解这些集群,让我们从 Istio 服务网格中外部服务和内部服务意味着什么开始。

外部服务和内部服务

内部服务被定义为属于您的平台且被认为在网格中的服务。对于内部服务,Istio 控制平面默认情况下会向 sidecar 提供所有必需的配置。例如,在 Kubernetes 集群中,Istio 会为所有 Kubernetes 服务配置 sidecar,以保留所有服务能够相互通信的默认 Kubernetes 行为。

外部服务是指不属于您的平台的服务,即在网格之外的服务。对于外部服务,Istio 提供两种选择,一是阻止所有外部服务访问(通过将 global.outboundTrafficPolicy.mode 设置为 REGISTRY_ONLY 来启用),二是允许对外部服务的所有访问(通过将 global.outboundTrafficPolicy.mode 设置为 ALLOW_ANY 来启用)。此设置的默认选项(截至 Istio 1.3)是允许所有外部服务访问。此选项可以通过 网格配置 进行配置。

这就是 BlackHole 和 Passthrough 集群的使用场景。

什么是 BlackHole 和 Passthrough 集群?

在 Istio 1.3 之前,没有报告指标,或者如果报告指标,则在流量命中这些集群时没有设置显式标签,导致缺乏对流经网格的流量的可视性。

下一节将介绍如何利用这种增强功能,因为发出的指标和标签取决于是否命中虚拟出站或显式端口/协议侦听器。

使用扩充的指标

为了捕获两种情况下(BlackHole 或 Passthrough)的所有外部服务流量,您需要监控 istio_requests_totalistio_tcp_connections_closed_total 指标。根据被调用的 Envoy 侦听器类型,即 TCP 代理或 HTTP 代理,其中一个指标将被递增。

此外,在 TCP 代理侦听器的情况下,为了查看通过 BlackHole 或 Passthrough 集群被阻止或允许的外部服务的 IP 地址,您需要将 destination_ip 标签添加到 istio_tcp_connections_closed_total 指标。在这种情况下,不会捕获外部服务的主机名。此标签默认情况下不会添加,可以通过扩展 Istio 配置以生成属性和 Prometheus 处理程序来轻松添加。如果您有许多服务且 IP 地址不稳定,则应注意时间序列中的基数爆炸问题。

PassthroughCluster 指标

本节解释了基于 Envoy 中调用的侦听器类型发出的指标和标签。

BlackHoleCluster 指标

与 PassthroughCluster 类似,本节解释了基于 Envoy 中调用的侦听器类型发出的指标和标签。

监控这些指标可以帮助运营商轻松了解集群中应用程序使用的所有外部服务。

分享此帖子