ASM支持通過Annotation方式修改Sidecar代理資源和配置。本文介紹如何通過添加資源注解和ProxyConfig字段的方式配置Sidecar Proxy。
前提條件
已添加集群到ASM實例。具體操作,請參見添加集群到ASM實例。
已部署入口網關。具體操作,請參見創建入口網關。
添加資源注解
ASM支持在Pod中添加注解的方式來修改Sidecar代理資源,本文以修改Sidecar代理的內存為例。關于其他更多注解的詳細介紹,請參見附錄一:Istio資源注解。
為default命名空間啟用Sidecar網格代理自動注入。具體操作,請參見啟用自動注入。
在default命名空間下部署應用。具體操作,請參見在ASM實例關聯的集群中部署應用。
修改Sidecar代理最小的內存。
登錄容器服務管理控制臺,在左側導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇
。在無狀態頁面的操作列,單擊目標應用對應的
。在編輯 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代理準備好接受流量,從而緩解一些啟動競爭條件。 |