sidecar注入失败可能的原因
sidecar注入失败常见场景和解决方案:
- 可能原因:网格管理实例数到达上限,无法继续注入。
检查方法:统计网格注入Pod总数是否已达上限。
登录应用服务网格ASM控制台,在网格列表页面查看您的网格卡片展示的实例个数是否达到网格规格。如果达到即网格注入Pod总数已达上限。
解决方案:联系运维工程师或提交工单处理。
- 可能原因:控制面组件istiod异常。
检查方法:请检查istio-system命名空间下的istiod组件是否异常。
登录云容器引擎CCE控制台,依次单击您的集群名称-工作负载,选择istio-system命名空间,查看istiod-1-18-7-r4组件工作负载状态列是否是运行中,如果不是运行中则可能是组件异常了。
组件中的1-18-7-r4即网格的版本。网格版本号可从网格详情页面的“网格配置-基本信息”中获取,即“当前版本”的值。此处展示的版本号是中划线连接。
解决方案:若异常可以联系运维工程师或提交工单处理。
- 可能原因:命名空间未打上自动注入标签。
检查方法:执行以下命令,查看需要的webhook的 namespaceSelector条件。
kubectl get mutatingwebhookconfiguration istio-sidecar-injector-1-18-7-r4 -o yaml | grep "rev.namespace.sidecar-injector.istio.io" -A20 | grep "namespaceSelector:" -A7
请将上述命令中的1-18-7-r4按当前格式(中划线连接)替换成您的网格的版本。网格版本号可从网格详情页面的“网格配置-基本信息”中获取,即“当前版本”的值。
例如上图查询结果表示需要有一个istio.io/rev=1-18-7-r4的标签同时不能有istio-injection的标签。
执行以下命令,确认目标命名空间是否包含在 webhook范围内。
kubectl get {namespace} --show-labels
解决办法:命名空间添加上面查出来的注入标签。
- 可能原因:为集群开放命名空间注入的默认策略未设置为enable。
检查方法:执行以下命令检查默认策略,确认policy的值为enabled 。
kubectl -n istio-system get configmap istio-sidecar-injector-1-18-7-r4 -o jsonpath='{.data.config}' | grep policy:
请将上述命令中的1-18-7-r4按当前格式(中划线连接)替换成您的网格的版本。网格版本号可从网格详情页面获取,即“当前版本”的值。
解决办法:参考如何为集群开放命名空间注入?进行处理。
- 可能原因:存在sidecar.istio.io/inject: 'false'标签。
检查方法:检查工作负载标签。
登录云容器引擎CCE控制台,依次单击您的集群名称-工作负载,选择对应命名空间,单击您的工作负载操作列的“更多-查看YAML”。找到spec.template.metadata.labels字段,确认不能存在sidecar.istio.io/inject: 'false'标签。
请将上述命令中的1-18-7-r4按当前格式(中划线连接)替换成您的网格的版本。网格版本号可从网格详情页面获取,即“当前版本”的值。
解决办法:如果存在请删除sidecar.istio.io/inject: 'false'标签。参考某些工作负载不注入Sidecar,该如何配置?
- 可能原因:Pod不能创建。
解决方案:执行以下命令,查看events事件报错,根据events事件报错信息进一步处理。
kubectl describe -n {namespace} {deployment name}
- 可能原因:确保Pod 不在 kube-system 或 kube-public 命名空间中。
kube-system 以及 kube-public 命名空间中的 Pod 将忽略 Sidecar 自动注入。
- 可能原因:确保Pod 定义中没有 hostNetwork:true。
hostNetwork:true 的 Pod 将忽略 Sidecar 自动注入。