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

Minikube中Nginx Ingress Controller部署异常求助

解决Minikube中Nginx Ingress Controller启动失败及localhost访问问题

1. 修复Ingress Controller启动错误

日志中的missing POD_NAME or POD_NAMESPACE environment variable是核心问题——Ingress Controller必须依赖这两个环境变量获取自身Pod的元数据信息。需在Deployment的容器配置中添加环境变量注入逻辑:

修改你的nginx-ingress-controller.yaml中Deployment的容器部分,新增env字段:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-ingress-controller
  namespace: kube-system
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx-ingress-controller
  template:
    metadata:
      labels:
        app: nginx-ingress-controller
    spec:
      containers:
        - name: nginx-ingress-controller
          image: k8s.gcr.io/ingress-nginx/controller:v1.0.0
          args:
            - /nginx-ingress-controller
            - --publish-service=kube-system/nginx-ingress-controller
            - --election-id=ingress-controller-leader
            - --ingress-class=nginx
            - --http-port=1234  # Listen on port 1234
          # 新增环境变量注入
          env:
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: POD_NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
          resources:
            requests:
              cpu: "100m"
              memory: "128Mi"
            limits:
              cpu: "200m"
              memory: "256Mi"
          ports:
            - name: http
              containerPort: 1234
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-ingress-controller
  namespace: kube-system
spec:
  ports:
    - name: http
      port: 1234
      targetPort: 1234
  selector:
    app: nginx-ingress-controller

应用修改后的配置:

kubectl apply -f nginx-ingress-controller.yaml

等待Pod启动完成,验证状态:

kubectl get pods -n kube-system -l app=nginx-ingress-controller

2. 处理Minikube Ingress插件冲突(可选)

你已执行minikube addons enable ingress,该命令会自动在ingress-nginx命名空间部署一套Nginx Ingress Controller。同时运行两套控制器会引发资源冲突,建议二选一:

  • 保留Minikube自带控制器:删除自定义部署的控制器,使用默认80端口,后续通过端口转发映射到1234。
  • 保留自定义控制器:先禁用Minikube自带Ingress插件:
    minikube addons disable ingress
    

3. 实现localhost:1234访问React应用

Minikube运行在独立虚拟机中,无法直接通过localhost访问集群内服务,需通过端口转发将Ingress Controller的Service端口映射到本地:

执行以下命令持续转发端口:

kubectl port-forward service/nginx-ingress-controller -n kube-system 1234:1234

此时访问http://localhost:1234,Ingress会根据配置规则将请求转发至bezier命名空间下的homepageService(端口1234),请确保该Service及后端Pod正常运行并能正确代理你的React应用。

4. 验证Ingress配置有效性

确认Ingress规则已生效:

kubectl get ingress homepage -n bezier

检查后端Service及Pod状态:

kubectl get service homepage -n bezier
kubectl get pods -n bezier -l app.kubernetes.io/name=homepage

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 11:05:31