Sidecar代理用于增強服務調用之間的網絡安全性、可靠性以及可觀測性,但對于不需要經過Sidecar代理的特定場景,阿里云服務網格ASM支持您靈活控制流量免于經過Sidecar代理。本文介紹如何控制進出流量、目標地址免于經過Sidecar代理。
前提條件
已創建ASM實例。具體操作,請參見創建ASM實例。
已創建Kubernetes托管版集群。具體操作,請參見創建ACK托管集群。
已添加集群到ASM實例。具體操作,請參見添加集群到ASM實例。
已部署入口網關。具體操作,請參見創建入口網關。
設置進出流量免于經過Sidecar代理
對于性能敏感的場景,某些Pod可能不需要使用服務網格ASM提供的安全認證(如mTLS )和鏈路追蹤(Trace)能力,可以通過設置進出流量是否經過Sidecar代理來實現。本文以配置7001、7002和7005端口的入站流量不經過Sidecar代理,但出站流量經過Sidecar代理為例,實現特定的入站流量免于經過Sidecar代理,降低istio-proxy的資源需求,提升整體性能。同時,由于出站流量經過Sidecar代理,您仍然可以使用服務網格的負載均衡等能力。
方式一:通過ASM控制臺配置Sidecar攔截策略
以default命名空間為例,通過設置端口使出口流量經過Sidecar代理、設置端口使入口流量免于經過Sidecar代理實現命名空間級別配置Sidecar攔截策略。
登錄ASM控制臺。
在左側導航欄,選擇 。
在網格管理頁面,找到待配置的實例,單擊實例的名稱或在操作列中單擊管理。
在網格詳情頁面左側導航欄,選擇 。
在Sidecar代理配置頁面單擊命名空間頁簽。
選擇default命名空間,單擊按端口或地址來啟用/禁用Sidecar代理左側的圖標,選中并配置如下參數,然后單擊更新設置。
參數
說明
設置端口使出口流量經過Sidecar代理
配置為7001,7002,7005。
設置端口使入口流量免于經過Sidecar代理
配置為7001,7002,7005。
重啟Pod,使Sidecar配置生效。
登錄容器服務管理控制臺。
在控制臺左側導航欄,單擊集群。
在集群列表頁面,單擊目標集群名稱或者目標集群右側操作列下的詳情。
在集群管理頁左側導航欄,選擇 。
在容器組頁面,單擊目標Pod右側操作列下的 。
在彈出的對話框,單擊確定。
稍等一段時間,容器重啟后配置生效。
方式二:通過容器服務管理控制臺配置Sidecar攔截策略
本文以Deployment為例,通過Annotation方式單獨為Pod配置Sidecar攔截策略。更多信息,請參見通過Annotation方式配置Sidecar Proxy。
登錄容器服務管理控制臺。
在控制臺左側導航欄,單擊集群。
在集群列表頁面,單擊目標集群名稱或者目標集群右側操作列下的詳情。
在集群管理頁左側導航欄,選擇 。
在無狀態頁面單擊目標應用右側操作列下的詳情。
在應用詳情頁面右上角單擊查看Yaml。
在編輯 YAML對話框spec.template.metadata參數下添加如下內容,然后單擊更新。
annotations: traffic.sidecar.istio.io/excludeInboundPorts: '7001,7002,7005' traffic.sidecar.istio.io/includeOutboundPorts: '7001,7002,7005'
重啟Pod,使Sidecar配置生效。
登錄容器服務管理控制臺。
在控制臺左側導航欄,單擊集群。
在集群列表頁面,單擊目標集群名稱或者目標集群右側操作列下的詳情。
在集群管理頁左側導航欄,選擇 。
在容器組頁面,單擊目標Pod右側操作列下的 。
在彈出的對話框,單擊確定。
稍等一段時間,容器重啟后配置生效。
設置特定目標地址免于經過Sidecar代理
本文以配置不攔截對外訪問的地址范圍為47.XX.XX.144/32為例,具體操作步驟如下。
方式一:通過ASM控制臺配置Sidecar攔截策略
登錄ASM控制臺。
在左側導航欄,選擇 。
在網格管理頁面,找到待配置的實例,單擊實例的名稱或在操作列中單擊管理。
在網格詳情頁面左側導航欄,選擇 。
配置全局或命名空間級別的Sidecar攔截策略。
全局
在Sidecar代理配置頁面單擊全局頁簽。
單擊按端口或地址來啟用/禁用Sidecar代理左側的圖標,配置不攔截對外訪問的地址范圍為47.XX.XX.144/32,然后單擊更新設置。
命名空間
在Sidecar代理配置頁面單擊命名空間頁簽。
選擇default命名空間,單擊按端口或地址來啟用/禁用Sidecar代理左側的圖標,選中并配置不攔截對外訪問的地址范圍為47.XX.XX.144/32,然后單擊更新設置。
重啟Pod,使Sidecar配置生效。
登錄容器服務管理控制臺。
在控制臺左側導航欄,單擊集群。
在集群列表頁面,單擊目標集群名稱或者目標集群右側操作列下的詳情。
在集群管理頁左側導航欄,選擇 。
在容器組頁面,單擊目標Pod右側操作列下的 。
在彈出的對話框,單擊確定。
稍等一段時間,容器重啟后配置生效。
方式二:通過容器服務管理控制臺配置Sidecar攔截策略
本文以Deployment為例,通過Annotation方式單獨為Pod配置Sidecar攔截策略。更多信息,請參見通過Annotation方式配置Sidecar Proxy。
登錄容器服務管理控制臺。
在控制臺左側導航欄,單擊集群。
在集群列表頁面,單擊目標集群名稱或者目標集群右側操作列下的詳情。
在集群管理頁左側導航欄,選擇 。
在無狀態頁面單擊目標應用名稱。
在應用詳情頁面右上角單擊查看Yaml。
在編輯 YAML對話框spec.template.metadata參數下添加如下內容,然后單擊更新。
annotations: traffic.sidecar.istio.io/excludeOutboundIPRanges: 47.XX.XX.144/32
重啟Pod,使Sidecar配置生效。
登錄容器服務管理控制臺。
在控制臺左側導航欄,單擊集群。
在集群列表頁面,單擊目標集群名稱或者目標集群右側操作列下的詳情。
在集群管理頁左側導航欄,選擇 。
在容器組頁面,單擊目標Pod右側操作列下的 。
在彈出的對話框,單擊確定。
稍等一段時間,容器重啟后配置生效。
結果驗證
配置外部服務訪問策略為REGISTRY_ONLY,可以更直觀的驗證流量是否經過Sidecar代理。在REGISTRY_ONLY模式下,如果經過了Sidecar代理,該目標地址會被攔截,顯示訪問失敗;如果沒有經過Sidecar代理,則訪問成功。
在ASM控制臺的Sidecar代理配置頁面,單擊全局頁簽。
單擊外部服務訪問策略左側的圖標,選中REGISTRY_ONLY,然后單擊更新設置。
執行以下命令,訪問http://47.XX.XX.144/productpage。
curl -I http://47.XX.XX.144/productpage
預期輸出:設置47.XX.XX.144/32免于經過Sidecar代理后,訪問http://47.XX.XX.144/productpage成功,您可以根據實際情況,設置特定目標地址免于經過Sidecar代理。