监控被阻止的和透传的外部服务流量

如何使用 Istio 去监控被阻止的和透传的外部服务流量。

Sep 28, 2019 | By Neeraj Poddar - Aspen Mesh

了解,控制和保护外部服务访问权限是你能够从 Istio 这样的服务网格中获得的主要好处之一。 从安全和操作的角度来看,监控哪些外部服务流量被阻止是非常重要的;因为如果程序试图与不合适的服务进行通信,它们可能会出现错误配置或安全漏洞。 同样,如果你现在有允许任何外部服务访问的策略,那么你可以根据对流量的监控,逐步地添加明确的 Istio 配置来限制访问并提高集群的安全性。 在任何情况下,通过遥测了解这种流量都非常有帮助,因为你可以根据它来创建警报和仪表板,并更好地了解安全状况。 这是 Istio 的生产用户强烈要求的功能,我们很高兴在版本 1.3 中添加了对此功能的支持。

为了实现此功能,Istio 的默认监控指标增加了显式标签,以捕获被阻止和透传的外部服务流量。 这篇博客将介绍如何使用这些增强指标来监视所有外部服务流量。

Istio 控制平面使用了预定义集群 BlackHoleCluster 和 Passthrough 来配置 sidecar 代理,它们的作用分别是阻止和通过所有流量。 为了了解这些集群,让我们先从外部和内部服务在 Istio 服务网格的意义开始。

外部和内部服务

内部服务被定义为平台中的一部分,并被视为在网格中。对于内部服务,默认情况下,Istio 控制平面为 sidecars 提供所有必需的配置。 例如,在 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 调用的监听器类型的指标和发出的标签。

监控这些指标可以帮助管理员轻松了解其集群中的应用程序接收的所有外部服务。