作为 Kubernetes 原生的 Web 管理界面,Dashboard 解决了集群可视化管理的刚需。我在生产环境中发现,当集群规模超过 20 个节点时,纯命令行操作会出现以下典型问题:
Dashboard 通过聚合以下核心功能模块实现管理提效:
| Kubernetes 版本 | Dashboard 版本 | 关键差异点 |
|---|---|---|
| 1.18-1.20 | 2.0.x | 需单独安装 Metrics Server |
| 1.21+ | 2.5.x+ | 内置资源指标采集 |
实测建议:生产环境推荐使用 2.6.0 版本,其与 1.23-1.26 版本集群兼容性最佳
bash复制kubectl get pods -n kube-system -l k8s-app=cilium
bash复制kubectl get storageclasses -o jsonpath='{.items[*].provisioner}'
bash复制kubectl top nodes
bash复制kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.6.0/aio/deploy/recommended.yaml
bash复制watch kubectl get pods -n kubernetes-dashboard
预期输出应显示所有 Pod 状态为 Running 且 READY 1/1
yaml复制apiVersion: v1
kind: Service
metadata:
name: dashboard-exposed
namespace: kubernetes-dashboard
spec:
ports:
- port: 443
targetPort: 8443
nodePort: 30443
selector:
k8s-app: kubernetes-dashboard
type: NodePort
yaml复制apiVersion: v1
kind: ServiceAccount
metadata:
name: dashboard-admin
namespace: kubernetes-dashboard
yaml复制apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: dashboard-admin-binding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: dashboard-admin
namespace: kubernetes-dashboard
bash复制kubectl -n kubernetes-dashboard create token dashboard-admin
bash复制openssl req -new -newkey rsa:2048 -nodes -keyout dashboard.key -out dashboard.csr -subj "/CN=dashboard-user"
bash复制openssl x509 -req -in dashboard.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out dashboard.crt -days 365
yaml复制apiVersion: v1
clusters:
- cluster:
certificate-authority-data: $(cat /etc/kubernetes/pki/ca.crt | base64 -w0)
server: https://<API-SERVER-IP>:6443
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: dashboard-user
name: dashboard-context
current-context: dashboard-context
kind: Config
users:
- name: dashboard-user
user:
client-certificate-data: $(cat dashboard.crt | base64 -w0)
client-key-data: $(cat dashboard.key | base64 -w0)
bash复制helm install prometheus-adapter prometheus-community/prometheus-adapter -f values.yaml
yaml复制# kubernetes-dashboard-settings
args:
- --enable-insecure-login
- --system-banner="Production Cluster"
- --metric-provider=prometheus
- --metric-provider-prometheus-url=http://prometheus-server.monitoring.svc:9090
bash复制kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/dashboard-federation/v0.1.0/deploy/recommended.yaml
bash复制kubectl create secret generic cluster1-kubeconfig --from-file=config=./cluster1.kubeconfig -n kubernetes-dashboard
yaml复制apiVersion: federation.dashboard.k8s.io/v1alpha1
kind: Cluster
metadata:
name: cluster1
spec:
kubeconfigSecret:
name: cluster1-kubeconfig
displayName: "EU-West-1 Production"
| 参数项 | 默认值 | 生产建议值 | 作用域 |
|---|---|---|---|
| --auto-generate-certificates | true | false | 安全优化 |
| --enable-skip-login | false | false | 认证强化 |
| --token-ttl | 900 | 3600 | 会话时长 |
| --apiserver-host | "" | 内部LB地址 | 高可用设计 |
yaml复制apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: dashboard-allow-only-office
namespace: kubernetes-dashboard
spec:
podSelector:
matchLabels:
k8s-app: kubernetes-dashboard
policyTypes:
- Ingress
ingress:
- from:
- ipBlock:
cidr: 192.168.1.0/24
bash复制kubectl -n kubernetes-dashboard delete secret $(kubectl -n kubernetes-dashboard get secret | grep dashboard-admin-token | awk '{print $1}')
yaml复制# audit-policy.yaml
rules:
- level: Metadata
resources:
- group: ""
resources: ["secrets"]
verbs: ["create", "update", "patch"]
| 错误现象 | 根因分析 | 解决方案 |
|---|---|---|
| 503 Service Unavailable | 指标采集器未就绪 | 检查 metrics-server Pod 状态 |
| x509: certificate signed by unknown authority | 浏览器未信任自签名证书 | 导入集群 CA 或使用合法证书 |
| "secrets is forbidden" | RBAC 权限不足 | 检查 ClusterRoleBinding |
bash复制#!/bin/bash
# dashboard-diag.sh
NAMESPACE=kubernetes-dashboard
kubectl get pods -n $NAMESPACE -o wide
kubectl logs -n $NAMESPACE -l k8s-app=kubernetes-dashboard --tail=100
kubectl describe endpoints kubernetes-dashboard -n $NAMESPACE
kubectl get apiservices v1beta1.metrics.k8s.io -o yaml
dockerfile复制FROM kubernetesui/dashboard:v2.6.0
COPY branding/ /usr/share/nginx/html/assets/branding/
json复制// branding-config.json
{
"logo": "data:image/svg+xml;base64,...",
"title": "K8s Enterprise Console",
"favicon": "/assets/branding/favicon.ico"
}
bash复制kubectl apply -f https://github.com/kubernetes-sigs/dashboard-topology/releases/download/v0.1.0/deployment.yaml
yaml复制# dashboard-configmap.yaml
data:
plugins: |
- name: topology-viewer
src: "http://dashboard-topology.plugins.svc:8080/static/plugin.js"
crossorigin: "anonymous"