为集群中的业务容器注入Sidecar代理,可以增强服务调用之间的网络安全性、可靠性和可观测性。您可以根据实际业务需求,灵活配置Sidecar代理的资源、生命周期、流量拦截策略、可观测能力等参数。本文介绍如何配置Sidecar代理以及相关配置项说明。
Sidecar代理配置级别说明
不同的Sidecar代理配置级别代表不同的配置生效范围和生效优先级。Sidecar代理配置级别按照生效的优先级从低到高依次为:全局、命名空间、工作负载、Pod范围。
您可以根据实际业务需求,在不同的级别中对同一个Sidecar代理进行配置。ASM将根据每个Sidecar配置级别的优先级,决定在注入Sidecar代理时最终生效的配置参数。例如,在命名空间级别和全局级别对同一个Sidecar代理进行配置,命名空间级别配置在default命名空间。在default命名空间部署新的工作负载时,因为命名空间级别的优先级高于全局级别,注入的Sidecar代理将应用命名空间级别配置的参数。
Sidecar代理配置级别 | 说明 |
全局 | Sidecar代理配置将全局生效,您的任意Pod在注入Sidecar代理时都将应用该配置。 |
命名空间 | Sidecar代理配置将生效在指定命名空间。只有该命名空间内的Pod在注入Sidecar代理时才会应用配置。在配置此级别的Sidecar代理配置时,您需要选择一个命名空间。 |
工作负载 | Sidecar代理配置将生效在指定的工作负载。只有被指定的标签选择器选中的工作负载,在注入Sidecar代理时,才会应用该配置。在配置此级别的Sidecar代理配置时,您需要指定工作负载标签选择器,以指定哪些工作负载需要应用该配置。 |
Pod范围 | 该级别的Sidecar代理配置不支持通过ASM控制台进行配置。您可以通过在Pod中添加Annotation进行配置。具体操作,请参见通过Annotation方式配置Sidecar Proxy。 |
操作步骤
下文介绍如何配置不同级别的Sidecar代理。若您需要在工作负载中使新配置的Sidecar代理生效,请重新部署Pod。具体操作,请参见重新部署工作负载。
全局级别
登录ASM控制台,在左侧导航栏,选择。
在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择。
在Sidecar代理配置页面的全局页签,按需进行Sidecar配置,然后单击更新设置。
关于Sidecar代理的配置项说明,请参见Sidecar代理配置项说明。
查看Sidecar代理配置是否生效。
在左侧导航栏,选择。
在基本信息区域,查看网格的状态。
当状态为运行中时,表明全局级别的Sidecar代理配置生效。
命名空间级别
登录ASM控制台,在左侧导航栏,选择。
在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择。
在Sidecar代理配置页面,单击命名空间页签,选择配置生效的命名空间,单击目标Sidecar配置,选中目标配置项并进行相关配置,然后单击更新设置。
由于命名空间级别不是最低的Sidecar代理配置级别,所有Sidecar代理配置项将没有默认值(默认采用全局级别中的配置)。单击更新设置后,命名空间级别的Sidecar代理配置将立即生效。关于Sidecar代理的配置项说明,请参见Sidecar代理配置项说明。
工作负载级别
在同一个命名空间下,您可以创建多个工作负载级别的Sidecar代理配置,作用于不同的工作负载。
登录ASM控制台,在左侧导航栏,选择。
在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择。
在Sidecar代理配置页面,单击工作负载页签,然后单击创建。
在工作负载页签,选择配置生效的命名空间,配置工作负载级别Sidecar代理配置的名称,在匹配标签中创建匹配工作负载标签的标签选择器,单击目标Sidecar配置,选中目标配置项并进行相关配置,单击创建。
由于工作负载级别不是最低的Sidecar代理配置级别,所有Sidecar代理配置项将没有默认值(默认采用全局级别中的配置)。单击创建后,将立即创建出工作负载级别的Sidecar代理配置。关于Sidecar代理的配置项说明,请参见Sidecar代理配置项说明。
创建完成后,您也可以对Sidecar代理配置进行更新或删除操作。
由于已经部署的Pod配置无法更改,您对Sidecar代理进行的配置将无法立即生效。因此,在配置Sidecar代理后,您需要重新部署Pod。重新部署后,Pod中注入的Sidecar代理将生效新的配置。
登录容器服务管理控制台,在左侧导航栏单击集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。
在无状态页面,按需选择以下操作,重新部署工作负载。
场景 | 操作 |
单个工作负载 | 在操作列,单击目标工作负载对应的,然后在重新部署对话框,单击确定。 |
多个工作负载 | 在名称列,选中多个目标工作负载,在页面下方单击批量重新部署,然后在确认对话框,单击确定。 |
Sidecar代理配置项的起始版本支持说明
不同版本的ASM所支持的功能可能存在差异。通常情况下,新版本ASM的Sidecar代理相比老版本,具有更多的功能和参数配置。如果您无法找到某个Sidecar代理配置项,请参考下表确认是否需要升级ASM版本。关于升级ASM版本的具体操作,请参见升级ASM实例。
您可以在下表的配置项列,单击链接查看配置项的相关说明和配置示例。
说明 当您的ASM实例版本为1.22及以上,并且数据面Kubernetes集群版本为1.30及以上时,Sidecar代理将以原生Sidecar容器的方式部署。此时,Kubernetes集群将负责管理Sidecar代理容器的生命周期,设置生命周期管理类型的Sidecar代理配置将不起作用。
Sidecar代理配置项说明
您可以对Sidecar代理的资源占用、流量拦截策略、DNS代理、生命周期等方面进行配置。下文介绍Sidecar代理配置项的说明和配置示例。
注入的Istio代理资源设置
展开查看注入的Istio代理资源设置的说明和配置示例
配置项说明
该配置项用于配置Sidecar代理容器在运行时最小需要使用的CPU和内存资源、最大能够申请到的CPU和内存资源。
配置项 | 说明 |
资源限制 | Sidecar代理容器最大能申请到的CPU和内存资源。CPU资源的单位为核数(Core),内存资源的单位为MiB。 |
所需资源 | Sidecar代理容器运行时最小需要使用的CPU和内存资源。CPU资源的单位为核数(Core),内存资源的单位为MiB。 |
配置示例
在Sidecar代理配置页面,单击目标Sidecar代理配置级别页签,然后单击资源设置。
(可选)在资源设置区域,选中注入的Istio代理资源设置。
命名空间和工作负载页签需执行此步骤,全局页签可跳过此步骤。
配置资源限制的CPU为2 Core,内存为1025 MiB;配置所需资源的CPU为0.1 Core,内存为128 MiB,然后在页面下方,单击更新设置。
重新部署工作负载,使Sidecar代理配置生效。具体操作,请参见(可选)重新部署工作负载。
通过kubectl连接ACK集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。
执行以下命令,查看设置的Istio代理资源。
kubectl get pod -n <命名空间名称> <Pod名称> -o yaml
预期输出:
apiVersion: v1
kind: Pod
...
spec:
containers:
- args:
- proxy
...
name: istio-proxy
...
resources:
limits:
cpu: '2'
memory: 1025Mi
requests:
cpu: 100m
memory: 128Mi
...
istio-proxy
容器表示Sidecar代理容器。Pod中名称为istio-proxy
的resources字段已配置为目标资源值,表明注入的Istio代理资源设置配置生效。
istio-init初始化容器资源设置
展开查看istio-init初始化容器资源设置的说明和配置示例
配置项说明
该配置项用于配置注入Sidecar代理的Pod中的istio-init容器在运行时最小需要使用的CPU和内存资源、最大能够申请到的CPU和内存资源。istio-init容器是注入Sidecar代理的Pod在启动时执行的初始化容器,用于为Sidecar代理容器配置流量拦截路由规则等。
配置项 | 说明 |
资源限制 | istio-init容器最大能申请到的CPU和内存资源。CPU资源的单位为核数(Core),内存资源的单位为MiB。 |
所需资源 | istio-init容器运行时最小需要使用的CPU和内存资源。CPU资源的单位为核数(Core),内存资源的单位为MiB。 |
配置示例
在Sidecar代理配置页面,单击目标Sidecar代理配置级别页签,然后单击资源设置。
(可选)在资源设置区域,选中istio-init初始化容器资源设置。
命名空间和工作负载页签需执行此步骤,全局页签可跳过此步骤。
配置资源限制的CPU为1 Core,内存为512 MiB;配置所需资源的CPU为0.1 Core,内存为128 MiB,然后在页面下方,单击更新设置。
重新部署工作负载,使Sidecar代理配置生效。具体操作,请参见(可选)重新部署工作负载。
通过kubectl连接ACK集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。
执行以下命令,查看设置的istio-init初始化容器资源。
kubectl get pod -n <命名空间名称> <Pod名称> -o yaml
预期输出:
apiVersion: v1
kind: Pod
...
spec:
...
initContainers:
- args:
...
name: istio-init
resources:
limits:
cpu: '1'
memory: 512Mi
requests:
cpu: 100m
memory: 128Mi
...
Pod中名称为istio-init
的初始化容器的resources字段已配置为目标资源值,表明istio-init初始化容器资源设置配置生效。
为Sidecar设定ACK动态超卖资源
展开查看为Sidecar设定ACK动态超卖资源的说明和配置示例
配置项说明
该配置项用于设定分配给注入的Istio代理以及istio-init初始化容器的ACK动态超卖资源。关于动态超卖资源的更多信息,请参见动态资源超卖。
该配置项的配置方法与注入的Istio代理资源设置和istio-init初始化容器资源设置相同。配置后,当Pod带有ACK动态资源超卖labelkoordinator.sh/qosClass
时,将会为Pod中的Istio代理和istio-init初始化容器分配ACK动态超卖资源,不会分配Kubernetes常规的CPU及Memory资源。
说明 为Sidecar设定ACK动态超卖时,CPU资源的单位为千分之一核。
配置示例
在Sidecar代理配置页面,单击目标Sidecar代理配置级别页签,单击资源设置,选中为Sidecar设定ACK动态超卖资源,配置相关信息,然后在页面下方,单击更新设置。
配置项 | 配置子项 | 说明 |
注入的Istio代理资源设置(ACK动态超卖资源) | 资源限制 | 配置CPU为2000千分之一核,内存为2048 MiB。 |
所需资源 | 配置CPU为200 千分之一核,内存为256 MiB。 |
istio-init初始化容器资源(ACK动态超卖资源) | 资源限制 | 配置CPU为1000千分之一核,内存为1024 MiB。 |
所需资源 | 配置CPU为100 千分之一核,内存为128 MiB。 |
重新部署工作负载,使Sidecar代理配置生效。具体操作,请参见(可选)重新部署工作负载。
通过kubectl连接ACK集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。
执行以下命令,查看设置的istio-init初始化容器资源。
kubectl get pod -n <命名空间名称> <Pod名称> -o yaml
预期输出:
apiVersion: v1
kind: Pod
metadata:
...
labels:
koordinator.sh/qosClass: BE
spec:
containers:
- args:
...
name: istio-proxy
...
resources:
limits:
kubernetes.io/batch-cpu: 2k
kubernetes.io/batch-memory: 2Gi
requests:
kubernetes.io/batch-cpu: '200'
kubernetes.io/batch-memory: 256Mi
...
initContainers:
- args:
...
name: istio-init
resources:
limits:
kubernetes.io/batch-cpu: 1k
kubernetes.io/batch-memory: 1Gi
requests:
kubernetes.io/batch-cpu: '100'
kubernetes.io/batch-memory: 128Mi
...
Pod中对应的istio-proxy
容器(Istio代理容器)和istio-init
初始化容器都包含resources字段,且已配置为目标资源值,表明为Sidecar设定ACK动态超卖资源配置生效。
Istio-Proxy线程数
展开查看Istio-Proxy线程数的说明和配置示例
配置项说明
该配置项用于配置Sidecar代理容器运行的工作线程数量。您需要配置一个非负整数来表示Sidecar代理容器的线程数。当配置为0时,工作线程数量将根据为Sidecar代理配置的所需CPU资源或CPU资源限制进行自动选择(资源限制优先于所需资源)。
配置示例
在Sidecar代理配置页面,单击目标Sidecar代理配置级别页签,然后单击资源设置。
(可选)在资源设置区域,选中Istio-Proxy线程数。
命名空间和工作负载页签需执行此步骤,全局页签可跳过此步骤。
配置Istio-Proxy线程数为3,然后在页面下方,单击更新设置。
该配置表示Sidecar代理容器运行时将启动3条工作线程。
重新部署工作负载,使Sidecar代理配置生效。具体操作,请参见(可选)重新部署工作负载。
通过kubectl连接ACK集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。
执行以下命令,查看设置的Istio-Proxy线程数。
kubectl get pod -n <命名空间名称> <Pod名称> -o yaml
预期输出:
apiVersion: v1
kind: Pod
...
spec:
...
- args:
- proxy
- sidecar
- '--domain'
- $(POD_NAMESPACE).svc.cluster.local
- '--proxyLogLevel=warning'
- '--proxyComponentLogLevel=misc:error'
- '--log_output_level=default:info'
- '--concurrency'
- '3'
...
name: istio-proxy
...
istio-proxy
容器的concurrency参数被设定为3
,表明Istio-Proxy线程数配置生效。
拦截对外访问的地址范围
展开查看拦截对外访问的地址范围的说明和配置示例
配置项说明
您需要配置一个以英文半角逗号(,)分隔的IP地址范围列表。每个IP地址范围使用CIDR形式。当注入Sidecar代理的工作负载访问其它服务时,只有目的地IP地址在配置的地址范围中的请求会被Sidecar代理容器拦截,其它请求将不经过Sidecar代理直接发送到目的地。 此项默认配置为*,表示Sidecar代理容器将拦截工作负载所有的出站流量。
配置示例
在Sidecar代理配置页面,单击目标Sidecar代理配置级别页签,然后单击按端口或地址来启用/禁用Sidecar代理。
(可选)在按端口或地址来启用/禁用Sidecar代理区域,选中拦截对外访问的地址范围。
命名空间和工作负载页签需执行此步骤,全局页签可跳过此步骤。
配置拦截对外访问的地址范围为192.168.0.0/16,10.1.0.0/24,然后在页面下方,单击更新设置。
该配置表示Sidecar代理容器将拦截目的地IP地址在192.168.0.0/16和10.1.0.0/24两个CIDR内部的请求。
重新部署工作负载,使Sidecar代理配置生效。具体操作,请参见(可选)重新部署工作负载。
通过kubectl连接ACK集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。
执行以下命令,查看设置的拦截对外访问的地址范围。
kubectl get pod -n <命名空间名称> <Pod名称> -o yaml
预期输出:
apiVersion: v1
kind: Pod
...
spec:
...
initContainers:
- args:
- istio-iptables
- '-p'
- '15001'
- '-z'
- '15006'
- '-u'
- '1337'
- '-m'
- REDIRECT
- '-i'
- '192.168.0.0/16,10.1.0.0/24'
- '-x'
- 192.168.0.1/32
- '-b'
- '*'
- '-d'
- '15090,15021,15081,9191,15020'
- '--log_output_level=default:info'
...
name: istio-init
...
istio-init
容器的运行参数配置了-i 192.168.0.0/16,10.1.0.0/24
,表明拦截对外访问的地址范围配置生效。
不拦截对外访问的地址范围
展开查看不拦截对外访问的地址范围的说明和配置示例
配置项说明
您需要配置一个以半角英文逗号(,)分隔的IP地址范围列表。每个IP地址范围使用CIDR形式。当注入Sidecar代理的工作负载访问其它服务时,Sidecar代理容器将拦截出站流量。若请求目的地IP地址位于该项配置的CIDR中,请求不会被Sidecar代理容器拦截。
重要 当不拦截对外访问的地址范围中包含拦截对外访问的地址范围指定的地址时,请求此地址将不会被Sidecar代理拦截。更多信息,请参见拦截对外访问的地址范围。
配置示例
在Sidecar代理配置页面,单击目标Sidecar代理配置级别页签,然后单击按端口或地址来启用/禁用Sidecar代理。
(可选)在按端口或地址来启用/禁用Sidecar代理区域,选中不拦截对外访问的地址范围。
命名空间和工作负载页签需执行此步骤,全局页签可跳过此步骤。
配置不拦截对外访问的地址范围为10.1.0.0/24,然后在页面下方,单击更新设置。
该配置表示Sidecar代理容器将不会拦截目的地IP地址在CIDR 10.1.0.0/24内部的请求。
重新部署工作负载,使Sidecar代理配置生效。具体操作,请参见(可选)重新部署工作负载。
通过kubectl连接ACK集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。
执行以下命令,查看设置的不拦截对外访问的地址范围。
kubectl get pod -n <命名空间名称> <Pod名称> -o yaml
预期输出:
apiVersion: v1
kind: Pod
...
spec:
...
initContainers:
- args:
- istio-iptables
- '-p'
- '15001'
- '-z'
- '15006'
- '-u'
- '1337'
- '-m'
- REDIRECT
- '-i'
- '*'
- '-x'
- '192.168.0.1/32,10.1.0.0/24'
- '-b'
- '*'
- '-d'
- '15090,15021,15081,9191,15020'
- '--log_output_level=default:info'
...
name: istio-init
...
istio-init
容器的运行参数中设置了-x 192.168.0.1/32,10.1.0.0/24
。192.168.0.1/32
为默认设置的主机地址CIDR。10.1.0.0/24
与Sidecar代理配置中设定的IP地址范围一致,表明不拦截对外访问的地址范围配置生效。
设置端口使入口流量经过Sidecar代理
展开查看设置端口使入口流量经过Sidecar代理的说明和配置示例
配置项说明
您需要配置一个以英文半角逗号(,)分隔的端口号列表。在目标端口在列表中的流量会被Sidecar代理容器拦截。默认配置为*,表示Sidecar代理容器将拦截工作负载所有的入站流量。
配置示例
在Sidecar代理配置页面,单击目标Sidecar代理配置级别页签,然后单击按端口或地址来启用/禁用Sidecar代理。
(可选)在按端口或地址来启用/禁用Sidecar代理区域,选中设置端口使入口流量经过Sidecar代理。
命名空间和工作负载页签需执行此步骤,全局页签可跳过此步骤。
配置设置端口使入口流量经过Sidecar代理为80,443,然后单击更新设置。
该配置表示Sidecar代理容器将仅拦截发往本工作负载80端口和443端口的请求。
重新部署工作负载,使Sidecar代理配置生效。具体操作,请参见(可选)重新部署工作负载。
通过kubectl连接ACK集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。
执行以下命令,查看设置的入站流量拦截端口。
kubectl get pod -n <命名空间名称> <Pod名称> -o yaml
预期输出:
apiVersion: v1
kind: Pod
...
spec:
...
initContainers:
- args:
- istio-iptables
- '-p'
- '15001'
- '-z'
- '15006'
- '-u'
- '1337'
- '-m'
- REDIRECT
- '-i'
- '*'
- '-x'
- 192.168.0.1/32
- '-b'
- '80,443'
- '-d'
- '15090,15021,15081,9191,15020'
- '--log_output_level=default:info'
...
name: istio-init
...
istio-init
容器的运行参数中设置了-b 80,443
,与Sidecar代理配置中设定的入向端口一致,表明设置端口使入口流量经过Sidecar代理配置生效。
设置端口使出口流量经过Sidecar代理
展开查看设置端口使出口流量经过Sidecar代理的说明和配置示例
配置项说明
您需要配置一个以英文半角逗号(,)分隔的端口号列表,表示所有出站流量目的服务端口。在目的服务端口列表中的请求,都将被Sidecar代理容器拦截。
重要 如果该配置项与不拦截对外访问的地址范围或者设置端口使出口流量免于经过Sidecar代理同时配置,当请求目标IP地址位于不拦截的CIDR范围中,或者请求目标服务端口位于不拦截的端口列表中,即使目标端口位于该项的列表中,请求也不会被Sidecar代理拦截。更多信息,请参见不拦截对外访问的地址范围和设置端口使出口流量免于经过Sidecar代理。
配置示例
在Sidecar代理配置页面,单击目标Sidecar代理配置级别页签,然后单击按端口或地址来启用/禁用Sidecar代理。
(可选)在按端口或地址来启用/禁用Sidecar代理区域,选中设置端口使出口流量经过Sidecar代理。
命名空间和工作负载页签需执行此步骤,全局页签可跳过此步骤。
配置设置端口使出口流量经过Sidecar代理为80,443,然后在页面下方,单击更新设置。
该配置表示Sidecar代理容器将拦截发往80端口和443端口服务的请求。
重新部署工作负载,使Sidecar代理配置生效。具体操作,请参见(可选)重新部署工作负载。
通过kubectl连接ACK集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。
执行以下命令,查看设置的出站流量拦截端口。
kubectl get pod -n <命名空间名称> <Pod名称> -o yaml
预期输出:
apiVersion: v1
kind: Pod
...
spec:
...
initContainers:
- args:
- istio-iptables
- '-p'
- '15001'
- '-z'
- '15006'
- '-u'
- '1337'
- '-m'
- REDIRECT
- '-i'
- '*'
- '-x'
- 192.168.0.1/32
- '-b'
- '*'
- '-d'
- '15090,15021,15081,9191,15020'
- '--log_output_level=default:info'
- '-q'
- '80,443'
- '--log_output_level=default:info'
...
name: istio-init
...
istio-init
容器的运行参数中设置了-q 80,443
,与Sidecar代理配置中设定的出向端口一致,表明设置端口使出口流量经过Sidecar代理配置生效。
设置端口使入口流量免于经过Sidecar代理
展开查看设置端口使入口流量免于经过Sidecar代理的说明和配置示例
配置项说明
您需要配置一个以英文半角逗号(,)分隔的端口号列表。目标端口列表中的流量将不会被Sidecar代理容器拦截。
重要 此配置项仅在设置端口使入口流量经过Sidecar代理被配置为*的情况下生效,即Sidecar代理容器默认拦截所有入站流量。
配置示例
在Sidecar代理配置页面,单击目标Sidecar代理配置级别页签,然后单击按端口或地址来启用/禁用Sidecar代理。
(可选)在按端口或地址来启用/禁用Sidecar代理区域,选中设置端口使入口流量免于经过Sidecar代理。
命名空间和工作负载页签需执行此步骤,全局页签可跳过此步骤。
配置设置端口使入口流量免于经过Sidecar代理为8000,然后在页面下方,单击更新设置。
该配置表示Sidecar代理容器将不再拦截发往本工作负载8000端口的请求。
重新部署工作负载,使Sidecar代理配置生效。具体操作,请参见(可选)重新部署工作负载。
通过kubectl连接ACK集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。
执行以下命令,查看设置的入站流量免拦截端口。
kubectl get pod -n <命名空间名称> <Pod名称> -o yaml
预期输出:
apiVersion: v1
kind: Pod
...
spec:
...
initContainers:
- args:
- istio-iptables
- '-p'
- '15001'
- '-z'
- '15006'
- '-u'
- '1337'
- '-m'
- REDIRECT
- '-i'
- '*'
- '-x'
- 192.168.0.1/32
- '-b'
- '*'
- '-d'
- '15090,15021,15081,9191,15020,8000'
- '--log_output_level=default:info'
...
name: istio-init
...
istio-init
容器的运行参数中设置了-d 15090,15021,15081,9191,8000
。15090,15021,15081,9191
端口是Sidecar代理的应用端口,默认位于不拦截范围之内。8000
端口与Sidecar代理配置中设定的入向端口一致,表明设置端口使入口流量免于经过Sidecar代理配置生效。
设置端口使出口流量免于经过Sidecar代理
展开查看设置端口使出口流量免于经过Sidecar代理的说明和配置示例
配置项说明
您需要配置一个以英文半角逗号(,)分隔的端口号列表,表示所有出站流量目的服务端口。在服务端口列表中的请求都不会被Sidecar代理容器拦截。您无需考虑目的服务的IP地址是否在拦截对外访问的地址范围内、目的服务的端口是否在拦截对外访问的端口列表内。
配置示例
在Sidecar代理配置页面,单击目标Sidecar代理配置级别页签,然后单击按端口或地址来启用/禁用Sidecar代理。
(可选)在按端口或地址来启用/禁用Sidecar代理区域,选中设置端口使出口流量免于经过Sidecar代理。
命名空间和工作负载页签需执行此步骤,全局页签可跳过此步骤。
配置设置端口使出口流量免于经过Sidecar代理为8000,然后在页面下方,单击更新配置。
该配置表示Sidecar代理容器将不再拦截发往8000端口服务的请求。
重新部署工作负载,使Sidecar代理配置生效。具体操作,请参见(可选)重新部署工作负载。
通过kubectl连接ACK集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。
执行以下命令,查看设置的出站流量不拦截端口。
kubectl get pod -n <命名空间名称> <Pod名称> -o yaml
预期输出:
apiVersion: v1
kind: Pod
...
spec:
...
initContainers:
- args:
- istio-iptables
- '-p'
- '15001'
- '-z'
- '15006'
- '-u'
- '1337'
- '-m'
- REDIRECT
- '-i'
- '*'
- '-x'
- 192.168.0.1/32
- '-b'
- '*'
- '-d'
- '15090,15021,15081,9191,15020'
- '--log_output_level=default:info'
- '-o'
- '8000'
...
name: istio-init
...
istio-init
容器的运行参数中设置了-o 8000
,与Sidecar代理配置中设定的出向端口一致,表明设置端口使出口流量免于经过Sidecar代理配置生效。
启用DNS代理功能
展开查看启用DNS代理功能的说明和配置示例
配置项说明
您可以选择为Sidecar代理容器启用或关闭DNS代理功能。启用DNS代理功能后,Sidecar代理容器将拦截工作负载的DNS请求,以提高服务网格的性能和可用性。来自工作负载的所有请求将被重定向至Sidecar代理容器。由于Sidecar代理容器在本地存储IP地址到本地域名的映射,Sidecar代理容器将可以直接返回DNS响应给工作负载,避免再向远端的DNS服务发送请求。若DNS请求无法被Sidecar代理容器处理,Sidecar将会直接转发DNS请求。更多信息,请参见在ASM中使用DNS代理。
重要 由于网络权限问题,在ACK Serverless集群或ECI Pod的ACK集群中,不支持为Sidecar代理容器启用DNS代理功能。
配置示例
在Sidecar代理配置页面,单击目标Sidecar代理配置级别页签,然后单击DNS代理功能。
(可选)在DNS代理功能区域,选中启用DNS代理功能,并打开右侧开关,然后单击更新设置。
命名空间和工作负载页签需执行此步骤,全局页签可跳过此步骤。打开开关表示为Sidecar代理启用DNS代理功能。
重新部署工作负载,使Sidecar代理配置生效。具体操作,请参见(可选)重新部署工作负载。
通过kubectl连接ACK集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。
执行以下命令,查看设置的DNS代理功能。
kubectl get pod -n <命名空间名称> <Pod名称> -o yaml
预期输出:
apiVersion: v1
kind: Pod
spec:
containers:
- args:
- proxy
- sidecar
- '--domain'
- $(POD_NAMESPACE).svc.cluster.local
- '--proxyLogLevel=warning'
- '--proxyComponentLogLevel=misc:error'
- '--log_output_level=default:info'
- '--concurrency'
- '3'
env:
...
- name: ISTIO_META_DNS_AUTO_ALLOCATE
value: 'true'
- name: ISTIO_META_DNS_CAPTURE
value: 'true'
...
name: istio-proxy
istio-proxy
容器的ISTIO_META_DNS_AUTO_ALLOCATE
环境变量和ISTIO_META_DNS_CAPTURE
环境变量被设置为true
,表明DNS代理功能配置生效。
Sidecar代理环境变量管理
展开查看Sidecar代理环境变量管理的说明和配置示例
配置项说明
此配置项用于配置在Sidecar代理容器中额外添加的环境变量。您可以对以下两种Sidecar代理环境变量进行配置。
配置项 | 说明 |
Sidecar优雅终止(EXIT_ON_ZERO_ACTIVE_CONNECTIONS) | 开启此项后,会对应在Sidecar代理容器的环境变量中添加环境变量EXIT_ON_ZERO_ACTIVE_CONNECTIONS: "true" 。该环境变量的作用如下: 在Sidecar代理容器停止时,默认情况下,容器中的pilot-agent进程将停止Envoy代理对入向流量的监听,并等待一段时间(这段时间由配置项Sidecar代理终止等待时长决定),最后停止Envoy代理进程。 设置EXIT_ON_ZERO_ACTIVE_CONNECTIONS后,在Sidecar代理容器停止时,容器中的pilot-agent进程将首先停止Envoy代理对入向流量的监听,并等待默认的5s。等待完成后开始轮询Envoy代理的活跃连接数状态,直到活跃连接数变为0后再停止Envoy代理进程。设置EXIT_ON_ZERO_ACTIVE_CONNECTIONS 能够在常见情况下改善Sidecar代理容器的终止生命周期流程,在尽可能缩短终止时间的同时减少终止时被丢弃的请求。 |
配置示例
在Sidecar代理配置页面,单击目标Sidecar代理配置级别页签,然后单击Sidecar代理环境变量管理。
(可选)在Sidecar代理环境变量管理区域,选中Sidecar优雅终止(EXIT_ON_ZERO_ACTIVE_CONNECTIONS)。
命名空间和工作负载页签需执行此步骤,全局页签可跳过此步骤。
打开Sidecar优雅终止(EXIT_ON_ZERO_ACTIVE_CONNECTIONS)右侧的开关,然后单击更新配置。
重新部署工作负载,使Sidecar代理配置生效。具体操作,请参见(可选)重新部署工作负载。
通过kubectl连接ACK集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。
执行以下命令,查看设置的Sidecar代理的环境变量。
kubectl get pod -n <命名空间名称> <Pod名称> -o yaml
预期输出:
apiVersion: v1
kind: Pod
...
spec:
containers:
- args:
...
env:
- name: EXIT_ON_ZERO_ACTIVE_CONNECTIONS
value: 'true'
name: istio-proxy
...
Pod中istio-proxy
容器的Sidecar配置环境变量中,新增EXIT_ON_ZERO_ACTIVE_CONNECTIONS
环境变量,表明Sidecar代理环境变量管理配置生效。
Sidecar优雅启动(HoldApplicationUntilProxyStarts)
展开查看HoldApplicationUntilProxyStarts的说明和配置示例
配置项说明
HoldApplicationUntilProxyStarts是一项针对Sidecar代理生命周期的管理配置项。HoldApplicationUntilProxyStarts默认为开启,表示对于注入Sidecar代理的Pod,在启动时需要先保证Sidecar代理容器启动成功,然后才能启动Pod中的业务容器,以确保发往业务容器的流量不会因Sidecar代理未启动完成而丢失。
若该项配置为关闭,表示Pod中的Sidecar代理容器及业务容器会同时启动。在集群中大量部署Pod时,Sidecar代理容器可能因为APIServer压力较大而出现启动较慢的情况。您可以关闭HoldApplicationUntilProxyStarts配置项来提升部署速度。
配置示例
下文以在全局页签关闭HoldApplicationUntilProxyStarts为例。
在Sidecar代理配置页面,单击全局页签,然后单击生命周期管理。
关闭Sidecar优雅启动(HoldApplicationUntilProxyStarts)右侧的开关,然后单击更新设置。
该配置表示不启用HoldApplicationUntilProxyStarts能力。
重新部署工作负载,使Sidecar代理配置生效。具体操作,请参见(可选)重新部署工作负载。
通过kubectl连接ACK集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。
执行以下命令,查看设置的HoldApplicationUntilProxyStarts功能。
kubectl get pod -n <命名空间名称> <Pod名称> -o yaml
预期输出:
apiVersion: v1
kind: Pod
...
spec:
containers:
- command:
...
name: sleep
...
env:
- name: PROXY_CONFIG
value: >-
{..."holdApplicationUntilProxyStarts":false,...}
...
name: istio-proxy
...
holdApplicationUntilProxyStarts功能关闭后,istio-proxy
容器不再强制声明于业务容器之前,也不再声明默认的lilfecycle字段。此时,服务网格已经不再强制确保Sidecar代理容器启动成功后才启动业务容器。
Sidecar代理终止等待时长
展开查看Sidecar代理终止等待时长的说明和配置示例
配置项说明
Sidecar代理终止等待时长是一项针对Sidecar代理生命周期的管理配置项。为Pod注入Sidecar代理后,业务Pod的流量将被Sidecar代理容器拦截。
当Pod开始停止时,对应的Service不再转发流量给Pod。Sidecar代理容器在收到退出信号后会等待一段时间,在这段时间内,不再接受新的入站流量,继续处理存量的入站流量(出站流量不受影响,可以正常发起),这段时间被称为Sidecar代理终止等待时长。Sidecar代理容器的终止等待时长默认为5s,支持配置以s为单位的秒数,例如10s。
如果被停止的服务提供的接口调用的耗时较长,超过了Sidecar代理容器的终止等待时长,已有的入站连接和出站连接即使没有处理完成也会被终止,造成某些请求的丢失。此时,您可以利用此配置项延长Sidecar代理终止等待时长,完成入站和出站流量的处理。
Sidecar代理终止等待时长需要配置为以s为单位的秒数,例如10s。
配置示例
在Sidecar代理配置页面,单击目标Sidecar代理配置级别页签,然后单击生命周期管理。
(可选)在生命周期管理区域,选中Sidecar代理终止等待时长。
命名空间和工作负载页签需执行此步骤,全局页签可跳过此步骤。
配置Sidecar代理终止等待时长为10s,然后单击更新设置。
该配置表示Sidecar代理将在终止时等待10s来处理存量连接。
重新部署工作负载,使Sidecar代理配置生效。具体操作,请参见(可选)重新部署工作负载。
通过kubectl连接ACK集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。
执行以下命令,查看设置的Sidecar代理终止等待时长。
kubectl get pod -n <命名空间名称> <Pod名称> -o yaml
预期输出:
apiVersion: v1
kind: Pod
...
spec:
containers:
- args:
...
env:
- name: TERMINATION_DRAIN_DURATION_SECONDS
value: '10'
...
- name: PROXY_CONFIG
value: >-
{..."terminationDrainDuration":"10s"}
...
name: istio-proxy
...
Pod中的istio-proxy
容器配置了值为10
的TERMINATION_DRAIN_DURATION_SECONDS
环境变量,并在PROXY_CONFIG
环境变量中记录了terminationDrainDuration
为10s
,表明Sidecar代理终止等待时长配置生效。
Sidecar代理生命周期
展开查看Sidecar代理生命周期的说明和配置示例
配置项说明
Sidecar代理生命周期支持完全定制Sidecar代理容器的容器声明周期回调。在此配置项中,您需要填写以JSON格式声明的容器生命周期回调字段(lifecycle),该字段会替换Sidecar代理容器默认配置的容器生命周期回调字段。更多信息,请参见容器生命周期回调。
配置示例
在Sidecar代理配置页面,单击目标Sidecar代理配置级别页签,然后单击生命周期管理。
(可选)在生命周期管理区域,选中Sidecar代理生命周期。
命名空间和工作负载页签需执行此步骤,全局页签可跳过此步骤。
在Sidecar代理生命周期下方,配置以下YAML,然后单击更新设置。
该YAML配置了postStart和preStop回调参数。
{
"postStart": {
"exec": {
"command": [
"pilot-agent",
"wait"
]
}
},
"preStop": {
"exec": {
"command": [
"/bin/sh",
"-c",
"sleep 13"
]
}
}
}
重新部署工作负载,使Sidecar代理配置生效。具体操作,请参见(可选)重新部署工作负载。
通过kubectl连接ACK集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。
执行以下命令,查看设置的Sidecar代理生命周期。
kubectl get pod -n <命名空间名称> <Pod名称> -o yaml
预期输出:
apiVersion: v1
kind: Pod
...
spec:
containers:
- args:
...
...
lifecycle:
postStart:
exec:
command:
- pilot-agent
- wait
preStop:
exec:
command:
- /bin/sh
- -c
- sleep 13
name: istio-proxy
...
Pod中istio-proxy
容器的容器生命周期回调字段(lifecycle)已被修改为目标配置,表明Sidecar代理生命周期配置生效。
外部服务访问策略
展开查看外部服务访问策略的说明和配置示例
配置项说明
该配置项用于设置Sidecar代理容器对于外部服务的访问策略。外部服务表示未被服务网格注册的网格外服务。默认情况下,被服务网格管理的Kubernetes集群中的服务都属于被注册的服务。您可以通过声明服务条目(ServiceEntry)资源,手动为服务网格注册服务,不在此列服务之内都属于外部服务。
该配置项支持以下两种策略:
说明 此配置项为全局配置,您只能在全局级别设置此项。若需要在命名空间或工作负载级别设置外部服务访问策略,您可以登录ASM控制台,在页面进行配置。
配置示例
在Sidecar代理配置页面的全局页签,单击外部服务访问策略,在对外部服务的访问策略OutboundTrafficPolicy右侧单击REGISTRY_ONLY,然后单击更新设置。
该配置表示限制网格中的服务访问外部服务。
重新部署工作负载,使Sidecar代理配置生效。具体操作,请参见(可选)重新部署工作负载。
通过kubectl连接ACK集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。
使用以下内容,创建sleep.yaml。
apiVersion: v1
kind: ServiceAccount
metadata:
name: sleep
---
apiVersion: v1
kind: Service
metadata:
name: sleep
labels:
app: sleep
service: sleep
spec:
ports:
- port: 80
name: http
selector:
app: sleep
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: sleep
spec:
replicas: 1
selector:
matchLabels:
app: sleep
template:
metadata:
labels:
app: sleep
spec:
terminationGracePeriodSeconds: 0
serviceAccountName: sleep
containers:
- name: sleep
image: curlimages/curl
command: ["/bin/sleep", "3650d"]
imagePullPolicy: IfNotPresent
volumeMounts:
- mountPath: /etc/sleep/tls
name: secret-volume
volumes:
- name: secret-volume
secret:
secretName: sleep-secret
optional: true
---
执行以下命令,部署sleep应用。
kubectl apply -f sleep.yaml -n default
执行以下命令,通过sleep应用访问外部服务。
kubectl exec -it {sleep Pod名称} -c sleep -- curl www.aliyun.com -v
预期输出:
* Trying *********...
* Connected to www.aliyun.com (********) port 80 (#0)
> GET / HTTP/1.1
> Host: www.aliyun.com
> User-Agent: curl/7.87.0-DEV
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 502 Bad Gateway
< date: Mon,********* 03:25:00 GMT
< server: envoy
< content-length: 0
<
* Connection #0 to host www.aliyun.com left intact
返回502
响应,表明注入了Sidecar代理的Sleep应用无法访问外部服务www.aliyun.com
,外部服务访问策略配置生效。
Sidecar入站流量拦截策略
展开查看Sidecar入站流量拦截策略的说明和配置示例
配置项说明
该配置项用于设置Sidecar代理对于入站流量的拦截策略。在默认情况下,Sidecar代理容器使用iptables重定向策略对发往应用程序工作负载的入站流量进行拦截,在重定向拦截入站流量后,应用程序将只能看到Sidecar代理容器的IP作为请求的源IP,无法看到真正的客户端原始IP。
通过将入站流量拦截策略改为透明代理策略(TPROXY),服务网格将允许Sidecar代理容器使用Iptables的透明代理模式对入站流量进行拦截。配置该项后,应用程序可以看到客户端原始IP。更多信息,请参见在服务网格环境下如何保持服务访问时的客户端源IP。
重要 透明代理策略不支持操作系统为Cent OS的节点,当您的pod所在节点系统为Cent OS时,请使用重定向策略。
配置示例
在Sidecar代理配置页面,单击目标Sidecar代理配置级别页签,然后单击Sidecar入站流量拦截策略。
(可选)在Sidecar入站流量拦截策略区域,选中Sidecar入站流量拦截策略。
命名空间和工作负载页签需执行此步骤,全局页签可跳过此步骤。
在Sidecar入站流量拦截策略右侧,单击透明代理策略,然后单击更新设置。
重新部署工作负载,使Sidecar代理配置生效。具体操作,请参见(可选)重新部署工作负载。
通过kubectl连接ACK集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。
执行以下命令,查看设置的Sidecar入站流量拦截策略。
kubectl get pod -n <命名空间名称> <Pod名称> -o yaml
预期输出:
apiVersion: v1
kind: Pod
...
spec:
containers:
- args:
...
- name: PROXY_CONFIG
value: >-
{..."interceptionMode":"TPROXY",...}
- name: ISTIO_META_POD_PORTS
value: |-
[
]
...
name: istio-proxy
...
initContainers:
- args:
- istio-iptables
- '-p'
- '15001'
- '-z'
- '15006'
- '-u'
- '1337'
- '-m'
- TPROXY
...
name: istio-init
...
Pod中istio-proxy
容器的Sidecar配置环境变量中记录了"interceptionMode":"TPROXY"
的信息,同时istio-init
容器在初始化时也相应使用TPROXY参数运行初始化指令,表明Sidecar入站流量拦截策略配置生效。
日志级别
展开查看日志级别的说明和配置示例
配置项说明
该配置项用于设置Sidecar代理容器的日志级别。Sidecar代理默认拥有info的日志级别。您可以将Sidecar代理的日志级别修改为info、debug、trace、warning、error、critical、off七种级别的任意一种,以在Sidecar代理中获取更多或更少的日志信息。
配置示例
在Sidecar代理配置页面,单击目标Sidecar代理配置级别页签,然后单击监控统计。
(可选)在监控统计区域,选中日志级别。
命名空间和工作负载页签需执行此步骤,全局页签可跳过此步骤。
在日志级别右侧,选择error,然后单击更新设置。
该配置表示Sidecar代理将以error级别进行日志输出,只有级别为error或以上的日志会被输出。
重新部署工作负载,使Sidecar代理配置生效。具体操作,请参见(可选)重新部署工作负载。
通过kubectl连接ACK集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。
执行以下命令,查看设置的Sidecar代理日志级别。
kubectl get pod -n <命名空间名称> <Pod名称> -o yaml
预期输出:
apiVersion: v1
kind: Pod
...
spec:
containers:
- args:
- proxy
- sidecar
- '--domain'
- $(POD_NAMESPACE).svc.cluster.local
- '--proxyLogLevel=error'
...
name: istio-proxy
...
istio-proxy
容器的运行参数被设定为--proxyLogLevel=error
,表明日志级别配置生效。
proxyStatsMatcher
展开查看proxyStatsMatcher的说明和配置示例
配置项说明
该配置项用于定义Sidecar代理上报的自定义Envoy统计指标信息。Envoy是Sidecar代理的技术实现,可以统计并上报一系列的指标信息,但服务网格默认仅开启其中一部分指标的统计与暴露,以减少对Sidecar代理的性能损耗。您可以在此配置项中,通过前缀匹配、后缀匹配、或者正则匹配的方法,指定匹配Sidecar代理需要额外统计上报的指标信息。
配置示例
在Sidecar代理配置页面,单击目标Sidecar代理配置级别页签,然后单击监控统计。
在监控统计区域,选中proxyStatsMatcher,然后选中正则匹配,配置为.*outlier_detection.*。
该配置表示为Sidecar代理加入熔断指标的统计。
重新部署工作负载,使Sidecar代理配置生效。具体操作,请参见(可选)重新部署工作负载。
通过kubectl连接ACK集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。
执行以下命令,查看设置的Sidecar代理自定义统计指标信息。
kubectl get pod -n <命名空间名称> <Pod名称> -o yaml
预期输出:
apiVersion: v1
kind: Pod
...
spec:
containers:
- args:
...
- name: PROXY_CONFIG
value: >-
{..."proxyStatsMatcher":{"inclusionRegexps":[".*outlier_detection.*"]},...}
...
Pod中istio-proxy
容器的Sidecar配置环境变量中已更新自定义统计指标信息,表明proxyStatsMatcher配置生效。
Envoy运行时参数
展开查看Envoy运行时参数的说明和配置示例
配置项说明
此配置项用于配置Sidecar代理容器中Envoy进程的运行时参数。您可以配置以下的运行时参数。
配置示例
在Sidecar代理配置页面,单击目标Sidecar代理配置级别页签,然后单击Sidecar代理环境变量管理。
(可选)在Envoy运行时参数区域,在下游连接数限制右侧的输入框内,输出5000,然后单击更新配置。
重新部署工作负载,使Sidecar代理配置生效。具体操作,请参见(可选)重新部署工作负载。
通过kubectl连接ACK集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。
执行以下命令,查看设置的Sidecar代理的环境变量。
kubectl get pod -n <命名空间名称> <Pod名称> -o yaml
预期输出:
apiVersion: v1
kind: Pod
...
spec:
containers:
- args:
...
env:
- name: PROXY_CONFIG
value: >-
{"concurrency":2,"configPath":"/etc/istio/proxy","discoveryAddress":"istiod-1-22-6.istio-system.svc:15012","holdApplicationUntilProxyStarts":true,"interceptionMode":"REDIRECT","proxyMetadata":{"BOOTSTRAP_XDS_AGENT":"false","DNS_AGENT":"","EXIT_ON_ZERO_ACTIVE_CONNECTIONS":"true"},"runtimeValues":{"overload.global_downstream_max_connections":"5000"},"terminationDrainDuration":"5s","tracing":{"zipkin":{"address":"zipkin.istio-system:9411"}}}
name: istio-proxy
...
Pod中istio-proxy
容器的Sidecar配置PROXY_CONFIG环境变量中,新增"runtimeValues":{"overload.global_downstream_max_connections":"5000"}
字段,表明Envoy运行时参数配置生效。