通过Annotation方式配置Sidecar Proxy

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

前提条件

添加资源注解

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

  1. 为default命名空间启用Sidecar网格代理自动注入。具体操作,请参见启用自动注入

  2. 在default命名空间下部署应用。具体操作,请参见在ASM实例关联的集群中部署应用

  3. 修改Sidecar代理最小的内存。

    1. 登录容器服务管理控制台,在左侧导航栏选择集群

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