Kubernetes Dashboard v2.7.0 部署实战:3步完成Ingress暴露与Token认证

Kubernetes Dashboard v2.7.0 部署实战:3步完成Ingress暴露与Token认证
Kubernetes Dashboard v2.7.0 安全部署与外部访问实战指南1. 部署准备与环境检查在开始部署 Kubernetes Dashboard 之前需要确保您的集群环境满足以下要求Kubernetes 集群版本不低于 1.16kubectl 命令行工具已正确配置并可以访问集群已安装 Ingress Controller如 Nginx Ingress具备集群管理员权限的 kubeconfig 文件验证集群状态命令kubectl cluster-info kubectl get nodes如果您的集群尚未安装 Ingress Controller可以使用以下命令快速部署 Nginx Ingresskubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/cloud/deploy.yaml2. Dashboard 核心组件部署我们将使用官方推荐的 YAML 文件部署 Dashboard v2.7.0 版本kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml这个部署会创建以下资源名为kubernetes-dashboard的命名空间Dashboard 前端和后端 Pod相关 ServiceAccount、Role 和 RoleBindingMetrics Scraper 组件验证部署状态kubectl get pods -n kubernetes-dashboard -w等待所有 Pod 状态变为Running后可以检查服务状态kubectl get svc -n kubernetes-dashboard3. 安全配置与外部访问3.1 创建管理员 ServiceAccount为了安全访问 Dashboard我们需要创建一个具有适当权限的 ServiceAccount# dashboard-admin.yaml apiVersion: v1 kind: ServiceAccount metadata: name: dashboard-admin namespace: kubernetes-dashboard --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: dashboard-admin roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: dashboard-admin namespace: kubernetes-dashboard应用这个配置kubectl apply -f dashboard-admin.yaml3.2 配置 Ingress 资源以下是一个完整的 Ingress 配置示例通过 HTTPS 安全暴露 Dashboard# dashboard-ingress.yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: kubernetes-dashboard namespace: kubernetes-dashboard annotations: nginx.ingress.kubernetes.io/backend-protocol: HTTPS nginx.ingress.kubernetes.io/ssl-passthrough: true nginx.ingress.kubernetes.io/force-ssl-redirect: true cert-manager.io/cluster-issuer: letsencrypt-prod spec: ingressClassName: nginx tls: - hosts: - dashboard.yourdomain.com secretName: dashboard-tls rules: - host: dashboard.yourdomain.com http: paths: - path: / pathType: Prefix backend: service: name: kubernetes-dashboard port: number: 443应用 Ingress 配置kubectl apply -f dashboard-ingress.yaml3.3 获取访问令牌创建长期有效的访问令牌默认为1小时这里设置为30天kubectl -n kubernetes-dashboard create token dashboard-admin --duration720h这个命令会输出一个长字符串的 Token复制它用于 Dashboard 登录。4. 高级安全配置4.1 网络策略限制访问为了进一步增强安全性可以创建 NetworkPolicy 限制只有特定 IP 可以访问 Dashboard# dashboard-networkpolicy.yaml apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: restrict-dashboard-access namespace: kubernetes-dashboard spec: podSelector: matchLabels: k8s-app: kubernetes-dashboard policyTypes: - Ingress ingress: - from: - ipBlock: cidr: 192.168.1.0/24 # 替换为您的可信IP段 ports: - protocol: TCP port: 84434.2 审计日志配置启用 Dashboard 的审计日志功能记录所有管理操作# dashboard-audit.yaml apiVersion: v1 kind: ConfigMap metadata: name: kubernetes-dashboard-settings namespace: kubernetes-dashboard data: audit-log-enabled: true audit-log-path: /var/log/dashboard-audit.log audit-log-maxage: 30 audit-log-maxbackup: 10 audit-log-maxsize: 1005. 故障排查与日常维护5.1 常见问题解决Dashboard 无法访问检查 Ingress Controller 日志kubectl logs -n ingress-nginx deploy/ingress-nginx-controller验证 Service 是否正确暴露kubectl get svc -n kubernetes-dashboard检查证书是否有效kubectl get certificate -n kubernetes-dashboardToken 无效或过期重新生成 Token 并确保有效期足够长检查 ClusterRoleBinding 是否正确关联 ServiceAccount5.2 性能优化建议对于大型集群可以调整 Dashboard 的资源限制# dashboard-resources.yaml apiVersion: apps/v1 kind: Deployment metadata: name: kubernetes-dashboard namespace: kubernetes-dashboard spec: template: spec: containers: - name: kubernetes-dashboard resources: limits: cpu: 1 memory: 1Gi requests: cpu: 500m memory: 512Mi6. 最佳实践与安全建议定期轮换 Token即使设置了长有效期也应定期更换访问令牌启用双因素认证结合 OIDC 提供更强大的身份验证限制用户权限避免所有用户都使用 cluster-admin 权限监控 Dashboard 访问设置告警监控异常登录行为定期升级保持 Dashboard 版本与集群版本兼容推荐的 RBAC 权限矩阵用户角色权限级别适用场景集群管理员cluster-admin系统管理员命名空间管理员admin项目负责人开发人员edit日常开发与部署只读用户view监控与审计在实际生产环境中我们通常会遇到 Dashboard 响应变慢的情况。通过增加 Metrics Scraper 的副本数可以有效改善这一问题kubectl scale deployment -n kubernetes-dashboard dashboard-metrics-scraper --replicas3