監控封鎖和允許通過的外部服務流量

如何使用 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 指標。在這種情況下,不會捕獲外部服務的主機名。預設情況下不會添加此標籤,可以通過擴充屬性生成和 Prometheus 處理程式的 Istio 配置來輕鬆添加。如果您的許多服務具有不穩定的 IP 位址,您應該注意時間序列中的基數爆炸。

PassthroughCluster 指標

本節說明基於 Envoy 中調用的監聽器類型發出的指標和標籤。

BlackHoleCluster 指標

與 PassthroughCluster 類似,本節說明基於 Envoy 中調用的監聽器類型發出的指標和標籤。

監控這些指標可以幫助運營商輕鬆了解叢集中應用程式所消耗的所有外部服務。

分享此文章