為叢集中的業務容器注入Sidecar代理,可以增強服務調用之間的網路安全性、可靠性和可觀測性。您可以根據實際業務需求,靈活配置Sidecar代理的資源、生命週期、流量攔截策略、可觀測能力等參數。本文介紹如何配置Sidecar代理以及相關配置項說明。
Sidecar代理配置層級說明
不同的Sidecar代理配置層級代表不同的配置生效範圍和生效優先順序。Sidecar代理配置層級按照生效的優先順序從低到高依次為:全域、命名空間、工作負載、Pod範圍。
您可以根據實際業務需求,在不同的層級中對同一個Sidecar代理進行配置。ASM將根據每個Sidecar配置層級的優先順序,決定在注入Sidecar代理時最終生效的配置參數。例如,在命名空間層級和全域層級對同一個Sidecar代理進行配置,命名空間層級配置在default命名空間。在default命名空間部署新的工作負載時,因為命名空間層級的優先順序高於全域層級,注入的Sidecar代理將應用命名空間層級配置的參數。
Sidecar代理配置層級 | 說明 |
全域 | Sidecar代理配置將全域生效,您的任意Pod在注入Sidecar代理時都將應用該配置。 |
命名空間 | Sidecar代理配置將生效在指定命名空間。只有該命名空間內的Pod在注入Sidecar代理時才會應用配置。在配置此層級的Sidecar代理配置時,您需要選擇一個命名空間。 |
工作負載 | Sidecar代理配置將生效在指定的工作負載。只有被指定的標籤選取器選中的工作負載,在注入Sidecar代理時,才會應用該配置。在配置此層級的Sidecar代理配置時,您需要指定工作負載標籤選取器,以指定哪些工作負載需要應用該配置。 |
Pod範圍 | 該層級的Sidecar代理配置不支援通過ASM控制台進行配置。您可以通過在Pod中添加Annotation進行配置。具體操作,請參見通過Annotation方式配置Sidecar Proxy。 |
操作步驟
下文介紹如何配置不同層級的Sidecar代理。若您需要在工作負載中使新配置的Sidecar代理生效,請重新部署Pod。具體操作,請參見重新部署工作負載。
全域層級
登入ASM控制台,在左側導覽列,選擇。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇。
在Sidecar代理配置頁面的全域頁簽,按需進行Sidecar配置,然後單擊更新設定。
關於Sidecar代理的配置項說明,請參見Sidecar代理配置項說明。
查看Sidecar代理配置是否生效。
在左側導覽列,選擇。
在基本資料地區,查看網格的狀態。
當狀態為運行中時,表明全域層級的Sidecar代理配置生效。
命名空間層級
登入ASM控制台,在左側導覽列,選擇。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇。
在Sidecar代理配置頁面,單擊命名空間頁簽,選擇配置生效的命名空間,單擊目標Sidecar配置,選中目標配置項並進行相關配置,然後單擊更新設定。
由於命名空間層級不是最低的Sidecar代理配置層級,所有Sidecar代理配置項將沒有預設值(預設採用全域層級中的配置)。單擊更新設定後,命名空間層級的Sidecar代理配置將立即生效。關於Sidecar代理的配置項說明,請參見Sidecar代理配置項說明。
工作負載層級
在同一個命名空間下,您可以建立多個工作負載層級的Sidecar代理配置,作用於不同的工作負載。
登入ASM控制台,在左側導覽列,選擇。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇。
在Sidecar代理配置頁面,單擊工作負載頁簽,然後單擊建立。
在工作負載頁簽,選擇配置生效的命名空間,配置工作負載層級Sidecar代理配置的名稱,在匹配標籤中建立匹配工作負載標籤的標籤選取器,單擊目標Sidecar配置,選中目標配置項並進行相關配置,單擊建立。
由於工作負載層級不是最低的Sidecar代理配置層級,所有Sidecar代理配置項將沒有預設值(預設採用全域層級中的配置)。單擊建立後,將立即建立出工作負載層級的Sidecar代理配置。關於Sidecar代理的配置項說明,請參見Sidecar代理配置項說明。
建立完成後,您也可以對Sidecar代理配置進行更新或刪除操作。
由於已經部署的Pod配置無法更改,您對Sidecar代理進行的配置將無法立即生效。因此,在配置Sidecar代理後,您需要重新部署Pod。重新部署後,Pod中注入的Sidecar代理將生效新的配置。
登入Container Service管理主控台,在左側導覽列單擊叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
在無狀態頁面,按需選擇以下操作,重新部署工作負載。
情境 | 操作 |
單個工作負載 | 在操作列,單擊目標工作負載對應的,然後在重新部署對話方塊,單擊確定。 |
多個工作負載 | 在名稱列,選中多個目標工作負載,在頁面下方單擊批量重新部署,然後在確認對話方塊,單擊確定。 |
Sidecar代理配置項的起始版本支援說明
不同版本的ASM所支援的功能可能存在差異。通常情況下,新版本ASM的Sidecar代理相比老版本,具有更多的功能和參數配置。如果您無法找到某個Sidecar代理配置項,請參考下表確認是否需要升級ASM版本。關於升級ASM版本的具體操作,請參見升級ASM執行個體。
您可以在下表的配置項列,單擊連結查看配置項的相關說明和配置樣本。
說明 當您的ASM執行個體版本為1.22及以上,並且資料面Kubernetes叢集版本為1.30及以上時,Sidecar代理將以原生Sidecar容器的方式部署。此時,Kubernetes叢集將負責管理Sidecar代理容器的生命週期,設定生命週期管理類型的Sidecar代理配置將不起作用。
Sidecar代理配置項說明
您可以對Sidecar代理的資源佔用、流量攔截策略、DNS代理、生命週期等方面進行配置。下文介紹Sidecar代理配置項的說明和配置樣本。
注入的Istio代理資源設定
展開查看注入的Istio代理資源設定的說明和配置樣本
配置項說明
該配置項用於配置Sidecar代理容器在運行時最小需要使用的CPU和記憶體資源、最大能夠申請到的CPU和記憶體資源。
配置項 | 說明 |
資源限制 | Sidecar代理容器最大能申請到的CPU和記憶體資源。CPU資源的單位為核心數(Core),記憶體資源的單位為MiB。 |
所需資源 | Sidecar代理容器運行時最小需要使用的CPU和記憶體資源。CPU資源的單位為核心數(Core),記憶體資源的單位為MiB。 |
配置樣本
在Sidecar代理配置頁面,單擊目標Sidecar代理配置層級頁簽,然後單擊資源設定。
(可選)在資源設定地區,選中注入的Istio代理資源設定。
命名空間和工作負載頁簽需執行此步驟,全域頁簽可跳過此步驟。
配置資源限制的CPU為2 Core,記憶體為1025 MiB;配置所需資源的CPU為0.1 Core,記憶體為128 MiB,然後在頁面下方,單擊更新設定。
重新部署工作負載,使Sidecar代理配置生效。具體操作,請參見(可選)重新部署工作負載。
通過kubectl串連ACK叢集。具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集。
執行以下命令,查看設定的Istio代理資源。
kubectl get pod -n <命名空間名稱> <Pod名稱> -o yaml
預期輸出:
apiVersion: v1
kind: Pod
...
spec:
containers:
- args:
- proxy
...
name: istio-proxy
...
resources:
limits:
cpu: '2'
memory: 1025Mi
requests:
cpu: 100m
memory: 128Mi
...
istio-proxy
容器表示Sidecar代理容器。Pod中名稱為istio-proxy
的resources欄位已配置為目標資源值,表明注入的Istio代理資源設定配置生效。
istio-init初始化容器資源設定
展開查看istio-init初始化容器資源設定的說明和配置樣本
配置項說明
該配置項用於配置注入Sidecar代理的Pod中的istio-init容器在運行時最小需要使用的CPU和記憶體資源、最大能夠申請到的CPU和記憶體資源。istio-init容器是注入Sidecar代理的Pod在啟動時執行的初始化容器,用於為Sidecar代理容器配置流量攔截路由規則等。
配置項 | 說明 |
資源限制 | istio-init容器最大能申請到的CPU和記憶體資源。CPU資源的單位為核心數(Core),記憶體資源的單位為MiB。 |
所需資源 | istio-init容器運行時最小需要使用的CPU和記憶體資源。CPU資源的單位為核心數(Core),記憶體資源的單位為MiB。 |
配置樣本
在Sidecar代理配置頁面,單擊目標Sidecar代理配置層級頁簽,然後單擊資源設定。
(可選)在資源設定地區,選中istio-init初始化容器資源設定。
命名空間和工作負載頁簽需執行此步驟,全域頁簽可跳過此步驟。
配置資源限制的CPU為1 Core,記憶體為512 MiB;配置所需資源的CPU為0.1 Core,記憶體為128 MiB,然後在頁面下方,單擊更新設定。
重新部署工作負載,使Sidecar代理配置生效。具體操作,請參見(可選)重新部署工作負載。
通過kubectl串連ACK叢集。具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集。
執行以下命令,查看設定的istio-init初始化容器資源。
kubectl get pod -n <命名空間名稱> <Pod名稱> -o yaml
預期輸出:
apiVersion: v1
kind: Pod
...
spec:
...
initContainers:
- args:
...
name: istio-init
resources:
limits:
cpu: '1'
memory: 512Mi
requests:
cpu: 100m
memory: 128Mi
...
Pod中名稱為istio-init
的初始化容器的resources欄位已配置為目標資源值,表明istio-init初始化容器資源設定配置生效。
為Sidecar設定ACK動態超賣資源
展開查看為Sidecar設定ACK動態超賣資源的說明和配置樣本
配置項說明
該配置項用於設定分配給注入的Istio代理以及istio-init初始化容器的ACK動態超賣資源。關於動態超賣資源的更多資訊,請參見動態資源超賣。
該配置項的配置方法與注入的Istio代理資源設定和istio-init初始化容器資源設定相同。配置後,當Pod帶有ACK動態資源超賣labelkoordinator.sh/qosClass
時,將會為Pod中的Istio代理和istio-init初始化容器分配ACK動態超賣資源,不會分配Kubernetes常規的CPU及Memory資源。
說明 為Sidecar設定ACK動態超賣時,CPU資源的單位為千分之一核。
配置樣本
在Sidecar代理配置頁面,單擊目標Sidecar代理配置層級頁簽,單擊資源設定,選中為Sidecar設定ACK動態超賣資源,配置相關資訊,然後在頁面下方,單擊更新設定。
配置項 | 配置子項 | 說明 |
注入的Istio代理資源設定(ACK動態超賣資源) | 資源限制 | 配置CPU為2000千分之一核,記憶體為2048 MiB。 |
所需資源 | 配置CPU為200 千分之一核,記憶體為256 MiB。 |
istio-init初始化容器資源(ACK動態超賣資源) | 資源限制 | 配置CPU為1000千分之一核,記憶體為1024 MiB。 |
所需資源 | 配置CPU為100 千分之一核,記憶體為128 MiB。 |
重新部署工作負載,使Sidecar代理配置生效。具體操作,請參見(可選)重新部署工作負載。
通過kubectl串連ACK叢集。具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集。
執行以下命令,查看設定的istio-init初始化容器資源。
kubectl get pod -n <命名空間名稱> <Pod名稱> -o yaml
預期輸出:
apiVersion: v1
kind: Pod
metadata:
...
labels:
koordinator.sh/qosClass: BE
spec:
containers:
- args:
...
name: istio-proxy
...
resources:
limits:
kubernetes.io/batch-cpu: 2k
kubernetes.io/batch-memory: 2Gi
requests:
kubernetes.io/batch-cpu: '200'
kubernetes.io/batch-memory: 256Mi
...
initContainers:
- args:
...
name: istio-init
resources:
limits:
kubernetes.io/batch-cpu: 1k
kubernetes.io/batch-memory: 1Gi
requests:
kubernetes.io/batch-cpu: '100'
kubernetes.io/batch-memory: 128Mi
...
Pod中對應的istio-proxy
容器(Istio代理容器)和istio-init
初始化容器都包含resources欄位,且已配置為目標資源值,表明為Sidecar設定ACK動態超賣資源配置生效。
Istio-Proxy線程數
展開查看Istio-Proxy線程數的說明和配置樣本
配置項說明
該配置項用於配置Sidecar代理容器啟動並執行背景工作執行緒數量。您需要配置一個非負整數來表示Sidecar代理容器的線程數。當配置為0時,背景工作執行緒數量將根據為Sidecar代理配置的所需CPU資源或CPU資源限制進行自動選擇(資源限制優先於所需資源)。
配置樣本
在Sidecar代理配置頁面,單擊目標Sidecar代理配置層級頁簽,然後單擊資源設定。
(可選)在資源設定地區,選中Istio-Proxy線程數。
命名空間和工作負載頁簽需執行此步驟,全域頁簽可跳過此步驟。
配置Istio-Proxy線程數為3,然後在頁面下方,單擊更新設定。
該配置表示Sidecar代理容器運行時將啟動3條背景工作執行緒。
重新部署工作負載,使Sidecar代理配置生效。具體操作,請參見(可選)重新部署工作負載。
通過kubectl串連ACK叢集。具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集。
執行以下命令,查看設定的Istio-Proxy線程數。
kubectl get pod -n <命名空間名稱> <Pod名稱> -o yaml
預期輸出:
apiVersion: v1
kind: Pod
...
spec:
...
- args:
- proxy
- sidecar
- '--domain'
- $(POD_NAMESPACE).svc.cluster.local
- '--proxyLogLevel=warning'
- '--proxyComponentLogLevel=misc:error'
- '--log_output_level=default:info'
- '--concurrency'
- '3'
...
name: istio-proxy
...
istio-proxy
容器的concurrency參數被設定為3
,表明Istio-Proxy線程數配置生效。
攔截對外訪問的位址範圍
展開查看攔截對外訪問的位址範圍的說明和配置樣本
配置項說明
您需要配置一個以英文半形逗號(,)分隔的IP位址範圍列表。每個IP位址範圍使用CIDR形式。當注入Sidecar代理的工作負載訪問其它服務時,只有目的地IP地址在配置的位址範圍中的請求會被Sidecar代理容器攔截,其它請求將不經過Sidecar代理直接發送到目的地。 此項預設配置為*,表示Sidecar代理容器將攔截工作負載所有的出站流量。
配置樣本
在Sidecar代理配置頁面,單擊目標Sidecar代理配置層級頁簽,然後單擊按連接埠或地址來啟用/禁用Sidecar代理。
(可選)在按連接埠或地址來啟用/禁用Sidecar代理地區,選中攔截對外訪問的位址範圍。
命名空間和工作負載頁簽需執行此步驟,全域頁簽可跳過此步驟。
配置攔截對外訪問的位址範圍為192.168.0.0/16,10.1.0.0/24,然後在頁面下方,單擊更新設定。
該配置表示Sidecar代理容器將攔截目的地IP地址在192.168.0.0/16和10.1.0.0/24兩個CIDR內部的請求。
重新部署工作負載,使Sidecar代理配置生效。具體操作,請參見(可選)重新部署工作負載。
通過kubectl串連ACK叢集。具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集。
執行以下命令,查看設定的攔截對外訪問的位址範圍。
kubectl get pod -n <命名空間名稱> <Pod名稱> -o yaml
預期輸出:
apiVersion: v1
kind: Pod
...
spec:
...
initContainers:
- args:
- istio-iptables
- '-p'
- '15001'
- '-z'
- '15006'
- '-u'
- '1337'
- '-m'
- REDIRECT
- '-i'
- '192.168.0.0/16,10.1.0.0/24'
- '-x'
- 192.168.0.1/32
- '-b'
- '*'
- '-d'
- '15090,15021,15081,9191,15020'
- '--log_output_level=default:info'
...
name: istio-init
...
istio-init
容器的運行參數配置了-i 192.168.0.0/16,10.1.0.0/24
,表明攔截對外訪問的位址範圍配置生效。
不攔截對外訪問的位址範圍
展開查看不攔截對外訪問的位址範圍的說明和配置樣本
配置項說明
您需要配置一個以半形英文逗號(,)分隔的IP位址範圍列表。每個IP位址範圍使用CIDR形式。當注入Sidecar代理的工作負載訪問其它服務時,Sidecar代理容器將攔截出站流量。若請求目的地IP地址位於該項配置的CIDR中,請求不會被Sidecar代理容器攔截。
重要 當不攔截對外訪問的位址範圍中包含攔截對外訪問的位址範圍指定的地址時,請求此地址將不會被Sidecar代理攔截。更多資訊,請參見攔截對外訪問的位址範圍。
配置樣本
在Sidecar代理配置頁面,單擊目標Sidecar代理配置層級頁簽,然後單擊按連接埠或地址來啟用/禁用Sidecar代理。
(可選)在按連接埠或地址來啟用/禁用Sidecar代理地區,選中不攔截對外訪問的位址範圍。
命名空間和工作負載頁簽需執行此步驟,全域頁簽可跳過此步驟。
配置不攔截對外訪問的位址範圍為10.1.0.0/24,然後在頁面下方,單擊更新設定。
該配置表示Sidecar代理容器將不會攔截目的地IP地址在CIDR 10.1.0.0/24內部的請求。
重新部署工作負載,使Sidecar代理配置生效。具體操作,請參見(可選)重新部署工作負載。
通過kubectl串連ACK叢集。具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集。
執行以下命令,查看設定的不攔截對外訪問的位址範圍。
kubectl get pod -n <命名空間名稱> <Pod名稱> -o yaml
預期輸出:
apiVersion: v1
kind: Pod
...
spec:
...
initContainers:
- args:
- istio-iptables
- '-p'
- '15001'
- '-z'
- '15006'
- '-u'
- '1337'
- '-m'
- REDIRECT
- '-i'
- '*'
- '-x'
- '192.168.0.1/32,10.1.0.0/24'
- '-b'
- '*'
- '-d'
- '15090,15021,15081,9191,15020'
- '--log_output_level=default:info'
...
name: istio-init
...
istio-init
容器的運行參數中設定了-x 192.168.0.1/32,10.1.0.0/24
。192.168.0.1/32
為預設設定的主機地址CIDR。10.1.0.0/24
與Sidecar代理配置中設定的IP位址範圍一致,表明不攔截對外訪問的位址範圍配置生效。
設定連接埠使入口流量經過Sidecar代理
展開查看設定連接埠使入口流量經過Sidecar代理的說明和配置樣本
配置項說明
您需要配置一個以英文半形逗號(,)分隔的連接埠號碼列表。在目標連接埠在列表中的流量會被Sidecar代理容器攔截。預設配置為*,表示Sidecar代理容器將攔截工作負載所有的入站流量。
配置樣本
在Sidecar代理配置頁面,單擊目標Sidecar代理配置層級頁簽,然後單擊按連接埠或地址來啟用/禁用Sidecar代理。
(可選)在按連接埠或地址來啟用/禁用Sidecar代理地區,選中設定連接埠使入口流量經過Sidecar代理。
命名空間和工作負載頁簽需執行此步驟,全域頁簽可跳過此步驟。
配置設定連接埠使入口流量經過Sidecar代理為80,443,然後單擊更新設定。
該配置表示Sidecar代理容器將僅攔截髮往本工作負載80連接埠和443連接埠的請求。
重新部署工作負載,使Sidecar代理配置生效。具體操作,請參見(可選)重新部署工作負載。
通過kubectl串連ACK叢集。具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集。
執行以下命令,查看設定的入站流量攔截連接埠。
kubectl get pod -n <命名空間名稱> <Pod名稱> -o yaml
預期輸出:
apiVersion: v1
kind: Pod
...
spec:
...
initContainers:
- args:
- istio-iptables
- '-p'
- '15001'
- '-z'
- '15006'
- '-u'
- '1337'
- '-m'
- REDIRECT
- '-i'
- '*'
- '-x'
- 192.168.0.1/32
- '-b'
- '80,443'
- '-d'
- '15090,15021,15081,9191,15020'
- '--log_output_level=default:info'
...
name: istio-init
...
istio-init
容器的運行參數中設定了-b 80,443
,與Sidecar代理配置中設定的入向連接埠一致,表明設定連接埠使入口流量經過Sidecar代理配置生效。
設定連接埠使出口流量經過Sidecar代理
展開查看設定連接埠使出口流量經過Sidecar代理的說明和配置樣本
配置項說明
您需要配置一個以英文半形逗號(,)分隔的連接埠號碼列表,表示所有出站流量目的服務連接埠。在目的服務連接埠列表中的請求,都將被Sidecar代理容器攔截。
重要 如果該配置項與不攔截對外訪問的位址範圍或者設定連接埠使出口流量免於經過Sidecar代理同時配置,當請求目標IP地址位於不攔截的CIDR範圍中,或者請求目標服務連接埠位於不攔截的連接埠列表中,即使目標連接埠位於該項的列表中,請求也不會被Sidecar代理攔截。更多資訊,請參見不攔截對外訪問的位址範圍和設定連接埠使出口流量免於經過Sidecar代理。
配置樣本
在Sidecar代理配置頁面,單擊目標Sidecar代理配置層級頁簽,然後單擊按連接埠或地址來啟用/禁用Sidecar代理。
(可選)在按連接埠或地址來啟用/禁用Sidecar代理地區,選中設定連接埠使出口流量經過Sidecar代理。
命名空間和工作負載頁簽需執行此步驟,全域頁簽可跳過此步驟。
配置設定連接埠使出口流量經過Sidecar代理為80,443,然後在頁面下方,單擊更新設定。
該配置表示Sidecar代理容器將攔截髮往80連接埠和443連接埠服務的請求。
重新部署工作負載,使Sidecar代理配置生效。具體操作,請參見(可選)重新部署工作負載。
通過kubectl串連ACK叢集。具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集。
執行以下命令,查看設定的出站流量攔截連接埠。
kubectl get pod -n <命名空間名稱> <Pod名稱> -o yaml
預期輸出:
apiVersion: v1
kind: Pod
...
spec:
...
initContainers:
- args:
- istio-iptables
- '-p'
- '15001'
- '-z'
- '15006'
- '-u'
- '1337'
- '-m'
- REDIRECT
- '-i'
- '*'
- '-x'
- 192.168.0.1/32
- '-b'
- '*'
- '-d'
- '15090,15021,15081,9191,15020'
- '--log_output_level=default:info'
- '-q'
- '80,443'
- '--log_output_level=default:info'
...
name: istio-init
...
istio-init
容器的運行參數中設定了-q 80,443
,與Sidecar代理配置中設定的出向連接埠一致,表明設定連接埠使出口流量經過Sidecar代理配置生效。
設定連接埠使入口流量免於經過Sidecar代理
展開查看設定連接埠使入口流量免於經過Sidecar代理的說明和配置樣本
配置項說明
您需要配置一個以英文半形逗號(,)分隔的連接埠號碼列表。目標連接埠列表中的流量將不會被Sidecar代理容器攔截。
重要 此配置項僅在設定連接埠使入口流量經過Sidecar代理被配置為*的情況下生效,即Sidecar代理容器預設攔截所有入站流量。
配置樣本
在Sidecar代理配置頁面,單擊目標Sidecar代理配置層級頁簽,然後單擊按連接埠或地址來啟用/禁用Sidecar代理。
(可選)在按連接埠或地址來啟用/禁用Sidecar代理地區,選中設定連接埠使入口流量免於經過Sidecar代理。
命名空間和工作負載頁簽需執行此步驟,全域頁簽可跳過此步驟。
配置設定連接埠使入口流量免於經過Sidecar代理為8000,然後在頁面下方,單擊更新設定。
該配置表示Sidecar代理容器將不再攔截髮往本工作負載8000連接埠的請求。
重新部署工作負載,使Sidecar代理配置生效。具體操作,請參見(可選)重新部署工作負載。
通過kubectl串連ACK叢集。具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集。
執行以下命令,查看設定的入站流量免攔截連接埠。
kubectl get pod -n <命名空間名稱> <Pod名稱> -o yaml
預期輸出:
apiVersion: v1
kind: Pod
...
spec:
...
initContainers:
- args:
- istio-iptables
- '-p'
- '15001'
- '-z'
- '15006'
- '-u'
- '1337'
- '-m'
- REDIRECT
- '-i'
- '*'
- '-x'
- 192.168.0.1/32
- '-b'
- '*'
- '-d'
- '15090,15021,15081,9191,15020,8000'
- '--log_output_level=default:info'
...
name: istio-init
...
istio-init
容器的運行參數中設定了-d 15090,15021,15081,9191,8000
。15090,15021,15081,9191
連接埠是Sidecar代理的應用連接埠,預設位於不攔截範圍之內。8000
連接埠與Sidecar代理配置中設定的入向連接埠一致,表明設定連接埠使入口流量免於經過Sidecar代理配置生效。
設定連接埠使出口流量免於經過Sidecar代理
展開查看設定連接埠使出口流量免於經過Sidecar代理的說明和配置樣本
配置項說明
您需要配置一個以英文半形逗號(,)分隔的連接埠號碼列表,表示所有出站流量目的服務連接埠。在服務連接埠列表中的請求都不會被Sidecar代理容器攔截。您無需考慮目的服務的IP地址是否在攔截對外訪問的位址範圍內、目的服務的連接埠是否在攔截對外訪問的連接埠列表內。
配置樣本
在Sidecar代理配置頁面,單擊目標Sidecar代理配置層級頁簽,然後單擊按連接埠或地址來啟用/禁用Sidecar代理。
(可選)在按連接埠或地址來啟用/禁用Sidecar代理地區,選中設定連接埠使出口流量免於經過Sidecar代理。
命名空間和工作負載頁簽需執行此步驟,全域頁簽可跳過此步驟。
配置設定連接埠使出口流量免於經過Sidecar代理為8000,然後在頁面下方,單擊更新配置。
該配置表示Sidecar代理容器將不再攔截髮往8000連接埠服務的請求。
重新部署工作負載,使Sidecar代理配置生效。具體操作,請參見(可選)重新部署工作負載。
通過kubectl串連ACK叢集。具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集。
執行以下命令,查看設定的出站流量不攔截連接埠。
kubectl get pod -n <命名空間名稱> <Pod名稱> -o yaml
預期輸出:
apiVersion: v1
kind: Pod
...
spec:
...
initContainers:
- args:
- istio-iptables
- '-p'
- '15001'
- '-z'
- '15006'
- '-u'
- '1337'
- '-m'
- REDIRECT
- '-i'
- '*'
- '-x'
- 192.168.0.1/32
- '-b'
- '*'
- '-d'
- '15090,15021,15081,9191,15020'
- '--log_output_level=default:info'
- '-o'
- '8000'
...
name: istio-init
...
istio-init
容器的運行參數中設定了-o 8000
,與Sidecar代理配置中設定的出向連接埠一致,表明設定連接埠使出口流量免於經過Sidecar代理配置生效。
啟用DNS代理功能
展開查看啟用DNS代理功能的說明和配置樣本
配置項說明
您可以選擇為Sidecar代理容器啟用或關閉DNS代理功能。啟用DNS代理功能後,Sidecar代理容器將攔截工作負載的DNS請求,以提高Service Mesh的效能和可用性。來自工作負載的所有請求將被重新導向至Sidecar代理容器。由於Sidecar代理容器在本機存放區IP地址到本地區名的映射,Sidecar代理容器將可以直接返回DNS響應給工作負載,避免再向遠端的DNS服務發送請求。若DNS請求無法被Sidecar代理容器處理,Sidecar將會直接轉寄DNS請求。更多資訊,請參見在ASM中使用DNS代理。
重要 由於網路許可權問題,在ACK Serverless叢集或ECI Pod的ACK叢集中,不支援為Sidecar代理容器啟用DNS代理功能。
配置樣本
在Sidecar代理配置頁面,單擊目標Sidecar代理配置層級頁簽,然後單擊DNS代理功能。
(可選)在DNS代理功能地區,選中啟用DNS代理功能,並開啟右側開關,然後單擊更新設定。
命名空間和工作負載頁簽需執行此步驟,全域頁簽可跳過此步驟。開啟開關表示為Sidecar代理啟用DNS代理功能。
重新部署工作負載,使Sidecar代理配置生效。具體操作,請參見(可選)重新部署工作負載。
通過kubectl串連ACK叢集。具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集。
執行以下命令,查看設定的DNS代理功能。
kubectl get pod -n <命名空間名稱> <Pod名稱> -o yaml
預期輸出:
apiVersion: v1
kind: Pod
spec:
containers:
- args:
- proxy
- sidecar
- '--domain'
- $(POD_NAMESPACE).svc.cluster.local
- '--proxyLogLevel=warning'
- '--proxyComponentLogLevel=misc:error'
- '--log_output_level=default:info'
- '--concurrency'
- '3'
env:
...
- name: ISTIO_META_DNS_AUTO_ALLOCATE
value: 'true'
- name: ISTIO_META_DNS_CAPTURE
value: 'true'
...
name: istio-proxy
istio-proxy
容器的ISTIO_META_DNS_AUTO_ALLOCATE
環境變數和ISTIO_META_DNS_CAPTURE
環境變數被設定為true
,表明DNS代理功能配置生效。
Sidecar代理環境變數管理
展開查看Sidecar代理環境變數管理的說明和配置樣本
配置項說明
此配置項用於配置在Sidecar代理容器中額外添加的環境變數。您可以對以下兩種Sidecar代理環境變數進行配置。
配置項 | 說明 |
Sidecar優雅終止(EXIT_ON_ZERO_ACTIVE_CONNECTIONS) | 開啟此項後,會對應在Sidecar代理容器的環境變數中添加環境變數EXIT_ON_ZERO_ACTIVE_CONNECTIONS: "true" 。該環境變數的作用如下: 在Sidecar代理容器停止時,預設情況下,容器中的pilot-agent進程將停止Envoy代理對入向流量的監聽,並等待一段時間(這段時間由配置項Sidecar代理終止等待時間長度決定),最後停止Envoy代理進程。 設定EXIT_ON_ZERO_ACTIVE_CONNECTIONS後,在Sidecar代理容器停止時,容器中的pilot-agent進程將首先停止Envoy代理對入向流量的監聽,並等待預設的5s。等待完成後開始輪詢Envoy代理的活躍串連數狀態,直到活躍串連數變為0後再停止Envoy代理進程。設定EXIT_ON_ZERO_ACTIVE_CONNECTIONS 能夠在常見情況下改善Sidecar代理容器的終止生命週期流程,在儘可能縮短終止時間的同時減少終止時被丟棄的請求。 |
配置樣本
在Sidecar代理配置頁面,單擊目標Sidecar代理配置層級頁簽,然後單擊Sidecar代理環境變數管理。
(可選)在Sidecar代理環境變數管理地區,選中Sidecar優雅終止(EXIT_ON_ZERO_ACTIVE_CONNECTIONS)。
命名空間和工作負載頁簽需執行此步驟,全域頁簽可跳過此步驟。
開啟Sidecar優雅終止(EXIT_ON_ZERO_ACTIVE_CONNECTIONS)右側的開關,然後單擊更新配置。
重新部署工作負載,使Sidecar代理配置生效。具體操作,請參見(可選)重新部署工作負載。
通過kubectl串連ACK叢集。具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集。
執行以下命令,查看設定的Sidecar代理的環境變數。
kubectl get pod -n <命名空間名稱> <Pod名稱> -o yaml
預期輸出:
apiVersion: v1
kind: Pod
...
spec:
containers:
- args:
...
env:
- name: EXIT_ON_ZERO_ACTIVE_CONNECTIONS
value: 'true'
name: istio-proxy
...
Pod中istio-proxy
容器的Sidecar配置環境變數中,新增EXIT_ON_ZERO_ACTIVE_CONNECTIONS
環境變數,表明Sidecar代理環境變數管理配置生效。
Sidecar優雅啟動(HoldApplicationUntilProxyStarts)
展開查看HoldApplicationUntilProxyStarts的說明和配置樣本
配置項說明
HoldApplicationUntilProxyStarts是一項針對Sidecar代理生命週期的管理配置項。HoldApplicationUntilProxyStarts預設為開啟,表示對於注入Sidecar代理的Pod,在啟動時需要先保證Sidecar代理容器啟動成功,然後才能啟動Pod中的業務容器,以確保發往業務容器的流量不會因Sidecar代理未啟動完成而丟失。
若該項配置為關閉,表示Pod中的Sidecar代理容器及業務容器會同時啟動。在叢集中大量部署Pod時,Sidecar代理容器可能因為APIServer壓力較大而出現啟動較慢的情況。您可以關閉HoldApplicationUntilProxyStarts配置項來提升部署速度。
配置樣本
下文以在全域頁簽關閉HoldApplicationUntilProxyStarts為例。
在Sidecar代理配置頁面,單擊全域頁簽,然後單擊生命週期管理。
關閉Sidecar優雅啟動(HoldApplicationUntilProxyStarts)右側的開關,然後單擊更新設定。
該配置表示不啟用HoldApplicationUntilProxyStarts能力。
重新部署工作負載,使Sidecar代理配置生效。具體操作,請參見(可選)重新部署工作負載。
通過kubectl串連ACK叢集。具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集。
執行以下命令,查看設定的HoldApplicationUntilProxyStarts功能。
kubectl get pod -n <命名空間名稱> <Pod名稱> -o yaml
預期輸出:
apiVersion: v1
kind: Pod
...
spec:
containers:
- command:
...
name: sleep
...
env:
- name: PROXY_CONFIG
value: >-
{..."holdApplicationUntilProxyStarts":false,...}
...
name: istio-proxy
...
holdApplicationUntilProxyStarts功能關閉後,istio-proxy
容器不再強制聲明於業務容器之前,也不再聲明預設的lilfecycle欄位。此時,Service Mesh已經不再強制確保Sidecar代理容器啟動成功後才啟動業務容器。
Sidecar代理終止等待時間長度
展開查看Sidecar代理終止等待時間長度的說明和配置樣本
配置項說明
Sidecar代理終止等待時間長度是一項針對Sidecar代理生命週期的管理配置項。為Pod注入Sidecar代理後,業務Pod的流量將被Sidecar代理容器攔截。
當Pod開始停止時,對應的Service不再轉寄流量給Pod。Sidecar代理容器在收到退出訊號後會等待一段時間,在這段時間內,不再接受新的入站流量,繼續處理存量的入站流量(出站流量不受影響,可以正常發起),這段時間被稱為Sidecar代理終止等待時間長度。Sidecar代理容器的終止等待時間長度預設為5s,支援配置以s為單位的秒數,例如10s。
如果被停止的服務提供的介面調用的耗時較長,超過了Sidecar代理容器的終止等待時間長度,已有的入站串連和出站串連即使沒有處理完成也會被終止,造成某些請求的丟失。此時,您可以利用此配置項延長Sidecar代理終止等待時間長度,完成入站和出站流量的處理。
Sidecar代理終止等待時間長度需要配置為以s為單位的秒數,例如10s。
配置樣本
在Sidecar代理配置頁面,單擊目標Sidecar代理配置層級頁簽,然後單擊生命週期管理。
(可選)在生命週期管理地區,選中Sidecar代理終止等待時間長度。
命名空間和工作負載頁簽需執行此步驟,全域頁簽可跳過此步驟。
配置Sidecar代理終止等待時間長度為10s,然後單擊更新設定。
該配置表示Sidecar代理將在終止時等待10s來處理存量串連。
重新部署工作負載,使Sidecar代理配置生效。具體操作,請參見(可選)重新部署工作負載。
通過kubectl串連ACK叢集。具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集。
執行以下命令,查看設定的Sidecar代理終止等待時間長度。
kubectl get pod -n <命名空間名稱> <Pod名稱> -o yaml
預期輸出:
apiVersion: v1
kind: Pod
...
spec:
containers:
- args:
...
env:
- name: TERMINATION_DRAIN_DURATION_SECONDS
value: '10'
...
- name: PROXY_CONFIG
value: >-
{..."terminationDrainDuration":"10s"}
...
name: istio-proxy
...
Pod中的istio-proxy
容器配置了值為10
的TERMINATION_DRAIN_DURATION_SECONDS
環境變數,並在PROXY_CONFIG
環境變數中記錄了terminationDrainDuration
為10s
,表明Sidecar代理終止等待時間長度配置生效。
Sidecar代理生命週期
展開查看Sidecar代理生命週期的說明和配置樣本
配置項說明
Sidecar代理生命週期支援完全定製Sidecar代理容器的容器聲明周期回調。在此配置項中,您需要填寫以JSON格式聲明的容器生命週期回調欄位(lifecycle),該欄位會替換Sidecar代理容器預設配置的容器生命週期回調欄位。更多資訊,請參見容器生命週期回調。
配置樣本
在Sidecar代理配置頁面,單擊目標Sidecar代理配置層級頁簽,然後單擊生命週期管理。
(可選)在生命週期管理地區,選中Sidecar代理生命週期。
命名空間和工作負載頁簽需執行此步驟,全域頁簽可跳過此步驟。
在Sidecar代理生命週期下方,配置以下YAML,然後單擊更新設定。
該YAML配置了postStart和preStop回調參數。
{
"postStart": {
"exec": {
"command": [
"pilot-agent",
"wait"
]
}
},
"preStop": {
"exec": {
"command": [
"/bin/sh",
"-c",
"sleep 13"
]
}
}
}
重新部署工作負載,使Sidecar代理配置生效。具體操作,請參見(可選)重新部署工作負載。
通過kubectl串連ACK叢集。具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集。
執行以下命令,查看設定的Sidecar代理生命週期。
kubectl get pod -n <命名空間名稱> <Pod名稱> -o yaml
預期輸出:
apiVersion: v1
kind: Pod
...
spec:
containers:
- args:
...
...
lifecycle:
postStart:
exec:
command:
- pilot-agent
- wait
preStop:
exec:
command:
- /bin/sh
- -c
- sleep 13
name: istio-proxy
...
Pod中istio-proxy
容器的容器生命週期回調欄位(lifecycle)已被修改為目標配置,表明Sidecar代理生命週期配置生效。
外部服務存取原則
展開查看外部服務存取原則的說明和配置樣本
配置項說明
該配置項用於設定Sidecar代理容器對於外部服務的存取原則。外部服務表示未被Service Mesh註冊的網格外服務。預設情況下,被Service Mesh管理的Kubernetes叢集中的服務都屬於被註冊的服務。您可以通過聲明服務條目(ServiceEntry)資源,手動為Service Mesh註冊服務,不在此列服務之內都屬於外部服務。
該配置項支援以下兩種策略:
說明 此配置項為全域配置,您只能在全域層級設定此項。若需要在命名空間或工作負載層級設定外部服務存取原則,您可以登入ASM控制台,在頁面進行配置。
配置樣本
在Sidecar代理配置頁面的全域頁簽,單擊外部服務存取原則,在對外部服務的存取原則OutboundTrafficPolicy右側單擊REGISTRY_ONLY,然後單擊更新設定。
該配置表示限制網格中的服務訪問外部服務。
重新部署工作負載,使Sidecar代理配置生效。具體操作,請參見(可選)重新部署工作負載。
通過kubectl串連ACK叢集。具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集。
使用以下內容,建立sleep.yaml。
apiVersion: v1
kind: ServiceAccount
metadata:
name: sleep
---
apiVersion: v1
kind: Service
metadata:
name: sleep
labels:
app: sleep
service: sleep
spec:
ports:
- port: 80
name: http
selector:
app: sleep
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: sleep
spec:
replicas: 1
selector:
matchLabels:
app: sleep
template:
metadata:
labels:
app: sleep
spec:
terminationGracePeriodSeconds: 0
serviceAccountName: sleep
containers:
- name: sleep
image: curlimages/curl
command: ["/bin/sleep", "3650d"]
imagePullPolicy: IfNotPresent
volumeMounts:
- mountPath: /etc/sleep/tls
name: secret-volume
volumes:
- name: secret-volume
secret:
secretName: sleep-secret
optional: true
---
執行以下命令,部署sleep應用。
kubectl apply -f sleep.yaml -n default
執行以下命令,通過sleep應用訪問外部服務。
kubectl exec -it {sleep Pod名稱} -c sleep -- curl www.aliyun.com -v
預期輸出:
* Trying *********...
* Connected to www.aliyun.com (********) port 80 (#0)
> GET / HTTP/1.1
> Host: www.aliyun.com
> User-Agent: curl/7.87.0-DEV
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 502 Bad Gateway
< date: Mon,********* 03:25:00 GMT
< server: envoy
< content-length: 0
<
* Connection #0 to host www.aliyun.com left intact
返回502
響應,表明注入了Sidecar代理的Sleep應用無法訪問外部服務www.aliyun.com
,外部服務存取原則配置生效。
Sidecar入站流量攔截策略
展開查看Sidecar入站流量攔截策略的說明和配置樣本
配置項說明
該配置項用於設定Sidecar代理對於入站流量的攔截策略。在預設情況下,Sidecar代理容器使用iptables重新導向策略對發往應用程式工作負載的入站流量進行攔截,在重新導向攔截入站流量後,應用程式將只能看到Sidecar代理容器的IP作為請求的源IP,無法看到真正的用戶端原始IP。
通過將入站流量攔截策略改為透明Proxy 原則(TPROXY),Service Mesh將允許Sidecar代理容器使用Iptables的透明代理模式對入站流量進行攔截。配置該項後,應用程式可以看到用戶端原始IP。更多資訊,請參見在服務網格環境下如何保持服務訪問時的用戶端源IP。
重要 透明Proxy 原則不支援作業系統為Cent OS的節點,當您的pod所在節點系統為Cent OS時,請使用重新導向策略。
配置樣本
在Sidecar代理配置頁面,單擊目標Sidecar代理配置層級頁簽,然後單擊Sidecar入站流量攔截策略。
(可選)在Sidecar入站流量攔截策略地區,選中Sidecar入站流量攔截策略。
命名空間和工作負載頁簽需執行此步驟,全域頁簽可跳過此步驟。
在Sidecar入站流量攔截策略右側,單擊透明Proxy 原則,然後單擊更新設定。
重新部署工作負載,使Sidecar代理配置生效。具體操作,請參見(可選)重新部署工作負載。
通過kubectl串連ACK叢集。具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集。
執行以下命令,查看設定的Sidecar入站流量攔截策略。
kubectl get pod -n <命名空間名稱> <Pod名稱> -o yaml
預期輸出:
apiVersion: v1
kind: Pod
...
spec:
containers:
- args:
...
- name: PROXY_CONFIG
value: >-
{..."interceptionMode":"TPROXY",...}
- name: ISTIO_META_POD_PORTS
value: |-
[
]
...
name: istio-proxy
...
initContainers:
- args:
- istio-iptables
- '-p'
- '15001'
- '-z'
- '15006'
- '-u'
- '1337'
- '-m'
- TPROXY
...
name: istio-init
...
Pod中istio-proxy
容器的Sidecar配置環境變數中記錄了"interceptionMode":"TPROXY"
的資訊,同時istio-init
容器在初始化時也相應使用TPROXY參數運行初始化指令,表明Sidecar入站流量攔截策略配置生效。
記錄層級
展開查看記錄層級的說明和配置樣本
配置項說明
該配置項用於設定Sidecar代理容器的記錄層級。Sidecar代理預設擁有info的記錄層級。您可以將Sidecar代理的記錄層級修改為info、debug、trace、warning、error、critical、off七種層級的任意一種,以在Sidecar代理中擷取更多或更少的日誌資訊。
配置樣本
在Sidecar代理配置頁面,單擊目標Sidecar代理配置層級頁簽,然後單擊監控統計。
(可選)在監控統計地區,選中記錄層級。
命名空間和工作負載頁簽需執行此步驟,全域頁簽可跳過此步驟。
在記錄層級右側,選擇error,然後單擊更新設定。
該配置表示Sidecar代理將以error層級進行日誌輸出,只有層級為error或以上的日誌會被輸出。
重新部署工作負載,使Sidecar代理配置生效。具體操作,請參見(可選)重新部署工作負載。
通過kubectl串連ACK叢集。具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集。
執行以下命令,查看設定的Sidecar代理記錄層級。
kubectl get pod -n <命名空間名稱> <Pod名稱> -o yaml
預期輸出:
apiVersion: v1
kind: Pod
...
spec:
containers:
- args:
- proxy
- sidecar
- '--domain'
- $(POD_NAMESPACE).svc.cluster.local
- '--proxyLogLevel=error'
...
name: istio-proxy
...
istio-proxy
容器的運行參數被設定為--proxyLogLevel=error
,表明記錄層級配置生效。
proxyStatsMatcher
展開查看proxyStatsMatcher的說明和配置樣本
配置項說明
該配置項用於定義Sidecar代理上報的自訂Envoy統計指標資訊。Envoy是Sidecar代理的技術實現,可以統計並上報一系列的指標資訊,但Service Mesh預設僅開啟其中一部分指標的統計與暴露,以減少對Sidecar代理的效能損耗。您可以在此配置項中,通過首碼匹配、尾碼匹配、或者正則匹配的方法,指定匹配Sidecar代理需要額外統計上報的指標資訊。
配置樣本
在Sidecar代理配置頁面,單擊目標Sidecar代理配置層級頁簽,然後單擊監控統計。
在監控統計地區,選中proxyStatsMatcher,然後選中正則匹配,配置為.*outlier_detection.*。
該配置表示為Sidecar代理加入熔斷指標的統計。
重新部署工作負載,使Sidecar代理配置生效。具體操作,請參見(可選)重新部署工作負載。
通過kubectl串連ACK叢集。具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集。
執行以下命令,查看設定的Sidecar代理自訂統計指標資訊。
kubectl get pod -n <命名空間名稱> <Pod名稱> -o yaml
預期輸出:
apiVersion: v1
kind: Pod
...
spec:
containers:
- args:
...
- name: PROXY_CONFIG
value: >-
{..."proxyStatsMatcher":{"inclusionRegexps":[".*outlier_detection.*"]},...}
...
Pod中istio-proxy
容器的Sidecar配置環境變數中已更新自訂統計指標資訊,表明proxyStatsMatcher配置生效。
Envoy運行時參數
展開查看Envoy運行時參數的說明和配置樣本
配置項說明
此配置項用於配置Sidecar代理容器中Envoy進程的運行時參數。您可以配置以下的運行時參數。
配置樣本
在Sidecar代理配置頁面,單擊目標Sidecar代理配置層級頁簽,然後單擊Sidecar代理環境變數管理。
(可選)在Envoy運行時參數地區,在下遊串連數限制右側的輸入框內,輸出5000,然後單擊更新配置。
重新部署工作負載,使Sidecar代理配置生效。具體操作,請參見(可選)重新部署工作負載。
通過kubectl串連ACK叢集。具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集。
執行以下命令,查看設定的Sidecar代理的環境變數。
kubectl get pod -n <命名空間名稱> <Pod名稱> -o yaml
預期輸出:
apiVersion: v1
kind: Pod
...
spec:
containers:
- args:
...
env:
- name: PROXY_CONFIG
value: >-
{"concurrency":2,"configPath":"/etc/istio/proxy","discoveryAddress":"istiod-1-22-6.istio-system.svc:15012","holdApplicationUntilProxyStarts":true,"interceptionMode":"REDIRECT","proxyMetadata":{"BOOTSTRAP_XDS_AGENT":"false","DNS_AGENT":"","EXIT_ON_ZERO_ACTIVE_CONNECTIONS":"true"},"runtimeValues":{"overload.global_downstream_max_connections":"5000"},"terminationDrainDuration":"5s","tracing":{"zipkin":{"address":"zipkin.istio-system:9411"}}}
name: istio-proxy
...
Pod中istio-proxy
容器的Sidecar配置PROXY_CONFIG環境變數中,新增"runtimeValues":{"overload.global_downstream_max_connections":"5000"}
欄位,表明Envoy運行時參數配置生效。