AKS升级至v1.22.6后Nginx-ingress-controller启动失败
环境信息
- Kubernetes版本:1.22.6
- 部署背景:此前通过Terraform调用官方Helm Chart部署ingress controller,对应Helm仓库地址为
https://kubernetes.github.io/ingress-nginx
故障现象
启动ingress controller时,ingress-nginx-admission-create Job持续抛出fatal级别错误,ingress controller无法正常启动,错误日志如下:
{ "err": "Get \"https://192.168.64.1:443/api/v1/namespaces/ingress-nginx/secrets/ingress-nginx-admission\": EOF", "level": "fatal", "msg": "error getting secret", "source": "k8s/k8s.go:232", "time": "2022-06-30T22:03:16Z" }
已尝试操作
已执行如下helm命令删除并重建ingress-controller,先后尝试指定4.1.1版本、使用最新版本安装,均未解决问题:
helm upgrade --install \ ingress-nginx ingress-nginx \ --repo https://kubernetes.github.io/ingress-nginx \ --namespace ingress-nginx \ --create-namespace \ --debug \ --version="4.1.1" # 也尝试过使用最新版本安装
排查与解决方案
错误核心是admission-create Job访问Kubernetes API Server时直接被断开连接返回EOF,按以下优先级排查:
- 先验证集群API Server连通性
找集群内任意运行中的正常Pod、或者集群节点执行测试命令:
如果命令同样返回EOF,按以下场景修复:curl -vk https://192.168.64.1:443/version- 检查控制节点kube-apiserver组件状态,确认组件正常运行、没有证书过期、进程崩溃、端口监听异常问题
- 检查节点本地防火墙、云服务器安全组、主机安全防护规则,确认没有拦截Pod/节点网段到API Server 443端口的TCP请求
- 如果API Server前置了四层负载均衡做高可用,检查负载均衡后端配置,确认所有控制节点的API Server端口健康检查正常,没有把流量转发到异常节点
- 核对集群kubeconfig中配置的API Server地址和端口,部分自建集群API Server默认监听6443端口,若配置为443且没有做对应的端口转发规则,会直接连接异常
- 清理旧版本残留资源
之前卸载不彻底残留的webhook、权限、Job资源会导致新部署的组件运行冲突,先执行全量清理:
清理完成后可以先临时关闭admissionWebhooks验证核心功能是否正常:# 删除ingress-nginx命名空间,若删除卡住可手动编辑资源移除finalizer kubectl delete namespace ingress-nginx # 清理集群维度的残留绑定、webhook、历史Job kubectl delete clusterrole,clusterrolebinding -l app.kubernetes.io/name=ingress-nginx kubectl delete mutatingwebhookconfiguration,validatingwebhookconfiguration -l app.kubernetes.io/name=ingress-nginx kubectl delete jobs -A -l app.kubernetes.io/name=ingress-nginx
如果关闭后ingress controller能正常启动,说明问题出在admission Job的运行逻辑上,后续可以手动生成admission证书挂载,或者检查Job绑定的ServiceAccount是否有secret的读写权限。helm upgrade --install \ ingress-nginx ingress-nginx \ --repo https://kubernetes.github.io/ingress-nginx \ --namespace ingress-nginx \ --create-namespace \ --set controller.admissionWebhooks.enabled=false - 核对版本兼容性
Kubernetes 1.22版本对应兼容的ingress-nginx Helm Chart版本为4.1.x分支,4.2及以上版本默认适配K8s 1.24+,存在API版本不兼容问题,不要使用最新版本安装。安装前可以拉取chart包到本地,检查templates/admission目录下的Job模板使用的API版本是否为batch/v1,如果是已废弃的batch/v1beta1版本会导致Job运行异常。
内容的提问来源于stack exchange,提问作者Karkala Srikanth
相关产品推荐
相关产品推荐

