Docker Desktop Windows部署Ingress Nginx时apply YAML遇连接拒绝错误
问题重现
来自服务器的错误(InternalError):创建"ingress-srv.yaml"时出错:发生内部错误:调用webhook "validate.nginx.ingress.kubernetes.io"失败:调用webhook失败:Post "https://ingress-nginx-controller-admission.ingress-nginx.svc:443/networking/v1/ingresses?timeout=10s":dial tcp 10.97.138.229:443: connect: connection refused
在Windows版Docker Desktop上完成Ingress Nginx搭建后,执行kubectl apply -f ingress-srv.yaml时出现上述错误,yaml配置如下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-srv annotations: kubernetes.io/ingress.class: nginx spec: rules: - host: posts.com http: paths: - path: /posts pathType: Prefix backend: service: name: posts-srv port: number: 4000
解决方法
方法1:检查Ingress Nginx控制器状态
先确认Ingress Nginx的Pod是否正常运行:
kubectl get pods -n ingress-nginx
如果Pod处于Pending、CrashLoopBackOff状态,先排查Pod启动失败原因(比如资源不足、镜像拉取失败),等待Pod正常进入Running状态后再重新执行apply命令。
方法2:临时禁用Ingress Webhook验证
测试环境下可临时禁用webhook验证绕过问题:
修改ingress-srv.yaml,添加禁用验证的注解:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-srv annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/validate-webhook: "false" # 添加此行 spec: rules: - host: posts.com http: paths: - path: /posts pathType: Prefix backend: service: name: posts-srv port: number: 4000
修改后重新执行kubectl apply -f ingress-srv.yaml。
方法3:重新安装Ingress Nginx控制器
若控制器本身安装存在问题,可卸载后重新部署:
# 卸载现有Ingress Nginx组件 kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission helm uninstall ingress-nginx -n ingress-nginx # 重新安装官方Ingress Nginx helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx helm repo update helm install ingress-nginx ingress-nginx/ingress-nginx -n ingress-nginx --create-namespace
等待所有Pod启动完成后,再尝试应用Ingress配置。
方法4:检查Docker Desktop Kubernetes资源配置
确保Docker Desktop的Kubernetes已启用,且资源分配足够(建议CPU至少2核,内存至少2GB):
打开Docker Desktop设置 -> Kubernetes,确认"Enable Kubernetes"已勾选,调整资源分配后重启Docker Desktop。
内容的提问来源于stack exchange,提问作者Hjaij Houssem

