Kubernetes集群Istio边车注入场景下Deployment部署失败求助
问题根因定位
核心根因为CoreDNS服务异常,无法与Kubernetes API Server通信同步集群服务资源,导致集群内部DNS解析失效,进而触发Istio全链路异常,和你提供的所有现象完全匹配:
- CoreDNS无法拉取Service、Endpoint资源,所有集群内部域名(如
istiod.istio-system.svc)解析失败 - Istio的验证/注入webhook依赖istiod域名解析,kube-apiserver、kube-controller调用webhook超时,导致开启Istio注入的命名空间无法创建Pod
- Istio网关组件无法解析istiod域名,无法拉取配置和证书,因此READY状态显示为0/1
- 未开启Istio边车注入的命名空间不需要调用Istio webhook,因此部署完全正常
排查步骤
- 确认CoreDNS运行状态:执行
kubectl get pods -n kube-system -l k8s-app=kube-dns,查看CoreDNS Pod是否处于Running状态,重启次数是否存在异常 - 测试CoreDNS服务可用性:在集群任意节点执行
nslookup istiod.istio-system.svc 169.254.25.10,确认是否能解析到istiod对应的ClusterIP - 排查CoreDNS到kube-apiserver的网络连通性:进入CoreDNS Pod容器,执行
curl -k https://10.233.0.1:443/healthz,确认是否能正常访问apiserver - 确认kube-apiserver状态:如果是二进制部署执行
systemctl status kube-apiserver,如果是静态Pod部署执行kubectl get pods -n kube-system -l component=kube-apiserver,确认apiserver运行正常,无端口监听异常 - 检查集群网络插件状态:执行
kubectl get pods -n kube-system | grep -E 'calico|flannel',确认Calico/Flannel等网络组件无异常,跨Pod通信正常
解决方案
- 紧急恢复方案:如果需要优先恢复业务,可先删除Istio的webhook配置,临时关闭Istio校验和注入,执行后开启Istio注入的命名空间即可正常创建Pod:
kubectl delete validatingwebhookconfigurations istiod-istio-system kubectl delete mutatingwebhookconfigurations istio-sidecar-injector
后续CoreDNS恢复后重新应用Istio的webhook配置即可恢复Istio能力
- 修复CoreDNS异常:
- 先尝试重启所有CoreDNS Pod,验证是否为临时运行异常:
kubectl rollout restart deployment coredns -n kube-system - 若重启后仍存在apiserver连接报错,检查CoreDNS的RBAC权限:确认
system:corednsClusterRole绑定正常,拥有Service、Endpoint的list权限 - 若为网络插件断流导致的连通性异常,重启所有网络插件Pod后重新验证CoreDNS到apiserver的连通性
- 先尝试重启所有CoreDNS Pod,验证是否为临时运行异常:
- 验证恢复:CoreDNS恢复正常后,先测试集群内部域名解析正常,再重新应用Istio的webhook配置,重启Istio的网关和istiod组件,确认所有Istio Pod READY状态为1/1,最后验证应用部署功能恢复正常
内容的提问来源于stack exchange,提问作者Sachith Muhandiram
相关产品推荐
相关产品推荐

