ASM內建一個Sidecar注入器,能夠自動為建立的Pod添加Sidecar代理。您可以配置注入器的策略以滿足特定需求,通過標籤選擇哪些Pod需要加入Sidecar,從而更有效地使用資源並簡化管理。根據叢集的大小和負載,您也可以調整注入器的資源配置,確保其有充足的運行資源。
前提條件
配置自動注入策略
您可以通過Pod所在命名空間的標籤、Pod自身的標籤或註解,匹配需要注入Sidecar的Pod。
登入ASM控制台,在左側導覽列,選擇 。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇 。
在注入策略配置頁面的注入策略組態管理地區,配置自動注入策略。
只有當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"註解。
(可選)在注入策略組態管理地區下方,單擊展開進階選項,配置相關資訊。
配置項
說明
注入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。
在頁面下方,單擊更新設定。
配置Sidecar注入器
Sidecar注入器是一個部署在資料面Kubernetes叢集的准入Webhook服務(並非Sidecar代理),負責Sidecar代理的自動注入。Sidecar注入器的服務和工作負載均部署在Kubernetes叢集的istio-system命名空間,名稱以istio-sidecar-injector開頭。您可以調整Sidecar注入器組件的資源設定與副本數,以保證Sidecar注入器在同時注入大量Pod時的可用性。建議您參考Container Service警示管理和kube-apiserver組件監控指標說明,配置Sidecar注入器准入Webhook服務的指標監控和警示規則。
登入ASM控制台,在左側導覽列,選擇 。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇 。
在注入策略配置頁面的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開啟自動注入
配置自動注入策略。
登入ASM控制台,在左側導覽列,選擇 。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇 。
在注入策略配置頁面的注入策略組態管理地區,配置相關資訊。
以下配置表示只要命名空間帶有istio-injection: enabled標籤,命名空間內的Pod就都會被自動注入Sidecar,除非Pod帶有sidecar.istio.io/injection: "false"的標籤或註解。
配置項
說明
Pod所在命名空間的標籤需要滿足條件
選擇包含istio-injection:enabled。
Pod自身的標籤/註解需要滿足條件
選擇不包含sidecar.istio.io/injection: "false"。
建立全域命名空間,為命名空間開啟自動注入。
在網格詳情頁面左側導覽列,選擇 ,然後在右側頁面,單擊建立。
在建立命名空間面板,輸入命名空間的名稱(本樣本為test1),在標籤右側單擊添加,配置名稱為istio-injection,值為enabled,然後單擊確定。
在頁面上方,單擊同步自動注入至Kubernetes叢集,將全域命名空間同步至資料面Kubernetes叢集。
建立應用。
在資料平面ACK叢集的test1命名空間下建立details應用。具體操作,請參見在ASM執行個體關聯的叢集中部署應用。
驗證應用的Pod是否注入Sidecar代理。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在無狀態頁面頂部,設定命名空間為test1,單擊details應用程式名稱。
在容器組頁簽下可以看到Pod包含Proxy鏡像,表明自動注入Sidecar代理成功。
在Pod中添加標籤,使Pod關閉自動注入。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在無狀態頁面的test1命名空間下,在details應用右側的操作列,單擊更多 > 查看Yaml。
在編輯 YAML對話方塊,修改YAML配置,然後單擊更新。
ASM版本為1.12.4及以上:在labels參數下添加Key為
sidecar.istio.io/inject
、Value為"false"
的標籤,即sidecar.istio.io/inject: 'false'
。ASM版本為1.12.4以下:在annotations參數下添加Key為
sidecar.istio.io/inject
、Value為"false"
的註解,即sidecar.istio.io/inject: "false"
。
驗證test1命名空間開啟自動注入的情況下,details服務的Pod不進行自動注入是否成功。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在無狀態頁面頂部,設定命名空間為test1,單擊details應用程式名稱。
在容器組頁簽下可以看到Pod不包含Proxy鏡像,表明在test1命名空間開啟自動注入的情況下,details服務的Pod不進行自動注入成功。
樣本二:以Pod為單位,單獨為Pod設定自動注入策略
若您不想以命名空間為維度大量設定自動注入策略,也可以單獨為Pod設定自動注入策略,具體操作步驟如下。
為命名空間開啟自動注入。
登入ASM控制台,在左側導覽列,選擇 。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇 。
在注入策略組態管理頁面的注入策略組態管理地區,配置相關資訊,然後在頁面下方,單擊更新設定。
以下配置表示預設所有命名空間下帶有sidecar.istio.io/injection: "true"標籤的Pod都會被自動注入Sidecar,但是帶有istio-injection:disabled標籤的命名空間中所有Pod都不會被自動注入Sidecar。
配置項
說明
Pod所在命名空間的標籤需要滿足條件
選擇不包含istio-injection:disabled。
Pod自身的標籤/註解需要滿足條件
選擇包含sidecar.istio.io/injection: "true"。
在ACK叢集中建立名為test2的命名空間,且不帶有任何標籤。具體操作,請參見管理命名空間與配額。
在ACK叢集的test2命名空間下建立reviews應用。具體操作,請參見在ASM執行個體關聯的叢集中部署應用。
為Pod添加標籤,使Pod開啟自動注入。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在無狀態頁面頂部,設定命名空間為test2,在reviews服務右側的操作列,單擊更多 > 查看Yaml。
在編輯 YAML對話方塊的labels參數下,添加
sidecar.istio.io/inject: "true"
標籤,然後單擊更新。說明使用標籤設定Pod自動注入功能,Service MeshASM版本需為1.12.4及以上。關於升級執行個體的具體操作,請參見升級ASM執行個體。
驗證為Pod設定自動注入策略是否成功。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在無狀態頁面頂部,設定命名空間為test2,單擊reviews應用程式名稱。
在容器組頁簽下可以看到Pod中包含Proxy鏡像,表明為Pod設定自動注入策略成功。
相關文檔
對於正在啟動並執行Pod,需要重新啟動才能使Sidecar注入策略生效。具體操作,請參見重新啟動Pod。
若您控制平面升級後,已經啟用Istio的應用程式仍使用舊版本的Sidecar代理,請參照升級Sidecar代理進行升級。
您可以按照不同的層級(例如全域、命名空間、工作負載、Pod範圍)對Sidecar代理的資源佔用、流量攔截策略、DNS代理、生命週期等方面進行配置。具體操作,請參見配置Sidecar代理。