树莓派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-dashboardspec.template.spec.containers[0]下添加挂载配置:
然后在volumeMounts: - name: auth-volume mountPath: /authspec.template.spec下添加卷配置:
最后在容器的volumes: - name: auth-volume secret: secretName: dashboard-authargs里添加认证参数:
保存退出后,Deployment会自动重启生效。args: - --auto-generate-certificates - --authentication-mode=basic - --basic-auth-file=/auth/auth
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 tcp192.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
相关产品推荐
相关产品推荐

