Kubernetes Dashboard经Nginx+Traefik访问未跳转登录页问题求助
问题排查与配置调整方案
核心问题原因
当前配置存在三个核心错误导致无法正常跳转登录页:
- 端口映射不匹配:Traefik IngressRoute配置的service端口与Kubernetes Dashboard实际暴露端口不符
- 多层SSL冲突:Nginx、Traefik、Dashboard三层都在处理HTTPS请求,证书不匹配导致请求中断
- Dashboard默认策略限制:Dashboard默认强制HTTPS访问,未开启HTTP模式下的登录入口
具体调整步骤
1. 修改Kubernetes Dashboard启动配置
新增启动参数开启HTTP访问模式,无需Dashboard自身加载证书:
spec: volumes: # 可删除kubernetes-dashboard-certs卷配置,不需要再加载证书 - name: tmp-volume emptyDir: {} containers: - name: kubernetes-dashboard image: 'kubernetesui/dashboard:v2.3.1' args: - '--namespace=kube-system' - '--metrics-provider=none' # 新增以下两个参数 - '--insecure-bind-address=0.0.0.0' - '--enable-insecure-login' ports: # 仅保留HTTP端口即可 - name: http containerPort: 5443 protocol: TCP
修改后重新apply该Deployment配置即可生效。
2. 调整Traefik IngressRoute配置
删除Traefik侧TLS配置,直接走HTTP协议转发到Dashboard的HTTP端口:
apiVersion: traefik.containo.us/v1alpha1 kind: IngressRoute metadata: name: kubernetes-dashboard-route namespace: kube-system spec: entryPoints: # 使用Traefik的HTTP入口,对应你实际链路中的8000端口 - web # 删除整个tls字段,不需要Traefik处理证书 routes: - kind: Rule match: Host(`kubernetes.poemhub.top`) services: - name: kubernetes-dashboard # 端口改为Dashboard Service对应5443容器端口的端口,若Service直接暴露5443则直接填5443即可,原配置的9090为错误配置 port: 5443
3. 修改Nginx反向代理配置
仅在Nginx侧做SSL卸载,后端请求走HTTP协议到Traefik:
server { listen 443 ssl; server_name kubernetes.poemhub.top; ssl_certificate /etc/letsencrypt/live/poemhub/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/poemhub/privkey.pem; # 新增X-Forwarded-Proto头,告知后端链路外层为HTTPS协议 proxy_set_header X-Forwarded-Proto https; location / { client_max_body_size 1m; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_read_timeout 3600; # 改为http协议,端口改为Traefik的HTTP入口8000 proxy_pass http://127.0.0.1:8000; } }
修改后执行nginx -s reload重载配置即可。
验证
所有配置更新完成后,重新访问https://kubernetes.poemhub.top即可正常打开登录页面。
内容的提问来源于stack exchange,提问作者Dolphin
相关产品推荐
相关产品推荐

