ASM支持通过Annotation方式修改Sidecar代理资源和配置。本文介绍如何通过添加资源注解和ProxyConfig字段的方式配置Sidecar Proxy。

前提条件

添加资源注解

ASM支持在Pod中添加注解的方式来修改Sidecar代理资源,本文以修改Sidecar代理的内存为例。关于其他更多注解的详细介绍,请参见附录一:Istio资源注解

  1. 启用Sidecar自动注入。
    1. 登录ASM控制台
    2. 在左侧导航栏,选择服务网格 > 网格管理
    3. 网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理
    4. 在网格详情页面左侧导航栏选择网格实例 > 全局命名空间
    5. 全局命名空间页面单击default命名空间右侧自动注入列下的启用Sidecar自动注入
    6. 在弹出的对话框单击确定
  2. 在default命名空间下部署应用。具体操作,请参见部署应用到ASM实例
  3. 修改Sidecar代理最小的内存。
    1. 登录容器服务管理控制台
    2. 在控制台左侧导航栏中,单击集群
    3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
    4. 在集群管理页左侧导航栏中,选择工作负载 > 无状态
    5. 无状态页面单击目标应用右侧操作列下的详情
    6. 在应用详情页面右上角单击查看Yaml
    7. 编辑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接收流量会失败。

如果不需要保证Istio Proxy启动顺序限制,可以在应用的YAML文件中添加以下内容,则Istio Proxy会在应用容器启动后再启动。
annotations:
  proxy.istio.io/config: '{ "holdApplicationUntilProxyStarts": 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代理准备好接受流量,从而缓解一些启动竞争条件。