全部產品
Search
文件中心

Alibaba Cloud Service Mesh:靈活控制流程量免於經過Sidecar代理

更新時間:Aug 01, 2024

Sidecar代理用於增強服務調用之間的網路安全性、可靠性以及可觀測性,但對於不需要經過Sidecar代理的特定情境,阿里雲Service MeshASM支援您靈活控制流程量免於經過Sidecar代理。本文介紹如何控制進出流量、目標地址免於經過Sidecar代理。

前提條件

設定進出流量免於經過Sidecar代理

對於效能敏感的情境,某些Pod可能不需要使用Service MeshASM提供的安全認證(如mTLS )和鏈路追蹤(Trace)能力,可以通過設定進出流量是否經過Sidecar代理來實現。本文以配置7001、7002和7005連接埠的入站流量不經過Sidecar代理,但出站流量經過Sidecar代理為例,實現特定的入站流量免於經過Sidecar代理,降低istio-proxy的資源需求,提升整體效能。同時,由於出站流量經過Sidecar代理,您仍然可以使用Service Mesh的負載平衡等能力。

為命名空間層級配置Sidecar攔截策略

方式一:通過ASM控制台配置Sidecar攔截策略

以default命名空間為例,通過設定連接埠使出口流量經過Sidecar代理設定連接埠使入口流量免於經過Sidecar代理實現命名空間層級配置Sidecar攔截策略。

  1. 登入ASM控制台

  2. 在左側導覽列,選擇服務網格 > 網格管理

  3. 網格管理頁面,找到待配置的執行個體,單擊執行個體的名稱或在操作列中單擊管理

  4. 在網格詳情頁面左側導覽列,選擇資料面組件管理 > Sidecar代理配置

  5. Sidecar代理配置頁面單擊命名空間頁簽。

  6. 選擇default命名空間,單擊按連接埠或地址來啟用/禁用Sidecar代理左側的Istio代理表徵圖,選中並配置如下參數,然後單擊更新設定

    參數

    說明

    設定連接埠使出口流量經過Sidecar代理

    配置為7001,7002,7005

    設定連接埠使入口流量免於經過Sidecar代理

    配置為7001,7002,7005

  7. 重啟Pod,使Sidecar配置生效。

    1. 登入Container Service管理主控台

    2. 在控制台左側導覽列,單擊叢集

    3. 叢集列表頁面,單擊目的地組群名稱或者目的地組群右側操作列下的詳情

    4. 在叢集管理頁左側導覽列,選擇工作負載 > 容器組

    5. 容器組頁面,單擊目標Pod右側操作列下的更多 > 刪除

    6. 在彈出的對話方塊,單擊確定

      稍等一段時間,容器重啟後配置生效。

方式二:通過Container Service管理主控台配置Sidecar攔截策略

本文以Deployment為例,通過Annotation方式單獨為Pod配置Sidecar攔截策略。更多資訊,請參見通過Annotation方式配置Sidecar Proxy

  1. 登入Container Service管理主控台

  2. 在控制台左側導覽列,單擊叢集

  3. 叢集列表頁面,單擊目的地組群名稱或者目的地組群右側操作列下的詳情

  4. 在叢集管理頁左側導覽列,選擇工作負載 > 無狀態

  5. 無狀態頁面單擊目標應用右側操作列下的詳情

  6. 在應用詳情頁面右上方單擊查看Yaml

  7. 編輯 YAML對話方塊spec.template.metadata參數下添加如下內容,然後單擊更新

    annotations:
      traffic.sidecar.istio.io/excludeInboundPorts: '7001,7002,7005'
      traffic.sidecar.istio.io/includeOutboundPorts: '7001,7002,7005'

    Annotation

  8. 重啟Pod,使Sidecar配置生效。

    1. 登入Container Service管理主控台

    2. 在控制台左側導覽列,單擊叢集

    3. 叢集列表頁面,單擊目的地組群名稱或者目的地組群右側操作列下的詳情

    4. 在叢集管理頁左側導覽列,選擇工作負載 > 容器組

    5. 容器組頁面,單擊目標Pod右側操作列下的更多 > 刪除

    6. 在彈出的對話方塊,單擊確定

      稍等一段時間,容器重啟後配置生效。

設定特定目標地址免於經過Sidecar代理

本文以配置不攔截對外訪問的位址範圍為47.XX.XX.144/32為例,具體操作步驟如下。

方式一:通過ASM控制台配置Sidecar攔截策略

  1. 登入ASM控制台

  2. 在左側導覽列,選擇服務網格 > 網格管理

  3. 網格管理頁面,找到待配置的執行個體,單擊執行個體的名稱或在操作列中單擊管理

  4. 在網格詳情頁面左側導覽列,選擇資料面組件管理 > Sidecar代理配置

  5. 配置全域或命名空間層級的Sidecar攔截策略。

    • 全域

      1. Sidecar代理配置頁面單擊全域頁簽。

      2. 單擊按連接埠或地址來啟用/禁用Sidecar代理左側的Istio代理表徵圖,配置不攔截對外訪問的位址範圍47.XX.XX.144/32,然後單擊更新設定

    • 命名空間

      1. Sidecar代理配置頁面單擊命名空間頁簽。

      2. 選擇default命名空間,單擊按連接埠或地址來啟用/禁用Sidecar代理左側的Istio代理表徵圖,選中並配置不攔截對外訪問的位址範圍47.XX.XX.144/32,然後單擊更新設定

  6. 重啟Pod,使Sidecar配置生效。

    1. 登入Container Service管理主控台

    2. 在控制台左側導覽列,單擊叢集

    3. 叢集列表頁面,單擊目的地組群名稱或者目的地組群右側操作列下的詳情

    4. 在叢集管理頁左側導覽列,選擇工作負載 > 容器組

    5. 容器組頁面,單擊目標Pod右側操作列下的更多 > 刪除

    6. 在彈出的對話方塊,單擊確定

      稍等一段時間,容器重啟後配置生效。

方式二:通過Container Service管理主控台配置Sidecar攔截策略

本文以Deployment為例,通過Annotation方式單獨為Pod配置Sidecar攔截策略。更多資訊,請參見通過Annotation方式配置Sidecar Proxy

  1. 登入Container Service管理主控台

  2. 在控制台左側導覽列,單擊叢集

  3. 叢集列表頁面,單擊目的地組群名稱或者目的地組群右側操作列下的詳情

  4. 在叢集管理頁左側導覽列,選擇工作負載 > 無狀態

  5. 無狀態頁面單擊目標應用程式名稱。

  6. 在應用詳情頁面右上方單擊查看Yaml

  7. 編輯 YAML對話方塊spec.template.metadata參數下添加如下內容,然後單擊更新

    annotations:
      traffic.sidecar.istio.io/excludeOutboundIPRanges: 47.XX.XX.144/32

    設定特定目標地址免於經過Sidecar代理

  8. 重啟Pod,使Sidecar配置生效。

    1. 登入Container Service管理主控台

    2. 在控制台左側導覽列,單擊叢集

    3. 叢集列表頁面,單擊目的地組群名稱或者目的地組群右側操作列下的詳情

    4. 在叢集管理頁左側導覽列,選擇工作負載 > 容器組

    5. 容器組頁面,單擊目標Pod右側操作列下的更多 > 刪除

    6. 在彈出的對話方塊,單擊確定

      稍等一段時間,容器重啟後配置生效。

結果驗證

配置外部服務存取原則REGISTRY_ONLY,可以更直觀的驗證流量是否經過Sidecar代理。在REGISTRY_ONLY模式下,如果經過了Sidecar代理,該目標地址會被攔截,顯示訪問失敗;如果沒有經過Sidecar代理,則訪問成功。

  1. ASM控制台Sidecar代理配置頁面,單擊全域頁簽。

  2. 單擊外部服務存取原則左側的Istio代理表徵圖,選中REGISTRY_ONLY,然後單擊更新設定

  3. 執行以下命令,訪問http://47.XX.XX.144/productpage

    curl -I http://47.XX.XX.144/productpage

    預期輸出:配置Sidecar攔截策略設定47.XX.XX.144/32免於經過Sidecar代理後,訪問http://47.XX.XX.144/productpage成功,您可以根據實際情況,設定特定目標地址免於經過Sidecar代理。