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

K8s Nginx Ingress控制器启动失败问题排查求助

排查Ingress控制器部署失败及CrashLoopBackOff问题

咱们一步步拆解你的问题,逐个解决:

首先得明确:普通的nginx:1.13.12镜像并不是Kubernetes Ingress控制器专用镜像——这是你第一个Pod启动失败的核心原因,这个镜像里只有基础Nginx服务,完全没有Ingress控制器需要的/nginx-ingress-controller执行文件,启动自然会报错。

接下来针对你换镜像后遇到的CrashLoopBackOff、权限问题和inClusterConfig警告,咱们逐个击破:

1. 替换为正确的Ingress控制器镜像

Kubernetes主流的Ingress控制器镜像有两种选择,别再用普通Nginx镜像了:

  • 官方Nginx Ingress控制器:k8s.gcr.io/ingress-nginx/controller:v1.8.1(如果国内拉取困难,可改用国内镜像源:registry.cn-hangzhou.aliyuncs.com/google_containers/ingress-nginx-controller:v1.8.1)
  • NGINX官方维护的控制器:nginxinc/nginx-ingress-controller:3.3.0

把你的Deployment镜像替换为上述专用镜像,这是解决问题的基础。

2. 解决权限不足问题

Ingress控制器需要访问Kubernetes API和系统资源,权限不够直接导致启动失败:

  • 检查Deployment的securityContext配置,确保运行用户正确:
    securityContext:
      runAsUser: 101  # 这是Ingress控制器默认使用的UID,对应容器内的nginx用户
      allowPrivilegeEscalation: true
    
  • 配置必要的RBAC权限:Ingress控制器需要读取Ingress、Service、Endpoints等资源,你得创建对应的ClusterRole和ClusterRoleBinding,并绑定到控制器的ServiceAccount:
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: ingress-nginx
    rules:
    - apiGroups: [""]
      resources: ["services", "endpoints", "pods"]
      verbs: ["get", "list", "watch"]
    - apiGroups: ["networking.k8s.io"]
      resources: ["ingresses"]
      verbs: ["get", "list", "watch"]
    - apiGroups: ["networking.k8s.io"]
      resources: ["ingresses/status"]
      verbs: ["update"]
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: ingress-nginx
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: ingress-nginx
    subjects:
    - kind: ServiceAccount
      name: ingress-nginx
      namespace: default  # 替换为你的Ingress控制器所在命名空间
    
    同时记得在Deployment里指定serviceAccountName: ingress-nginx(要先提前创建这个ServiceAccount)。

3. 消除inClusterConfig警告

这个警告本质是控制器无法通过集群内API访问Kubernetes配置,核心还是RBAC或ServiceAccount配置问题:

  • 确认控制器的ServiceAccount已经绑定了足够的ClusterRole权限;
  • 可以进入Pod测试API访问:先安装curl(apt update && apt install curl -y),然后执行curl https://kubernetes.default.svc,如果返回403,说明权限仍然不足,需要检查RBAC配置。

4. 验证Ingress资源配置

最后确保你的Ingress资源符合Kubernetes v1版本规范,这里给你适配两个服务的示例配置:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: gearbox-rack-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$1  # 路径重写规则,适配服务路径
    nginx.ingress.kubernetes.io/ssl-redirect: "false"  # 暂时关闭HTTPS重定向,方便测试
spec:
  ingressClassName: nginx  # 要和你的Ingress控制器class一致,默认是nginx
  rules:
  - http:
      paths:
      - path: /eureka/(.*)
        pathType: Prefix
        backend:
          service:
            name: gearbox-rack-eureka-server-nodeport
            port:
              number: 8761
      - path: /config/(.*)
        pathType: Prefix
        backend:
          service:
            name: gearbox-rack-config-server-nodeport
            port:
              number: 8888

实用排查命令

如果还是有问题,用这些命令收集关键信息:

  • 查看Pod详细日志:kubectl logs <ingress-controller-pod-name> -n <namespace>
  • 查看Pod启动事件:kubectl describe pod <ingress-controller-pod-name> -n <namespace>
  • 检查Ingress资源状态:kubectl describe ingress gearbox-rack-ingress

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:49:58