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時的可用性。建議您參考容器服務報警管理和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代理。
登錄容器服務管理控制臺,在左側導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇 。
在無狀態頁面頂部,設置命名空間為test1,單擊details應用名稱。
在容器組頁簽下可以看到Pod包含Proxy鏡像,表明自動注入Sidecar代理成功。
在Pod中添加標簽,使Pod關閉自動注入。
登錄容器服務管理控制臺,在左側導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇 。
在無狀態頁面的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不進行自動注入是否成功。
登錄容器服務管理控制臺,在左側導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇 。
在無狀態頁面頂部,設置命名空間為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開啟自動注入。
驗證為Pod設置自動注入策略是否成功。
登錄容器服務管理控制臺,在左側導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇 。
在無狀態頁面頂部,設置命名空間為test2,單擊reviews應用名稱。
在容器組頁簽下可以看到Pod中包含Proxy鏡像,表明為Pod設置自動注入策略成功。
相關文檔
對于正在運行的Pod,需要重新啟動才能使Sidecar注入策略生效。具體操作,請參見重新啟動Pod。
若您控制平面升級后,已經啟用Istio的應用程序仍使用舊版本的Sidecar代理,請參照升級Sidecar代理進行升級。
您可以按照不同的級別(例如全局、命名空間、工作負載、Pod范圍)對Sidecar代理的資源占用、流量攔截策略、DNS代理、生命周期等方面進行配置。具體操作,請參見配置Sidecar代理。