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代理准备好接受流量,从而缓解一些启动竞争条件。 |