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

通过RKE部署K8S集群后无法外部访问Kubernetes Dashboard

解决Kubernetes Dashboard无法通过API Server Proxy外部访问的问题

你这种场景我遇到过好几次——用Rancher RKE在AWS EC2(CentOS7 + Docker 17.03.2-ce)搭好K8S集群,Dashboard服务明明正常跑着,但就是没法通过API Server的proxy地址从外部访问。别着急,咱们一步步排查解决:

1. 先把AWS安全组这个最容易踩的坑排除掉

AWS的安全组是外部访问EC2的第一道关卡,先确认控制平面节点(也就是API Server所在的EC2实例)的安全组规则:

  • 检查是否允许你的公网IP(或者测试环境临时放开0.0.0.0/0)访问6443端口(TCP)
  • 如果没加这个规则,赶紧加上——很多时候问题就出在这!

2. 先在节点本地验证API Server Proxy是否正常

先排除外部网络的干扰,登录到API Server所在的EC2节点,执行这条命令测试本地访问:

curl -k https://127.0.0.1:6443/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
  • 如果返回一堆HTML代码,说明API Server的proxy功能本身是好的,问题出在外部网络或者节点防火墙;
  • 如果返回错误,咱们继续往下查。

3. 检查CentOS 7的防火墙规则

CentOS7默认开着firewalld,很可能把6443端口拦了:

  • 先看看当前的防火墙规则:
firewall-cmd --list-all
  • 如果没看到6443端口的允许规则,添加并重启防火墙:
firewall-cmd --add-port=6443/tcp --permanent
firewall-cmd --reload
  • 测试环境图省事的话,也可以临时关掉firewalld:
systemctl stop firewalld
systemctl disable firewalld

4. 验证Dashboard的RBAC权限配置

有时候权限不足也会导致访问异常(哪怕服务看起来正常):

  • 先看看Dashboard的ServiceAccount和ClusterRoleBinding是否存在:
kubectl get serviceaccount kubernetes-dashboard -n kube-system
kubectl get clusterrolebinding kubernetes-dashboard -n kube-system
  • 如果ClusterRoleBinding缺失,直接创建一个高权限的绑定(官方推荐的配置):
    新建一个dashboard-rbac.yaml文件,内容如下:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: kubernetes-dashboard
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: kubernetes-dashboard
  namespace: kube-system

然后应用这个配置:

kubectl apply -f dashboard-rbac.yaml

5. 检查API Server的启动参数

RKE部署的API Server有时候可能缺了proxy相关的参数,咱们确认下:

  • 查看API Server Pod的启动参数:
kubectl describe pod kube-apiserver-$(hostname) -n kube-system
  • 找一找有没有--enable-aggregator-routing=true这个参数——这是允许通过API Server proxy访问服务的必要配置;
  • 如果没有,修改你的RKEcluster.yml配置文件,在services.kube-api部分添加额外参数:
services:
  kube-api:
    extra_args:
      enable-aggregator-routing: "true"

然后重新运行rke up更新集群。

6. 实在不行?换个访问方式:用NodePort暴露Dashboard

如果上面的方法都没解决,咱们绕开API Server proxy,直接用NodePort暴露Dashboard:

  • 修改Dashboard服务的类型为NodePort:
kubectl patch service kubernetes-dashboard -n kube-system -p '{"spec":{"type":"NodePort"}}'
  • 查看分配的NodePort端口:
kubectl get service kubernetes-dashboard -n kube-system

你会看到类似443:30123/TCP的输出,30123就是分配的NodePort;

  • 最后在AWS安全组中放行这个NodePort(TCP),然后访问https://<EC2节点公网IP>:30123就能打开Dashboard了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:01:18