全部產品
Search
文件中心

Alibaba Cloud Service Mesh:配置Sidecar注入策略

更新時間:Jun 30, 2024

ASM內建一個Sidecar注入器,能夠自動為建立的Pod添加Sidecar代理。您可以配置注入器的策略以滿足特定需求,通過標籤選擇哪些Pod需要加入Sidecar,從而更有效地使用資源並簡化管理。根據叢集的大小和負載,您也可以調整注入器的資源配置,確保其有充足的運行資源。

前提條件

已添加叢集到ASM執行個體

配置自動注入策略

您可以通過Pod所在命名空間的標籤、Pod自身的標籤或註解,匹配需要注入Sidecar的Pod。

  1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

  2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇資料面組件管理 > 注入策略配置

  3. 注入策略配置頁面的注入策略組態管理地區,配置自動注入策略。

    只有當Pod同時匹配Pod所在命名空間的標籤需要滿足條件Pod自身的標籤/註解需要滿足條件時,Pod才會被自動注入Sidecar。

    匹配條件

    說明

    Pod所在命名空間的標籤需要滿足條件

    Sidecar自動注入對Pod所在命名空間的標籤的匹配條件。

    • 包含 istio-injection: enabled:當Pod所在的命名空間包含istio-injection: enabled標籤時,Pod匹配自動注入條件。

    • 不包含 istio-injection: disabled:當Pod所在的命名空間不包含istio-injection: disabled標籤時,Pod能夠匹配自動注入條件。

    Pod自身的標籤/註解需要滿足條件

    Sidecar自動注入對Pod自身標籤或註解的匹配條件。

    • 不包含 sidecar.istio.io/inject: "false":當Pod不包含sidecar.istio.io/inject: "false"標籤或註解時,Pod能夠匹配自動注入條件。

    • 包含 sidecar.istio.io/inject: "true":當Pod包含sidecar.istio.io/inject: "true"的標籤或註解時,Pod匹配自動注入條件。

      說明
      • ASM執行個體版本為1.12以下,僅支援通過匹配Pod註解的方式進行自動注入。

      • ASM執行個體版本為1.12及以上,支援通過匹配Pod標籤和匹配Pod註解兩種方式進行自動注入。

        標籤的匹配優先順序大於註解。例如,Pod同時帶有sidecar.istio.io/inject: "true"的標籤和sidecar.istio.io/inject: "false"的註解,Pod將被標記為含有sidecar.istio.io/inject: "true"標籤,而不是sidecar.istio.io/inject: "false"註解。

  4. (可選)在注入策略組態管理地區下方,單擊展開進階選項,配置相關資訊。

    配置項

    說明

    注入Sidecar的Pod標籤選取器(AlwaysInjectSelector)

    AlwaysInjectSelector是一個可配置的Pod標籤選取器。被AlwaysInjectSelector選中的Pod,將被視為包含sidecar.istio.io/inject:"true"標籤或註解。

    不注入Sidecar的Pod標籤選取器(NeverInjectSelector)

    NeverInjectSelector是一個可配置的Pod標籤選取器。被NeverInjectSelector選中的Pod,將被視為包含sidecar.istio.io/inject:"false"標籤或註解。

    說明

    AlwaysInjectSelector與NeverInjectSelector都是Pod標籤選取器,配置方法相同,都分為多行,每一行是一個標籤選擇運算式,Pod的標籤只要匹配其中任意一個標籤選擇運算式,就可以被Pod標籤選取器選中。

    每個標籤選擇運算式包含以下三個部分:

    • 鍵:運算式匹配時所使用的Pod標籤中的鍵。

    • 操作:運算式匹配Pod標籤的操作,可以選擇以下四種操作:

      • In:運算式根據Pod的標籤值是否在給定的值中來判斷是否匹配Pod。

      • NotIn:運算式根據Pod的標籤值是否不在給定的值中來判斷是否匹配Pod。

      • Exists:運算式根據Pod中給定的鍵是否存在來判斷是否匹配Pod。

      • DoesNotExist:運算式根據Pod中給定的鍵是否不存在來判斷是否匹配Pod。

    • 值:如果運算式的操作選擇In或NotIn,可以在此設定一系列的值,以判斷是否匹配Pod。

  5. 在頁面下方,單擊更新設定

配置Sidecar注入器

Sidecar注入器是一個部署在資料面Kubernetes叢集的准入Webhook服務(並非Sidecar代理),負責Sidecar代理的自動注入。Sidecar注入器的服務和工作負載均部署在Kubernetes叢集的istio-system命名空間,名稱以istio-sidecar-injector開頭。您可以調整Sidecar注入器組件的資源設定與副本數,以保證Sidecar注入器在同時注入大量Pod時的可用性。建議您參考Container Service警示管理kube-apiserver組件監控指標說明,配置Sidecar注入器准入Webhook服務的指標監控和警示規則。

  1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

  2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇資料面組件管理 > 注入策略配置

  3. 注入策略配置頁面的Sidecar注入器組態管理地區,配置Sidecar注入器,然後在頁面下方,單擊更新設定

    配置項

    說明

    Sidecar注入器資源配置

    配置Sidecar注入器容器的資源限制所需資源

    • 資源限制:配置Sidecar注入器容器的CPU和記憶體資源限制,其中CPU資源限制的單位為核(Core),記憶體資源限制的單位為MiB。

    • 所需資源:配置Sidecar注入器容器的CPU和記憶體所需資源,其中CPU所需資源的單位為核(Core),記憶體所需資源的單位為MiB。

    Pod副本數

    配置Sidecar注入器Pod的副本數量。

    說明

    增加Sidecar注入器的副本數量可以提高Sidecar注入服務在同時注入大量Pod時的可用性。推薦您將Pod副本數設定為2個或以上。

    重寫健全狀態檢查

    是否在注入時為Pod重寫健全狀態檢查。您可以參考為網格內應用開啟健全狀態檢查重新導向,確定是否需要啟用健全狀態檢查重寫。

    Sidecar-injector部署節點選擇

    通過匹配標籤的方式選擇Sidecar注入器Pod部署的節點。

    單擊新增匹配標籤,輸入資料面叢集節點標籤的名稱,匹配具體的部署節點。

樣本一:為命名空間下的指定Pod關閉自動注入,其他Pod開啟自動注入

  1. 配置自動注入策略。

    1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

    2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇資料面組件管理 > 注入策略配置

    3. 注入策略配置頁面的注入策略組態管理地區,配置相關資訊。

      以下配置表示只要命名空間帶有istio-injection: enabled標籤,命名空間內的Pod就都會被自動注入Sidecar,除非Pod帶有sidecar.istio.io/injection: "false"的標籤或註解。

      配置項

      說明

      Pod所在命名空間的標籤需要滿足條件

      選擇包含istio-injection:enabled

      Pod自身的標籤/註解需要滿足條件

      選擇不包含sidecar.istio.io/injection: "false"

  2. 建立全域命名空間,為命名空間開啟自動注入。

    1. 在網格詳情頁面左側導覽列,選擇網格執行個體 > 全域命名空間,然後在右側頁面,單擊建立

    2. 建立命名空間面板,輸入命名空間的名稱(本樣本為test1),在標籤右側單擊添加,配置名稱istio-injectionenabled,然後單擊確定

    3. 在頁面上方,單擊同步自動注入至Kubernetes叢集,將全域命名空間同步至資料面Kubernetes叢集。

  3. 建立應用。

    1. 在資料平面ACK叢集的test1命名空間下建立details應用。具體操作,請參見在ASM執行個體關聯的叢集中部署應用

    2. 驗證應用的Pod是否注入Sidecar代理。

      1. 登入Container Service管理主控台,在左側導覽列選擇叢集

      2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載 > 無狀態

      3. 無狀態頁面頂部,設定命名空間test1,單擊details應用程式名稱。

        容器組頁簽下可以看到Pod包含Proxy鏡像,表明自動注入Sidecar代理成功。1D58EF1F-DE30-4d90-954D-EE00D88C592B

  4. 在Pod中添加標籤,使Pod關閉自動注入。

    1. 登入Container Service管理主控台,在左側導覽列選擇叢集

    2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載 > 無狀態

    3. 無狀態頁面的test1命名空間下,在details應用右側的操作列,單擊更多 > 查看Yaml

    4. 編輯 YAML對話方塊,修改YAML配置,然後單擊更新

      • ASM版本為1.12.4及以上:在labels參數下添加Key為sidecar.istio.io/inject、Value為"false"的標籤,即sidecar.istio.io/inject: 'false'769D1622-11DE-41c8-9DD6-757C6BD97F19

      • ASM版本為1.12.4以下:在annotations參數下添加Key為sidecar.istio.io/inject、Value為"false"的註解,即sidecar.istio.io/inject: "false"

  5. 驗證test1命名空間開啟自動注入的情況下,details服務的Pod不進行自動注入是否成功。

    1. 登入Container Service管理主控台,在左側導覽列選擇叢集

    2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載 > 無狀態

    3. 無狀態頁面頂部,設定命名空間test1,單擊details應用程式名稱。

      容器組頁簽下可以看到Pod不包含Proxy鏡像,表明在test1命名空間開啟自動注入的情況下,details服務的Pod不進行自動注入成功。驗證details不進行自動注入..png

樣本二:以Pod為單位,單獨為Pod設定自動注入策略

若您不想以命名空間為維度大量設定自動注入策略,也可以單獨為Pod設定自動注入策略,具體操作步驟如下。

  1. 為命名空間開啟自動注入。

    1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

    2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇資料面組件管理 > 注入策略配置

    3. 注入策略組態管理頁面的注入策略組態管理地區,配置相關資訊,然後在頁面下方,單擊更新設定

      以下配置表示預設所有命名空間下帶有sidecar.istio.io/injection: "true"標籤的Pod都會被自動注入Sidecar,但是帶有istio-injection:disabled標籤的命名空間中所有Pod都不會被自動注入Sidecar。

      配置項

      說明

      Pod所在命名空間的標籤需要滿足條件

      選擇不包含istio-injection:disabled

      Pod自身的標籤/註解需要滿足條件

      選擇包含sidecar.istio.io/injection: "true"

  2. 在ACK叢集中建立名為test2的命名空間,且不帶有任何標籤。具體操作,請參見管理命名空間與配額

  3. 在ACK叢集的test2命名空間下建立reviews應用。具體操作,請參見在ASM執行個體關聯的叢集中部署應用

  4. 為Pod添加標籤,使Pod開啟自動注入。

    1. 登入Container Service管理主控台,在左側導覽列選擇叢集

    2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載 > 無狀態

    3. 無狀態頁面頂部,設定命名空間test2,在reviews服務右側的操作列,單擊更多 > 查看Yaml

    4. 編輯 YAML對話方塊的labels參數下,添加sidecar.istio.io/inject: "true"標籤,然後單擊更新

      說明

      使用標籤設定Pod自動注入功能,Service MeshASM版本需為1.12.4及以上。關於升級執行個體的具體操作,請參見升級ASM執行個體

      修改YAML..png

  5. 驗證為Pod設定自動注入策略是否成功。

    1. 登入Container Service管理主控台,在左側導覽列選擇叢集

    2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載 > 無狀態

    3. 無狀態頁面頂部,設定命名空間test2,單擊reviews應用程式名稱。

      容器組頁簽下可以看到Pod中包含Proxy鏡像,表明為Pod設定自動注入策略成功。情境二驗證..png

相關文檔

  • 對於正在啟動並執行Pod,需要重新啟動才能使Sidecar注入策略生效。具體操作,請參見重新啟動Pod

  • 若您控制平面升級後,已經啟用Istio的應用程式仍使用舊版本的Sidecar代理,請參照升級Sidecar代理進行升級。

  • 您可以按照不同的層級(例如全域、命名空間、工作負載、Pod範圍)對Sidecar代理的資源佔用、流量攔截策略、DNS代理、生命週期等方面進行配置。具體操作,請參見配置Sidecar代理