Sidecar代理用於增強服務調用之間的網路安全性、可靠性以及可觀測性,但對於不需要經過Sidecar代理的特定情境,阿里雲Service MeshASM支援您靈活控制流程量免於經過Sidecar代理。本文介紹如何控制進出流量、目標地址免於經過Sidecar代理。
前提條件
已建立ASM執行個體。具體操作,請參見建立ASM執行個體。
已建立Kubernetes託管版叢集。具體操作,請參見建立ACK託管叢集。
已添加叢集到ASM執行個體。具體操作,請參見添加叢集到ASM執行個體。
已部署入口網關。具體操作,請參見建立入口網關。
設定進出流量免於經過Sidecar代理
對於效能敏感的情境,某些Pod可能不需要使用Service MeshASM提供的安全認證(如mTLS )和鏈路追蹤(Trace)能力,可以通過設定進出流量是否經過Sidecar代理來實現。本文以配置7001、7002和7005連接埠的入站流量不經過Sidecar代理,但出站流量經過Sidecar代理為例,實現特定的入站流量免於經過Sidecar代理,降低istio-proxy的資源需求,提升整體效能。同時,由於出站流量經過Sidecar代理,您仍然可以使用Service Mesh的負載平衡等能力。
方式一:通過ASM控制台配置Sidecar攔截策略
以default命名空間為例,通過設定連接埠使出口流量經過Sidecar代理、設定連接埠使入口流量免於經過Sidecar代理實現命名空間層級配置Sidecar攔截策略。
登入ASM控制台。
在左側導覽列,選擇 。
在網格管理頁面,找到待配置的執行個體,單擊執行個體的名稱或在操作列中單擊管理。
在網格詳情頁面左側導覽列,選擇 。
在Sidecar代理配置頁面單擊命名空間頁簽。
選擇default命名空間,單擊按連接埠或地址來啟用/禁用Sidecar代理左側的表徵圖,選中並配置如下參數,然後單擊更新設定。
參數
說明
設定連接埠使出口流量經過Sidecar代理
配置為7001,7002,7005。
設定連接埠使入口流量免於經過Sidecar代理
配置為7001,7002,7005。
重啟Pod,使Sidecar配置生效。
在控制台左側導覽列,單擊叢集。
在叢集列表頁面,單擊目的地組群名稱或者目的地組群右側操作列下的詳情。
在叢集管理頁左側導覽列,選擇 。
在容器組頁面,單擊目標Pod右側操作列下的 。
在彈出的對話方塊,單擊確定。
稍等一段時間,容器重啟後配置生效。
方式二:通過Container Service管理主控台配置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右側操作列下的 。
在彈出的對話方塊,單擊確定。
稍等一段時間,容器重啟後配置生效。
方式二:通過Container Service管理主控台配置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代理。