如何通过Nginx Ingress暴露Kubernetes Dashboard?配置后访问报连接被拒绝
核心配置遗漏与修复方案
1. 命名空间不匹配
你创建的Ingress资源位于default命名空间,而kubernetes-dashboard服务部署在kubernetes-dashboard命名空间,Ingress默认仅会查找自身所在命名空间下的Service,因此无法识别目标服务。
2. 未指定IngressClass
你集群中存在2个独立的Ingress Nginx控制器(default命名空间下1个、ingress-nginx-2命名空间下1个),Ingress资源未配置ingressClassName字段,没有控制器认领该规则,这也是你执行kubectl get ingress时ADDRESS字段为空的直接原因。
3. 缺少HTTPS协议适配与端口监听
当前你的Ingress仅开放80端口监听,而Dashboard服务本身是HTTPS 443协议,需要添加特殊注解让Ingress控制器以HTTPS协议透传请求到后端,同时开启443端口监听。
4. 访问地址与Ingress暴露方式不匹配
你访问的10.11.12.13需要是Ingress控制器对外暴露的有效地址:
- 若Ingress控制器用NodePort方式暴露,需要访问节点IP + 对应30000-32767段的NodePort端口
- 若用LoadBalancer方式暴露,需要确认LoadBalancer分配的对外IP为
10.11.12.13
修正后的Ingress配置示例
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: dashboard namespace: kubernetes-dashboard # 与目标服务同命名空间 annotations: nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" # 告知控制器后端为HTTPS协议 spec: ingressClassName: "nginx" # 替换为实际IngressClass名称,可执行kubectl get ingressclass查询 defaultBackend: service: name: kubernetes-dashboard port: number: 443 tls: # 开启443端口监听,直接复用Dashboard自带的自签名证书 - secretName: kubernetes-dashboard-certs
生效验证步骤
- 应用配置后执行
kubectl get ingress -n kubernetes-dashboard,确认ADDRESS字段已显示控制器对外IP、PORTS列显示80, 443 - 执行
kubectl get svc -n <你的Ingress控制器所在命名空间>,确认控制器的Service类型为NodePort/LoadBalancer,记录HTTPS对应的访问端口 - 按
https://<节点IP/LoadBalancerIP>:<HTTPS端口>格式访问即可
内容的提问来源于stack exchange,提问作者AbreQueVoy
相关产品推荐
相关产品推荐

