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

MicroK8s集群Kubernetes Dashboard外部Ingress访问报错:Client sent an HTTP request to an HTTPS Server

MicroK8s集群Kubernetes Dashboard外部Ingress访问报错:Client sent an HTTP request to an HTTPS Server

嘿,我看了你在MicroK8s里配置Kubernetes Dashboard外部访问的问题——你已经启用了dashboard,内部访问正常,也配置了Ingress和Cloudflare域名,但碰到了“Client sent an HTTP request to an HTTPS Server”的报错,对吧?我帮你理清楚问题根源,再给你一步步的解决办法。

首先先对齐下你的现状:

  • 你的MicroK8s v1.28.14集群里,kube-system命名空间的dashboard pod和service都正常,内部用curl -k https://10.152.183.43能通
  • 你配置的Ingress指向了dashboard的443端口,Ingress状态显示地址是127.0.0.1,Ingress Class是public
  • Cloudflare那边设置了HTTPS重定向和灵活TLS模式

问题到底出在哪?

这个报错的核心是Ingress控制器和Dashboard Service之间的协议不匹配:

  • Kubernetes Dashboard的Service本身跑的是443端口,是HTTPS服务
  • 但你当前的Ingress配置里,控制器默认会用HTTP协议去转发请求到后端的443端口,相当于用HTTP去访问HTTPS服务,直接就触发了这个报错
  • 另外你的Ingress地址显示是127.0.0.1,这说明Ingress控制器还没绑定到集群的外部IP,外部请求根本打不进来,这也是个要解决的点

一步步解决问题

1. 先修正Ingress的协议匹配问题

给你的Ingress加上关键注解,告诉控制器用HTTPS去和后端Dashboard通信,修改后的Ingress YAML如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: kubernetes-dashboard
  namespace: kube-system
  annotations:
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"  # 核心:指定后端用HTTPS协议
    nginx.ingress.kubernetes.io/ssl-redirect: "false"       # 配合Cloudflare的重定向,避免重复跳转
    nginx.ingress.kubernetes.io/ssl-verify-client: "false"  # 跳过证书验证(测试环境可用,生产建议配置信任证书)
spec:
  rules:
  - host: cluster.my-domain.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: kubernetes-dashboard
            port:
              number: 443

我给你解释下这些注解的作用:

  • backend-protocol: "HTTPS":强制Ingress控制器用HTTPS请求后端的Dashboard Service,直接解决协议不匹配的报错
  • ssl-redirect: "false":因为你已经在Cloudflare开了HTTPS重定向,这里关掉Ingress自身的重定向,避免出现多次跳转的问题
  • ssl-verify-client: "false":因为Dashboard用的是MicroK8s默认生成的自签名证书,Ingress控制器可能会验证失败,加这个注解跳过验证(测试环境用没问题,生产环境建议替换成可信证书)

2. 修复Ingress地址为127.0.0.1的问题

你的Ingress地址显示127.0.0.1,说明Ingress控制器没绑定到集群的外部IP,咱们这么处理:

  • 先确认MicroK8s的Ingress addon是正常启用的:microk8s status 看ingress模块是不是enabled状态
  • 如果状态正常但地址还是127.0.0.1,就重启Ingress控制器的Pod:先执行kubectl get pods -n ingress找到控制器的Pod名称,然后用kubectl delete pod -n ingress <你的Pod名称>删掉,它会自动重建,重建后再看Ingress地址应该就变成集群的外部IP了
  • 要是还是不行,检查下Ingress Class的配置,确保public类的Ingress控制器是绑定了外部网卡的

3. 配合Cloudflare的灵活TLS设置

因为你用了Cloudflare的灵活TLS(客户端到Cloudflare是HTTPS,Cloudflare到你的集群是HTTP),还要注意:

  • 保持Cloudflare的“SSL/TLS”设置为“灵活”模式
  • 不用在Ingress里配置额外的TLS证书,因为Cloudflare已经和客户端完成了HTTPS握手,集群内部的通信由Ingress和Dashboard的HTTPS处理就行

最后验证

等你把这些配置都改完,执行kubectl apply -f <你的Ingress文件路径>应用配置,等个1-2分钟,然后用kubectl describe ingress kubernetes-dashboard -n kube-system查看Ingress状态,确认Address变成了集群的外部IP,然后就可以用https://cluster.my-domain.com访问Dashboard了。

备注:内容来源于stack exchange,提问作者petwri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 15:38:08