服務網格 ASM(Service Mesh)在出口流量管理方面,提供了多種靈活且高效的解決方案,為應用程序的安全性、可觀測性和可靠性提供支持。本文將介紹ASM在出口流量管理方面提供的多種功能以及為什么要使用ASM出口網關。
豐富的出口流量管理能力
服務網格提供了豐富的管理L7出口流量的能力(流量路由、可觀測、安全等),您可以根據需求選擇要如何進行配置來實現相應的功能。
如果應用直接發起HTTPS請求,網格代理只能將其當成普通的TLS流量處理,網格的L7能力將會失效。因此,請確保您的應用發出的請求為HTTP明文請求。網格會根據您的配置,直接將HTTP請求轉發給外部服務,或者自動將請求轉換成HTTPS請求發往外部服務。
流量路由
在訪問集群外HTTP服務時,您只需要在服務網格中配置對應的Service Entry,就可以使用例如出口鏡像流量、出口流量按比例路由和虛擬服務中的其他高級能力。如果您訪問的服務是HTTPS協議,需要再配置一個對應的DestinationRule。流量路由能力并不依賴ASM出口網關。
觀測出口流量
如果請求是明文流量,您無需做任何操作即可通過日志、監控指標和鏈路追蹤等方式觀測出口流量。如果請求的流量需要加密,您只需要配置Service Entry和DestinationRule。應用發起明文流量,Sidecar自動將明文流量加密后進行轉發。此時可以使用網格完整的可觀測能力,該功能并不依賴ASM出口網關。
出口流量認證/鑒權
ASM針對集群的出口流量同樣提供了豐富的認證/授權能力。您可以在ASM中實現校驗出口流量的JWT、基于請求的L7/L4元數據限制特定客戶端訪問等高級安全能力。這些能力需要使用ASM出口網關來實現,請參見出口流量安全模型。
出口流量安全模型
對于純TCP流量(非HTTP、非TLS),推薦您使用Kubernetes原生提供的NetworkPolicy來增強其安全性。
默認行為
ALLOW_ANY,網格代理不做任何事情。此時出口流量的行為完全不受控。安全級別最低。
REGISTRY_ONLY
開啟REGISTRY_ONLY,應用只能訪問通過Service Entry注冊過的服務。
由于應用所有者有權限更改業務Pod的配置,有很多種方式可以讓出口流量繞過Sidecar代理。如果請求繞過Sidecar代理,REGISTRY_ONLY提供的訪問限制將會失效,此時應用可以不受限制的訪問外部服務。因此,REGISTRY_ONLY并不能作為有效的安全策略。
此外,該方案只能限制指定命名空間的工作負載訪問外部服務,無法將控制范圍縮小到特定工作負載級別。
REGISTRY_ONLY和出口網關
出口網關可以作為理想的安全邊界。作為一個單獨的Deployment,其部署行為由網格管理員完全控制,應用所有者無法直接控制出口網關以及其上的安全策略。
同時,確保只有出口網關所在的節點可以訪問外部服務,其余節點均無法訪問外部服務。業務Pod無法直接訪問外網,如果要讓流量成功發往外部服務,應用所有者需要確保自己的應用對外訪問的流量成功被Sidecar代理,并按照預期被轉發給出口網關。
流量被透明轉發到出口網關之后:
可以在出口網關上配置授權策略,實現細粒度的授權策略或接入自定義授權服務。
如果要訪問的服務是HTTPS服務,可以在出口網關上配置HTTPS升級。出口網關會管理自動HTTPS連接,可以實現跨工作負載的HTTPS連接復用,提升性能。
相關文檔
ASM提供了EgressTrafficPolicy資源,可以快速完成通過出口網關訪問集群外服務的流量規則配置。具體信息,請參見使用ASMEgressTrafficPolicy管理出口流量。