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

树莓派K8s集群部署Dashboard:NodePort/ngrok/LoadBalancer哪种最安全?需登录界面

树莓派Kubernetes集群部署Dashboard的安全实践(局域网专属+登录界面)

嘿,我来帮你捋清楚在树莓派K8s集群上部署Dashboard的安全方案,结合你要局域网开放、支持用户名密码登录(而非纯令牌)的需求,咱们一步步拆解:

先排除不适合的方案

  • ngrok:这玩意儿是用来把本地服务穿透到公网的,你只需要局域网内访问,用它反而会把Dashboard暴露给全网,平白增加安全风险,直接pass。
  • LoadBalancer:树莓派这类自建集群一般没有云厂商提供的LoadBalancer服务,虽然可以用MetalLB模拟,但部署和维护成本高,对于局域网场景来说完全没必要,也排除。

最优方案:安全配置后的NodePort

你原本考虑的NodePort其实是最适合局域网场景的,只要做好安全加固,完全满足需求。下面是具体的配置步骤:

1. 部署官方Dashboard(基础安全版)

Dashboard默认启用HTTPS(用自签证书),先部署官方推荐的版本:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml

(如果不想用外链,也可以把这个yaml下载到本地,检查内容后再apply)

2. 配置用户名密码登录界面

默认Dashboard只支持令牌或kubeconfig登录,要启用用户名密码登录,咱们需要做这几步:

  • 生成密码哈希文件:用htpasswd工具创建存储用户名和密码的文件(如果没装,先跑sudo apt install apache2-utils)
    htpasswd -c auth your-username
    # 输入你想设置的密码,记得用强密码(大小写+数字+特殊字符)
    
  • 创建存储认证信息的Secret:
    kubectl create secret generic dashboard-auth --from-file=auth -n kubernetes-dashboard
    
  • 修改Dashboard的Deployment,挂载这个Secret并启用Basic Auth:
    编辑Deployment:
    kubectl edit deployment kubernetes-dashboard -n kubernetes-dashboard
    
    在spec.template.spec.containers[0]下添加挂载配置:
    volumeMounts:
    - name: auth-volume
      mountPath: /auth
    
    然后在spec.template.spec下添加卷配置:
    volumes:
    - name: auth-volume
      secret:
        secretName: dashboard-auth
    
    最后在容器的args里添加认证参数:
    args:
    - --auto-generate-certificates
    - --authentication-mode=basic
    - --basic-auth-file=/auth/auth
    
    保存退出后,Deployment会自动重启生效。

3. 安全暴露NodePort

把Dashboard的Service改成NodePort类型,让局域网能访问:

kubectl expose deployment kubernetes-dashboard --type=NodePort --port=443 --name=dashboard-nodeport -n kubernetes-dashboard

查看暴露的端口:

kubectl get service dashboard-nodeport -n kubernetes-dashboard

比如得到端口是30443,那么局域网内用户就可以通过https://<树莓派节点IP>:30443访问Dashboard,此时会看到用户名密码的登录界面。

4. 关键安全加固

  • 限制端口访问范围:给树莓派配置防火墙(比如ufw),只允许局域网IP段访问这个NodePort:
    sudo ufw allow from 192.168.1.0/24 to any port 30443 proto tcp
    
    把192.168.1.0/24换成你的局域网网段。
  • 配置RBAC权限:不要给Dashboard默认的高权限,创建一个受限的用户角色,比如只读权限:
    创建dashboard-rbac.yaml文件:
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: dashboard-limited-user
      namespace: kubernetes-dashboard
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: dashboard-limited-user
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: view # 只读,需要编辑权限可以换成edit
    subjects:
    - kind: ServiceAccount
      name: dashboard-limited-user
      namespace: kubernetes-dashboard
    
    应用配置:
    kubectl apply -f dashboard-rbac.yaml
    
    这样用户登录后只能查看集群资源,避免误操作。
  • 定期更新Dashboard:及时升级到最新版本,修复已知安全漏洞。

总结

对于你的局域网开放+登录界面需求,安全配置后的NodePort是最实用、最安全的选择。通过启用Basic Auth实现用户名密码登录,结合防火墙访问限制和RBAC权限管控,既能满足用户访问需求,又能把安全风险降到最低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:58:33