Sidecar代理用于增强服务调用之间的网络安全性、可靠性以及可观测性。ASM对Istio中的Sidecar代理配置进行了细化,提供了命名空间级别的配置能力,帮助您更好的管理Sidecar代理。本文介绍如何按照命名空间设置Sidecar代理的资源、生命周期、终止等待时长等。
背景信息
ASM按照命名空间设置的Sidecar代理功能的详细描述如下:
优先级关系
您可以使用Pod Annotation的方式、按照命名空间级别和全局设置Sidecar代理。这三种方式具有以下优先级关系:
使用Pod Annotation的方式>命名空间级别设置Sidecar代理配置>全局的Sidecar代理设置的优先级
设置注入的Istio代理资源
- 登录ASM控制台。
- 在左侧导航栏,选择。
- 在网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理。
- 在网格详情页面左侧导航栏选择。
- 在Sidecar代理配置页面单击命名空间页签。
- 选择配置的命名空间,单击注入的Istio代理资源设置左侧的图标,设置Istio资源参数,然后单击更新设置。
参数 |
描述 |
资源限制 |
Istio代理资源最大能申请到的CPU和内存,本文设置为CPU为2,内存为1025。 |
所需资源 |
Istio代理资源运行时最小使用的CPU和内存,本文设置为CPU为0.1,内存为128。 |
- 重启Pod,使Sidecar配置生效。
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏中,选择。
- 在容器组页签单击目标Pod右侧操作列下的删除。
- 在删除容器组对话框中单击确定。
稍等一段时间,容器重启后配置生效。
- 查看设置的Istio代理资源。
- 在容器组页签单击目标Pod名称。
- 在容器页签下单击istio-proxy左侧的图标。
可以看到Istio代理资源,与所设置的值相同,说明设置Istio代理资源成功。
设置istio-init初始化容器资源
- 登录ASM控制台。
- 在左侧导航栏,选择。
- 在网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理。
- 在网格详情页面左侧导航栏选择。
- 在Sidecar代理配置页面单击命名空间页签。
- 选择配置的命名空间,单击istio-init初始化容器资源限制左侧的图标,设置Istio资源参数,然后单击更新设置。
参数 |
描述 |
资源限制 |
Istio-init初始化容器资源最大能申请到的CPU和内存。本文设置COU为0.916 Core,内存为512 MiB。 |
所需资源 |
Istio-init初始化容器资源运行时最小使用的CPU和内存。本文设置COU为0.016 Core,内存为18 MiB。 |
- 重启Pod,使Sidecar配置生效。
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏中,选择。
- 在容器组页签单击目标Pod右侧操作列下的删除。
- 在删除容器组对话框中单击确定。
稍等一段时间,容器重启后配置生效。
- 执行以下命令,查看设置的istio-init初始化容器资源。
kubectl get pod -n <命名空间名称> <Pod名称> -o yaml
预期输出:
- name: DNS_AGENT
image: registry-vpc.cn-hangzhou.aliyuncs.com/acs/proxyv2:1.10.5
imagePullPolicy: IfNotPresent
name: istio-init
resources:
limits:
cpu: 916m
memory: 512Mi
requests:
cpu: 16m
memory: 18Mi
securityContext:
allowPrivilegeEscalation: false
按端口和地址来启用或禁用Sidecar代理
- 登录ASM控制台。
- 在左侧导航栏,选择。
- 在网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理。
- 在网格详情页面左侧导航栏选择。
- 在Sidecar代理配置页面单击命名空间页签。
- 选择配置的命名空间,单击按端口和地址来启用/禁用Sidecar代理左侧的图标,根据实际情况设置拦截对外访问的地址访问、不拦截对外访问的地址范围、设置端口使入口流量经过Sidecar代理、设置端口使出口流量经过Sidecar代理、设置端口使入口流量免于经过Sidecar代理、设置端口使出口流量免于经过Sidecar代理,然后单击更新设置。
本文设置拦截对外访问的地址访问为192.168.1.2/32,不拦截对外访问的地址范围192.168.1.1/32,设置端口使入口流量经过Sidecar代理为*,设置端口使出口流量免于经过Sidecar代理为7015,7016,设置端口使入口流量免于经过Sidecar代理为7015,7016,设置端口使出口流量免于经过Sidecar代理为7011,7012,
- 重启Pod,使Sidecar配置生效。
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏中,选择。
- 在容器组页签单击目标Pod右侧操作列下的删除。
- 在删除容器组对话框中单击确定。
稍等一段时间,容器重启后配置生效。
- 执行以下命令,查看容器启用或禁用Sidecar代理情况。
kubectl get pod -n <命名空间名称> <Pod名称> -o yaml
预期输出:
- "15001"
- -z
- "15006"
- -u
- "1337"
- -m
- REDIRECT
- -i
- 192.168.1.2/32
- -x
- 192.168.0.1/32,192.168.1.1/32
- -b
- '*'
- -d
- 15090,15021,15081,9191,7013,7014
- -o
- 7011,7012
设置Sidecar代理生命周期
- 登录ASM控制台。
- 在左侧导航栏,选择。
- 在网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理。
- 在网格详情页面左侧导航栏选择。
- 在Sidecar代理配置页面单击命名空间页签。
- 选择配置的命名空间,单击Sidecar代理生命周期左侧的图标,根据实际情况修改以下内容,然后复制到文本框中,然后单击更新设置。
{
"postStart": {
"exec": {
"command": [
"pilot-agent",
"wait"
]
}
},
"preStop": {
"exec": {
"command": [
"/bin/sh",
"-c",
"sleep 13"
]
}
}
}
- postStart参数下的command:设置启用Sidecar容器后的操作,本文设置为启用Sidecar容器后等待pilot-agent启动。
- preStop参数下的command:设置停止Sidecar容器前的操作,本文设置为停止Sidecar容器前休眠13秒。
- 重启Pod,使Sidecar配置生效。
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏中,选择。
- 在容器组页签单击目标Pod右侧操作列下的删除。
- 在删除容器组对话框中单击确定。
稍等一段时间,容器重启后配置生效。
- 执行以下命令,查看设置的Sidecar代理生命周期。
kubectl get pod -n <命名空间名称> <Pod名称> -o yaml
预期输出:
- name: TERMINATION_DRAIN_DURATION_SECONDS
value: "5"
image: registry-vpc.cn-hangzhou.aliyuncs.com/acs/proxyv2:1.10.5
imagePullPolicy: IfNotPresent
lifecycle:
postStart:
exec:
command:
- pilot-agent
- wait
preStop:
exec:
command:
- /bin/sh
- -c
- sleep 13
name: istio-proxy
设置Sidecar代理终止等待时长
- 登录ASM控制台。
- 在左侧导航栏,选择。
- 在网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理。
- 在网格详情页面左侧导航栏选择。
- 在Sidecar代理配置页面单击命名空间页签。
- 选择配置的命名空间,单击Sidecar代理终止等待时长左侧的图标,然后输入等待时长,本文设置Sidecar代理终止等待时长为10s,然后单击更新设置。
- 重启Pod,使Sidecar配置生效。
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏中,选择。
- 在容器组页签单击目标Pod右侧操作列下的删除。
- 在删除容器组对话框中单击确定。
稍等一段时间,容器重启后配置生效。
- 查看Sidecar代理终止等待时长。
- 在容器组页签单击目标Pod名称。
- 在容器页签下单击istio-proxy左侧的图标。
可以看到Sidecar代理终止等待时长,与所设置的值相同,说明设置Sidecar代理终止等待时长成功。
启用DNS代理功能
- 登录ASM控制台。
- 在左侧导航栏,选择。
- 在网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理。
- 在网格详情页面左侧导航栏选择。
- 在Sidecar代理配置页面单击命名空间页签。
- 选择配置的命名空间,单击启用DNS代理功能左侧的图标,选中启用DNS代理功能,然后单击更新设置。
- 重启Pod,使DNS配置生效。
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏中,选择。
- 在容器组页签单击目标Pod右侧操作列下的删除。
- 在删除容器组对话框中单击确定。
稍等一段时间,容器重启后配置生效。
- 执行以下命令,查看设置的DNS代理。
kubectl get pod -n <命名空间名称> <Pod名称> -o yaml
预期输出:
- name: TRUST_DOMAIN
value: cluster.local
- name: DNS_AGENT
- name: TERMINATION_DRAIN_DURATION_SECONDS
value: "10"
- name: ISTIO_META_DNS_AUTO_ALLOCATE
value: "true"
- name: ISTIO_META_DNS_CAPTURE
value: "true"
image: registry-vpc.cn-hangzhou.aliyuncs.com/acs/proxyv2:v1.10.5-33-gba0adb2df7-pro-aliyun
imagePullPolicy: IfNotPresent
--
--
- 7011,7012
- -q
- 7015,7016
env:
- name: DNS_AGENT
- name: ISTIO_META_DNS_AUTO_ALLOCATE
value: "true"
- name: ISTIO_META_DNS_CAPTURE
value: "true"
image: registry-vpc.cn-hangzhou.aliyuncs.com/acs/proxyv2:v1.10.5-33-gba0adb2df7-pro-aliyun