全部產品
Search
文件中心

Alibaba Cloud Service Mesh:通過Annotation方式配置Sidecar Proxy

更新時間:Jun 30, 2024

ASM支援通過Annotation方式修改Sidecar代理資源和配置。本文介紹如何通過添加資源註解和ProxyConfig欄位的方式配置Sidecar Proxy。

前提條件

添加資源註解

ASM支援在Pod中添加註解的方式來修改Sidecar代理資源,本文以修改Sidecar代理的記憶體為例。關於其他更多註解的詳細介紹,請參見附錄一:Istio資源註解

  1. 為default命名空間啟用Sidecar網格代理自動注入。具體操作,請參見啟用自動注入

  2. 在default命名空間下部署應用。具體操作,請參見在ASM執行個體關聯的叢集中部署應用

  3. 修改Sidecar代理最小的記憶體。

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

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

    3. 無狀態頁面的操作列,單擊目標應用對應的更多 > 查看Yaml

    4. 編輯 YAML對話方塊的template參數下添加以下內容,然後單擊更新

      annotations:
        sidecar.istio.io/proxyMemory: 14Mi

      記憶體

  4. 驗證修改Sidecar代理的記憶體是否成功。

    1. 在叢集管理頁左側導覽列,選擇工作負載 > 容器組

    2. 容器組頁面的操作列,單擊目標應用程式容器對應的詳情

    3. 容器頁簽,單擊istio-proxy

      可以看到istio-proxy所需資源為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

中止排出時間

在容器組頁面單擊目標應用程式容器操作列下的詳情。在容器頁簽下單擊istio-proxy。可以看到中止排出時間為3s。proxy配置

樣本二:設定Istio Proxy啟動順序

在ASM中預設全域設定了holdApplicationUntilProxyStartstrue,保證在應用程式容器啟動之前確保Istio Proxy已經啟動成功。如果應用程式容器就緒的時候,Istio Proxy容器沒有就緒,Pod接收流量會失敗。

holdApplicationUntilProxyStarts 是一個配置選項,用於控制應用程式容器在 Sidecar 代理注入後啟動的行為。holdApplicationUntilProxyStarts 設定為 true 時,Istio CNI 或 Sidecar 注入器會配置 Kubernetes Pod 以便在代理容器準備就緒並開始接收流量之前,阻止應用程式容器啟動。這有助於確保在 Pod 開始接收流量之前,所有的流量都會通過代理,從而使得流量管理、監控、安全性原則等能夠立即生效。在大多數情況下,建議將 holdApplicationUntilProxyStarts 設定為 true,以確保網路流量被正確管理。除非在考慮到某些特定情況時,設定為 false 可能是合適的選擇。

在容器組頁面單擊目標應用程式容器操作列下的詳情,單擊事件頁簽,可以看到先啟動業務容器,然後啟動Istio Proxy。啟動

附錄一: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定義了代理串連到控制平面時如何進行身分識別驗證。預設設定為MUTUAL_TLS

concurrency

Int32Value

啟動並執行背景工作執行緒數。如果未設定,這將根據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

Duration

代理關閉時允許串連完成的時間。在收到SIGTERM或SIGINT時,istio-agent會告訴活動的Sidecar代理開始排空,阻止任何新串連並允許完成現有串連。然後會休眠termination_drain_duration,然後關閉所有剩餘的活動Envoy進程。如果未設定,將應用預設值5s。

holdApplicationUntilProxyStarts

BoolValue

用於啟用或禁用holdApplicationUntilProxyStarts行為的boolean標誌。此功能添加掛鈎以延遲應用程式啟動,直到Pod代理準備好接受流量,從而緩解一些啟動競爭條件。