Docker本地Kubernetes集群ingress-nginx配置异常请求挂起求助
问题排查与修复方案
首先可以确定的核心问题点为 ingress-nginx-controller 服务的EXTERNAL-IP处于pending状态,Docker Desktop环境下正常安装ingress-nginx后该字段应显示为localhost,这是请求无法进入集群的直接原因,可按以下步骤逐一排查修复:
- 步骤1:重装ingress-nginx修复LoadBalancer异常
先删除现有ingress-nginx相关资源,执行以下命令清理准入webhook:
再重新执行Docker Desktop对应版本的ingress-nginx安装命令,等待2分钟后执行kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admissionkubectl get services -n ingress-nginx,确认ingress-nginx-controller的EXTERNAL-IP变为localhost即可。 - 步骤2:修正Ingress配置规范
你当前使用的networking.k8s.io/v1版本Ingress已弃用kubernetes.io/ingress.class注解,推荐使用标准的ingressClassName字段,修正后的Ingress配置如下:apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-service annotations: nginx.ingress.kubernetes.io/use-regex: 'true' spec: ingressClassName: nginx rules: - host: ticketing.dev http: paths: - path: /api/users/?(.*) pathType: Prefix backend: service: name: auth-srv port: number: 3000 - 步骤3:验证业务服务连通性
跳过ingress链路直接验证Auth服务可用性,执行端口转发命令:
用Postman请求kubectl port-forward service/auth-srv 3000:3000127.0.0.1:3000对应的业务接口,确认可以正常返回则说明业务服务本身无异常。 - 步骤4:排查本地端口占用
如果重装后EXTERNAL-IP仍为pending,检查本地80、443端口是否被其他程序(如本地Nginx、Apache、虚拟机网络服务等)占用,关闭占用程序后重启Docker Desktop即可恢复。 - 临时验证方案
若需要快速验证链路可用性,可直接通过ingress-nginx的NodePort访问,你的环境中http NodePort为30036,请求地址改为http://ticketing.dev:30036/api/users/xxx即可正常访问。
内容的提问来源于stack exchange,提问作者Conor Ladrigan
相关产品推荐
相关产品推荐

