ASM支援通過Annotation方式修改Sidecar代理資源和配置。本文介紹如何通過添加資源註解和ProxyConfig欄位的方式配置Sidecar Proxy。
前提條件
已添加叢集到ASM執行個體。具體操作,請參見添加叢集到ASM執行個體。
已部署入口網關。具體操作,請參見建立入口網關。
添加資源註解
ASM支援在Pod中添加註解的方式來修改Sidecar代理資源,本文以修改Sidecar代理的記憶體為例。關於其他更多註解的詳細介紹,請參見附錄一:Istio資源註解。
-
為default命名空間啟用Sidecar網格代理自動注入。具體操作,請參見啟用自動注入。
-
在default命名空間下部署應用。具體操作,請參見在ASM執行個體關聯的叢集中部署應用。
-
修改Sidecar代理最小的記憶體。
-
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
-
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
-
在無狀態頁面的操作列,單擊目標應用對應的。
-
在編輯 YAML對話方塊的
template參數下添加以下內容,然後單擊更新。annotations: sidecar.istio.io/proxyMemory: 14Mitemplate: metadata: annotations: sidecar.istio.io/proxyMemory: 14Mi labels: app: details version: v1
-
-
驗證修改Sidecar代理的記憶體是否成功。
在叢集管理頁左側導覽列,選擇。
-
在容器組頁面的操作列,單擊目標應用程式容器對應的詳情。
-
在容器頁簽,單擊istio-proxy。
可以看到istio-proxy所需資源為14Mi。單擊後可查看 istio-proxy 容器詳情,包括鏡像地址、鏡像拉取策略(IfNotPresent)、Istio sidecar 相關環境變數等資訊。在底部所需資源一行,可看到當前記憶體配置為
Memory: 14Mi。
設定ProxyConfig欄位
ASM支援在Pod中修改ProxyConfig欄位的方式來定義Sidecar代理配置,關於ProxyConfig欄位的更多使用介紹,請參見附錄二:ProxyConfig支援的欄位。
proxy.istio.io/config的值可以使用YAML格式,也可以使用JSON格式。
設定ProxyConfig欄位的操作方式和添加資源註解的操作相同,本文列舉了常用ProxyConfig欄位樣本,設定ProxyConfig欄位的操作步驟,請參見上文。
樣本一:設定中止排出時間
通過設定terminationDrainDuration修改中止排出時間。中止排出時間指當業務容器中止時,Istio Proxy最多等待時間。
在應用的YAML檔案中添加以下內容,當業務容器中止時,Istio Proxy最多等待3秒。
annotations:
proxy.istio.io/config: |
terminationDrainDuration: 3s
type: RollingUpdate
template:
metadata:
annotations:
proxy.istio.io/config: |
terminationDrainDuration: 3s
labels:
app: details
在容器組頁面單擊目標應用程式容器操作列下的詳情。在容器頁簽下單擊istio-proxy。可以看到中止排出時間為3s。配置生效後,在 Pod 的容器詳情頁面查看 istio-proxy 容器,可以看到 PROXY_CONFIG 環境變數中 terminationDrainDuration 已被設定為 3s。
樣本二:設定Istio Proxy啟動順序
在ASM中預設全域設定了holdApplicationUntilProxyStarts為true,保證在應用程式容器啟動之前確保Istio Proxy已經啟動成功。如果應用程式容器就緒的時候,Istio Proxy容器沒有就緒,Pod接收流量會失敗。
holdApplicationUntilProxyStarts 是一個配置選項,用於控制應用程式容器在 Sidecar 代理注入後啟動的行為。holdApplicationUntilProxyStarts 設定為 true 時,Istio CNI 或 Sidecar 注入器會配置 Kubernetes Pod 以便在代理容器準備就緒並開始接收流量之前,阻止應用程式容器啟動。這有助於確保在 Pod 開始接收流量之前,所有的流量都會通過代理,從而使得流量管理、監控、安全性原則等能夠立即生效。在大多數情況下,建議將 holdApplicationUntilProxyStarts 設定為 true,以確保網路流量被正確管理。除非在考慮到某些特定情況時,設定為 false 可能是合適的選擇。
在容器組頁面單擊目標應用程式容器操作列下的詳情,單擊事件頁簽,可以看到先啟動業務容器,然後啟動Istio Proxy。在 Pod 的事件頁簽中,details-v1 Pod 的事件列表展示了容器的完整啟動過程,包括 Pod 調度(Scheduled)、鏡像拉取(Pulled)、容器建立(Created)以及容器啟動(Started)事件。啟動的容器依次包括初始化容器 istio-init、應用程式容器 details 和 Sidecar 容器 istio-proxy,其中 Started container 事件以高亮標記,驗證了 holdApplicationUntilProxyStarts 配置生效後的啟動順序。
附錄一:Istio資源註解
|
註解 |
說明 |
|
proxy.istio.io/config |
覆蓋此Proxy的代理配置。 |
|
readiness.status.sidecar.istio.io/applicationPorts |
指定應用程式容器公開的連接埠列表。由Sidecar代理就緒探測器使用,以確定Sidecar代理已配置並準備好接收流量。 |
|
readiness.status.sidecar.istio.io/failureThreshold |
指定Sidecar代理就緒探測的失敗閾值。 |
|
readiness.status.sidecar.istio.io/initialDelaySeconds |
指定Sidecar代理就緒探測的初始延遲(以秒為單位)。 |
|
readiness.status.sidecar.istio.io/periodSeconds |
指定Sidecar代理就緒探測的周期(以秒為單位)。 |
|
sidecar.istio.io/componentLogLevel |
指定Sidecar代理的組件記錄層級。 |
|
sidecar.istio.io/enableCoreDump |
指定Sidecar代理是否應啟用core dump。 |
|
sidecar.istio.io/extraStatTags |
從Istio Proxy遙測中提取的附加標籤列表。每個附加標籤都需要出現在此列表中。 |
|
sidecar.istio.io/inject |
指定是否使用Sidecar自動注入。 |
|
sidecar.istio.io/interceptionMode |
指定用於將入流量重新導向到Envoy的模式(REDIRECT或TPROXY)。 |
|
sidecar.istio.io/logLevel |
為Sidecar代理設定記錄層級。 |
|
sidecar.istio.io/proxyCPU |
為Sidecar代理指定請求的CPU設定。 |
|
sidecar.istio.io/proxyCPULimit |
指定Sidecar代理的CPU限制。 |
|
sidecar.istio.io/proxyMemory |
為Sidecar代理指定請求的記憶體設定。 |
|
sidecar.istio.io/proxyMemoryLimit |
指定Sidecar代理的記憶體限制。 |
|
sidecar.istio.io/rewriteAppHTTPProbers |
將HTTP準備請求和活躍度探測請重新導向到Sidecar代理。 |
|
status.sidecar.istio.io/port |
指定Sidecar代理的HTTP狀態連接埠。如果為零,Sidecar將不提供狀態。 |
|
traffic.sidecar.istio.io/excludeInboundPorts |
從重新導向到Sidecar代理中排除的入站連接埠的逗號分隔列表。僅當所有入流量(即“*”)都被重新導向時才適用。 |
|
traffic.sidecar.istio.io/excludeOutboundIPRanges |
從重新導向中排除的CIDR格式的IP範圍的逗號分隔列表。僅當所有出流量(即為“*”)被重新導向時才適用。 |
|
traffic.sidecar.istio.io/excludeOutboundPorts |
逗號分隔的字串連接埠列表,表示禁止重新導向到Sidecar代理中的出流量。 |
|
traffic.sidecar.istio.io/includeInboundPorts |
將流量重新導向到Sidecar代理的入站連接埠的逗號分隔列表。萬用字元“*”可用於為所有連接埠配置重新導向。空列表將禁用所有入流量的重新導向。 |
|
traffic.sidecar.istio.io/includeOutboundIPRanges |
CIDR格式的IP範圍的逗號分隔列表,用於重新導向到Sidecar代理。萬用字元“*”用於重新導向所有出站流量。空列表將禁用所有出流量的重新導向。 |
|
traffic.sidecar.istio.io/includeOutboundPorts |
一個逗號分隔的出流量連接埠字串列表,無論目標IP是什麼,都將其流量重新導向到Sidecar代理。 |
|
traffic.sidecar.istio.io/kubevirtInterfaces |
以逗號分隔的虛擬介面列表,其入站流量將被視為出站流量。 |
附錄二:ProxyConfig支援的欄位
|
欄位 |
類型 |
描述 |
|
configPath |
String |
產生的設定檔目錄的路徑。Proxy agent產生實際配置並將其儲存在此目錄中。 |
|
statsdUdpAddress |
String |
statsd UDP 接聽程式的IP地址和連接埠。 |
|
proxyAdminPort |
Int32 |
Envoy監聽管理命令的連接埠,預設連接埠為15000。 |
|
controlPlaneAuthPolicy |
AuthenticationPolicy |
AuthenticationPolicy定義了代理串連到控制平面時如何進行身分識別驗證。預設設定為 |
|
concurrency |
啟動並執行背景工作執行緒數。如果未設定,這將根據CPU請求和限制自動確定。如果設定為0,將使用機器上的所有核心。預設為2個背景工作執行緒。 |
|
|
interceptionMode |
InboundInterceptionMode |
設定將入流量重新導向到Sidecar代理的模式。 |
|
tracing |
Tracing |
Sidecar代理使用的tracing配置。 |
|
sds |
SDS |
代理使用的Secret探索服務(SDS)配置。 |
|
proxyMetadata |
Map<string, string> |
代理的其他環境變數。以ISTIO_META_開頭的名稱將包含在產生的引導程式中並發送到XDS伺服器。 |
|
statusPort |
Map<string, string> |
代理偵聽的管理(例如就緒探測)連接埠,預設設定為連接埠15020。 |
|
terminationDrainDuration |
代理關閉時允許串連完成的時間。在收到SIGTERM或SIGINT時,istio-agent會告訴活動的Sidecar代理開始排空,阻止任何新串連並允許完成現有串連。然後會休眠termination_drain_duration,然後關閉所有剩餘的活動Envoy進程。如果未設定,將應用預設值5s。 |
|
|
holdApplicationUntilProxyStarts |
用於啟用或禁用holdApplicationUntilProxyStarts行為的boolean標誌。此功能添加掛鈎以延遲應用程式啟動,直到Pod代理準備好接受流量,從而緩解一些啟動競爭條件。 |