概述
sidecar注入pod之后会代理业务容器进出的流量,从而实现丰富的流量治理、可观测等能力;sidecar本身作为一个代理服务器支持灵活的策略配置,包括代理的资源消耗限制、生命周期管理、流量拦截策略、外部访问策略等。
sidecar代理配置生效范围及应用
sidecar代理配置支持不同的生效范围,包括全局、命名空间、工作负载以及pod级,优先级依次升高;服务网格CSM当前支持全局和命名空间级别的代理配置。全局代理配置将在全局生效,在没有其他配置的情况下,所有注入的sidecar都将采用这个配置;命名空间的代理配置将在指定的命名空间生效,该命名空间下注入的sidecar,在没有指定pod自定义配置的情况下将全部采用该命名空间代理配置;您可以通过给pod打注解实现pod级别的代理配置。
sidecar代理配置具体操作
在sidecar管理->sidecar代理配置可以看到全局和命名空间代理配置,如下图所示:
配置项说明如下:
配置项 | 说明 |
---|---|
istio代理资源 | sidecar代理容器运行时最小需要使用的CPU和内存资源以及最大能申请到的CPU和内存资源 |
istio-init容器资源 | 初始化容器运行时最小需要使用的CPU和内存资源以及最大能申请到的CPU和内存资源 |
拦截对外访问的地址范围 | 拦截对这些地址的outbound访问 |
不拦截对外访问的地址范围 | 不拦截对这部分地址的outbound访问 |
设置端口使入流量经过Sidecar代理 | 拦截对这些端口的inbound访问 |
设置端口使出流量经过Sidecar代理 | 拦截对这些端口的outbound访问 |
设置端口使入流量免于经过Sidecar代理 | 不拦截对这些端口的inbound访问 |
设置端口使出流量免于经过Sidecar代理 | 不拦截对这些端口的outbound访问 |
启用DNS代理功能 | 启用DNS代理功能后,sidecar将拦截DNS解析请求,如果sidecar本地有DNS结果缓存,则直接返回结果;否则sidecar会将DNS请求转发出去 |
外部访问策略 | 定义了sidecar访问外部服务的策略,有两个选项,配置为REGISTRY_ONLY时,sidecar只会访问网格内已注册的服务,拒绝访问外部服务;配置为ALLOW_ANY时,不管服务有没有注册到网格内,sidecar都可以访问。您可以通过将外部服务注册为ServiceEntry,在REGISTRY_ONLY模式下也可以访问到这些服务。 |
sidecar代理终止等待时长 | 服务下线之后由于服务注册信息同步延迟以及部分存量请求仍在处理中等因素影响,不能直接停止服务,sidecar作为中间的代理也不能立即停止服务,否则可能造成部分请求失败;该配置项定义了sidecar容器在收到退出信号后继续等待的时长,默认为5秒,您可以根据自己业务的需求调整该配置。 |
sidecar代理生命周期 | 支持以json形式配置sidecar代理的生命周期,主要包括两个配置能力: postStart:sidecar容器启动后执行的动作 preStop:sidecar代理容器停止前执行的动作 例如下面的配置定义了sidecar容器启动后会等待pilot agent启动;sidecar容器停止前会等待10秒 { "postStart": { "exec": { "command": [ "pilot-agent", "wait" ] } }, "preStop": { "exec": { "command": [ "/bin/sh", "-c", "sleep 10" ] } } } |
对于pod级的sidecar代理配置,CSM服务网格兼容istio自带的注解方式实现sidecar代理配置,注解说明如下表:
注解 | 说明 |
---|---|
proxy.istio.io/config | 覆盖sidecar代理配置 |
sidecar.istio.io/agentLogLevel | 指定pilot-agent的日志级别 |
sidecar.istio.io/controlPlaneAuthPolicy | 指定sidecar和控制面连接的认证方式,NONE表示无认证,MUTUAL_TLS表示采用双向TLS认证 |
sidecar.istio.io/discoveryAddress | 指定sidecar xDS连接地址 |
sidecar.istio.io/extraStatTags | 从sidecar遥测数据中额外提取的标签 |
sidecar.istio.io/inject | 是否注入sidecar |
sidecar.istio.io/interceptionMode | 定义sidecar拦截流量的模式,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内存限制 |
traffic.sidecar.istio.io/excludeInboundPorts | 不拦截入流量方向的端口 |
traffic.sidecar.istio.io/excludeOutboundPorts | 不拦截出流量方向的端口 |
traffic.sidecar.istio.io/includeOutboundIPRanges | 拦截出流量方向的ip段 |
traffic.sidecar.istio.io/excludeOutboundIPRanges | 不拦截出流量方向的ip段 |
traffic.sidecar.istio.io/includeInboundPorts | 拦截入流量方向的端口 |
traffic.sidecar.istio.io/includeOutboundPorts | 拦截出流量方向的端口 |