You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在AWS部署NGINX Ingress Controller后Pod异常问题求助

解决NGINX Ingress Controller CrashLoopBackOff:services "ingress-nginx" not found

我之前也碰到过一模一样的问题,咱们一步步拆解排查:

这个错误的核心原因很直接:你执行的patch命令是用来配置--publish-service参数的,它要求Ingress Controller关联ingress-nginx/ingress-nginx这个Service,但你的集群里根本不存在这个Service,导致Controller启动时直接报错退出。

第一步:先恢复正常状态

先把被patch改坏的Deployment回滚到之前的正常版本:

kubectl rollout undo deployment nginx-ingress-controller -n ingress-nginx

等个几十秒,你会看到Pod重新回到Running状态,Available计数也会恢复。

第二步:确认当前集群的Service情况

执行命令查看ingress-nginx命名空间下的所有Service:

kubectl get svc -n ingress-nginx

你大概率会发现没有名为ingress-nginx的Service,反而可能是类似nginx-ingress-controller的名称(这是旧版本Ingress Controller部署的默认Service名)。

第三步:根据实际情况修复

情况1:已经存在对应的Service,修正patch参数

假设你查到的Service名称是nginx-ingress-controller,直接用这个名称重新执行patch:

kubectl patch deployment -n ingress-nginx nginx-ingress-controller --type='json' --patch='[{"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "--publish-service=ingress-nginx/nginx-ingress-controller"}]'

情况2:没有对应的LoadBalancer Service,先创建再patch

首先创建适配AWS环境的LoadBalancer Service,保存为ingress-nginx-svc.yaml:

apiVersion: v1
kind: Service
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
  labels:
    app: nginx-ingress
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
    name: http
  - port: 443
    targetPort: 443
    protocol: TCP
    name: https
  selector:
    app: nginx-ingress # 这个要和你Ingress Controller Pod的标签匹配,可通过`kubectl get pods -n ingress-nginx --show-labels`确认

执行创建命令:

kubectl apply -f ingress-nginx-svc.yaml

等Service创建完成(AWS会分配ELB地址),再重新执行你最初的patch命令即可。

最后验证

检查Pod状态确认恢复正常:

kubectl get pods -n ingress-nginx

也可以查看Pod日志确认没有报错:

kubectl logs -n ingress-nginx <你的controller-pod名称>

内容的提问来源于stack exchange,提问作者SME

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:14:29