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

使用Nginx Ingress暴露Kubernetes Dashboard失败求助

问题:通过Nginx Ingress暴露Minikube中的Kubernetes Dashboard失败

环境信息

  • 本地Minikube环境,使用podman作为VM驱动,容器运行时为Docker
  • Kubernetes Dashboard版本:v2.6.1,通过官方yaml完成资源初始化

已完成操作

  1. Dashboard相关资源已正常创建,执行kubectl get all -n kubernetes-dashboard输出如下:
NAME                                            READY   STATUS    RESTARTS      AGE
pod/dashboard-metrics-scraper-8c47d4b5d-7dptt   1/1     Running   1 (78m ago)   9h
pod/kubernetes-dashboard-6c75475678-4c9n2       1/1     Running   0             9h

NAME                                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
service/dashboard-metrics-scraper   ClusterIP   10.105.70.143    <none>        8000/TCP        14h
service/kubernetes-dashboard        NodePort    10.111.136.242   <none>        443:32361/TCP   14h

NAME                                        READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/dashboard-metrics-scraper   1/1     1            1           9h
deployment.apps/kubernetes-dashboard        1/1     1            1           9h

NAME                                                  DESIRED   CURRENT   READY   AGE
replicaset.apps/dashboard-metrics-scraper-8c47d4b5d   1         1         1       9h
replicaset.apps/kubernetes-dashboard-6c75475678       1         1         1       9h
  1. 将service/kubernetes-dashboard类型从ClusterIP修改为NodePort
  2. 创建Ingress资源,yaml配置如下:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: dashboard-ingress
  namespace: kubernetes-dashboard
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: test.ml
    http:
      paths:
      - path: /
        pathType: Exact
        backend:
          service:
            name: kubernetes-dashboard
            port:
              number: 443
  1. 在本地/etc/hosts添加解析:192.168.49.2 test.ml

当前状态

  • Ingress资源已创建,执行kubectl get ingress -n kubernetes-dashboard输出:
NAME                CLASS    HOSTS     ADDRESS        PORTS   AGE
dashboard-ingress   <none>   test.ml   192.168.49.2   80      14h
  • 无论通过IP地址192.168.49.2还是hostnametest.ml访问,均无法打开Kubernetes Dashboard

解决方案

问题分析

  1. 协议不兼容:Kubernetes Dashboard服务监听443端口(HTTPS),但当前Ingress用HTTP(80端口)转发,协议不匹配导致访问失败。
  2. 路径规则错误:Exact类型的/仅严格匹配根路径,Dashboard的前端资源会请求子路径(如/static/、/api/),这些请求会被Ingress拒绝。
  3. Ingress Class未正确关联:Minikube中Nginx Ingress需要明确指定ingressClassName,仅靠旧annotation可能无法生效(部分版本中kubernetes.io/ingress.class已废弃)。

修复步骤

1. 更新Ingress配置

替换原Ingress yaml为以下内容:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: dashboard-ingress
  namespace: kubernetes-dashboard
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"  # 告知Ingress后端使用HTTPS
    nginx.ingress.kubernetes.io/ssl-redirect: "false"       # 禁用HTTP转HTTPS(避免证书问题)
spec:
  ingressClassName: nginx  # 明确绑定Nginx Ingress类
  rules:
  - host: test.ml
    http:
      paths:
      - path: /
        pathType: Prefix  # 匹配所有以/开头的子路径
        backend:
          service:
            name: kubernetes-dashboard
            port:
              number: 443

2. 应用配置并验证

# 应用更新后的Ingress
kubectl apply -f updated-ingress.yaml -n kubernetes-dashboard

# 确认Ingress Class已正确设置
kubectl get ingress -n kubernetes-dashboard

3. 测试访问

在浏览器中访问http://test.ml,浏览器会提示证书不安全(Dashboard使用自签名证书),手动信任即可进入页面。

额外排查点

  • 确认Minikube的Nginx Ingress插件已启用:
    minikube addons list | grep ingress
    
    未启用则执行:minikube addons enable ingress
  • 检查Nginx Ingress Controller Pod状态:
    kubectl get pods -n ingress-nginx
    
  • 查看Ingress Controller日志排查转发错误:
    kubectl logs -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 01:55:20