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: 14Mi
驗證修改Sidecar代理的記憶體是否成功。
在叢集管理頁左側導覽列,選擇 。
在容器組頁面的操作列,單擊目標應用程式容器對應的詳情。
在容器頁簽,單擊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。
樣本二:設定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。
附錄一: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代理準備好接受流量,從而緩解一些啟動競爭條件。 |