深入浅出 Kubernetes Dashboard:从安装到使用全攻略
Kubernetes (K8s) 已经成为容器编排的事实标准,但其复杂性也让许多初学者望而却步。幸运的是,Kubernetes Dashboard 提供了一个直观的 Web 界面,让用户可以轻松地管理和监控集群。本文将深入浅出地介绍 Kubernetes Dashboard,从安装、配置到日常使用,带你全面掌握这个强大的工具。
一、Kubernetes Dashboard 简介
Kubernetes Dashboard 是一个官方提供的基于 Web 的 Kubernetes 用户界面。通过 Dashboard,你可以:
- 可视化管理集群资源: 查看 Pods、Deployments、Services、Nodes 等各种资源的状态、日志和事件。
- 部署和管理应用: 通过 YAML 文件或表单方式创建、更新和删除应用。
- 监控集群健康状况: 查看 CPU、内存、网络等资源的使用情况,及时发现潜在问题。
- 执行基本操作: 对 Pod 进行扩缩容、滚动更新、进入容器执行命令等操作。
- 管理命名空间: 切换不同的命名空间,隔离不同的应用和资源。
- RBAC权限管理: 支持基于角色的访问控制,保证集群安全。
总而言之,Kubernetes Dashboard 为用户提供了一个友好的图形化界面,降低了 Kubernetes 的使用门槛,提高了管理效率。
二、安装 Kubernetes Dashboard
2.1 前提条件
在安装 Dashboard 之前,你需要确保:
- 已有一个运行中的 Kubernetes 集群: 可以是本地的 Minikube、Docker Desktop,也可以是云上的托管 Kubernetes 服务(如 GKE、EKS、AKS)。
- kubectl 命令行工具已安装并配置: 确保 kubectl 可以正常连接到你的集群。
- 网络环境畅通: Dashboard 需要从外部访问,确保集群所在网络允许访问 Dashboard 的端口。
2.2 安装步骤
Kubernetes 官方推荐使用 YAML 文件进行部署。
-
下载推荐的 YAML 文件:
bash
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
这个YAML文件定义了Dashboard的Deployment, Service, ServiceAccount, Role, RoleBinding等资源。 -
验证安装:
bash
kubectl get pods -n kubernetes-dashboard如果看到名为
kubernetes-dashboard-xxxx
的 Pod 状态为Running
,则表示 Dashboard 已成功部署。kubectl get svc -n kubernetes-dashboard
可以查看dashboard的service信息.
2.3 访问 Kubernetes Dashboard
Dashboard 默认使用 HTTPS 协议,并且需要身份验证才能访问。有以下几种常见的访问方式:
2.3.1 使用 kubectl proxy
kubectl proxy
命令可以在本地创建一个代理,转发对 Kubernetes API Server 的请求。这是最简单、最安全的访问方式,适合本地开发和测试。
-
启动代理:
bash
kubectl proxy -
访问 Dashboard:
在浏览器中打开以下地址:
http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
此时会要求选择认证方式.
2.3.2 使用 NodePort
如果你的集群在云上,或者需要从外部网络访问 Dashboard,可以使用 NodePort 类型的 Service。
-
修改 Service 类型:
bash
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard将
type: ClusterIP
修改为type: NodePort
,并指定一个端口(如 30000)。 -
获取访问地址:
bash
kubectl get svc kubernetes-dashboard -n kubernetes-dashboard -o jsonpath='{.spec.ports[0].nodePort}'记下输出的 NodePort。
-
访问 Dashboard:
在浏览器中打开以下地址:
https://<NodeIP>:<NodePort>
<NodeIP>
是集群中任意一个节点的 IP 地址。
2.3.3 使用 Ingress
如果你的集群配置了 Ingress Controller,可以使用 Ingress 来暴露 Dashboard。
-
创建 Ingress 资源:
创建一个 YAML 文件(如
dashboard-ingress.yaml
),内容如下:yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: dashboard-ingress
namespace: kubernetes-dashboard
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" #重要
nginx.ingress.kubernetes.io/ssl-redirect: "true" #重要
spec:
ingressClassName: nginx #根据自己的Ingress Controller填写
rules:
- host: dashboard.example.com #修改为你自己的域名
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: kubernetes-dashboard
port:
number: 443
这里假设使用的nginx-ingress, 其他ingress controller的配置需要查看对应文档. -
应用 Ingress 资源:
bash
kubectl apply -f dashboard-ingress.yaml -
访问 Dashboard:
在浏览器中打开你配置的域名(如
https://dashboard.example.com
)。
2.4 身份验证
无论使用哪种访问方式,都需要进行身份验证。Dashboard 支持两种身份验证方式:
2.4.1 Token 认证
-
创建 ServiceAccount:
bash
kubectl create serviceaccount admin-user -n kubernetes-dashboard -
绑定 ClusterRole:
bash
kubectl create clusterrolebinding admin-user --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:admin-user
注意: 赋予cluster-admin
角色具有极高的权限,生产环境中应谨慎使用。建议创建自定义 Role,并绑定最小权限。 -
获取 Token:
bash
kubectl -n kubernetes-dashboard create token admin-user
复制输出的 Token。 -
登录 Dashboard:
在 Dashboard 登录页面选择 “Token”,粘贴 Token 并登录。
2.4.2 Kubeconfig 认证 (不推荐)
Kubeconfig 文件包含了集群的访问凭证。
-
找到 Kubeconfig 文件:
通常位于
~/.kube/config
。 -
登录 Dashboard:
在 Dashboard 登录页面选择 “Kubeconfig”,选择你的 Kubeconfig 文件并登录。
强烈不推荐直接使用 Kubeconfig 文件登录,因为它包含了集群的完整访问权限,存在安全风险。
三、Kubernetes Dashboard 使用指南
3.1 界面概览
登录 Dashboard 后,你会看到一个简洁直观的界面,主要分为以下几个部分:
- 导航栏: 位于左侧,可以切换不同的资源视图(如 Workloads、Services & Ingress、Config & Storage 等)。
- 集群概览: 位于顶部,显示集群的整体状态、资源使用情况和事件。
- 资源列表: 位于中间,显示当前命名空间下的资源列表,可以进行排序、过滤和搜索。
- 资源详情: 点击资源列表中的条目,可以查看资源的详细信息、YAML 配置、日志和事件。
- 操作按钮: 位于右上角,可以创建、编辑和删除资源。
- 命名空间选择器: 位于顶部,可以切换不同的命名空间。
- 用户信息:显示当前登录用户和token信息.
3.2 常用操作
3.2.1 查看资源
- 查看 Pods: 在导航栏中选择 “Workloads” -> “Pods”,可以查看所有 Pod 的状态、IP 地址、所在节点等信息。点击 Pod 名称可以查看详细信息、日志和事件。
- 查看 Deployments: 在导航栏中选择 “Workloads” -> “Deployments”,可以查看所有 Deployment 的状态、副本数、更新策略等信息。点击 Deployment 名称可以查看详细信息、关联的 Pods 和 ReplicaSets。
- 查看 Services: 在导航栏中选择 “Services & Ingress” -> “Services”,可以查看所有 Service 的类型、ClusterIP、端口等信息。点击 Service 名称可以查看详细信息、关联的 Endpoints。
- 查看 Nodes: 在导航栏中选择 “Cluster” -> “Nodes”,可以查看所有 Node 的状态、资源容量、标签等信息。点击 Node 名称可以查看详细信息、资源使用情况和事件。
3.2.2 部署应用
- 点击右上角的 “+” 按钮。
- 选择 “Create from file” 或 “Create from form”。
- Create from file: 上传一个 YAML 文件,其中包含了你要部署的应用的配置。
- Create from form: 通过表单方式填写应用的配置,如镜像名称、副本数、端口等。
- 点击 “Create” 按钮。
3.2.3 扩缩容
- 在 “Workloads” -> “Deployments” 中找到你要扩缩容的 Deployment。
- 点击 Deployment 名称进入详情页面。
- 在 “Replicas” 部分,点击 “+” 或 “-” 按钮调整副本数。
- 点击 “Update” 按钮。
3.2.4 滚动更新
- 在 “Workloads” -> “Deployments” 中找到你要更新的 Deployment。
- 点击 Deployment 名称进入详情页面。
- 点击 “Edit” 按钮。
- 修改 YAML 配置,如更新镜像版本。
- 点击 “Update” 按钮。
3.2.5 进入容器
- 在 “Workloads” -> “Pods” 中找到你要进入的 Pod。
- 点击 Pod 名称进入详情页面。
- 在 “Containers” 部分,点击容器名称旁边的 “Exec” 按钮。
- 在弹出的终端窗口中执行命令。
3.2.6 查看日志
- 在 “Workloads” -> “Pods” 中找到你要查看日志的 Pod。
- 点击 Pod 名称进入详情页面。
- 点击 “Logs” 标签页。
- 选择要查看日志的容器。
3.3 高级功能
3.3.1 自定义资源显示(CRD)
Dashboard 支持显示自定义资源(Custom Resource Definitions, CRD)。如果你的集群中安装了 CRD,Dashboard 会自动识别并显示这些资源。
3.3.2 集成 Metrics Server
Metrics Server 是一个集群范围的资源使用数据聚合器。通过集成 Metrics Server,Dashboard 可以显示更详细的资源使用情况图表。
-
安装 Metrics Server:
bash
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
由于国内网络原因, 建议替换镜像地址为国内镜像源. 例如:
registry.aliyuncs.com/google_containers/metrics-server:v0.6.3
2. 验证安装:
kubectl get apiservice v1beta1.metrics.k8s.io -o jsonpath='{.spec.service.name}'
返回结果为 metrics-server 则表示成功.
3.3.3 RBAC 权限控制
Dashboard 支持基于角色的访问控制(RBAC)。你可以创建不同的 ServiceAccount、Role 和 RoleBinding,为不同的用户分配不同的权限。
例如, 只允许用户查看pod信息, 不允许做任何修改:
-
创建 ServiceAccount:
bash
kubectl create serviceaccount readonly-user -n kubernetes-dashboard -
创建 Role:
yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default # 根据需要修改命名空间
name: pod-reader
rules:
- apiGroups: [""] # "" indicates the core API group
resources: ["pods"]
verbs: ["get", "watch", "list"] -
创建 RoleBinding:
bash
kubectl create rolebinding readonly-user --role=pod-reader --serviceaccount=kubernetes-dashboard:readonly-user --namespace=default
4. 获取 Token:
kubectl -n kubernetes-dashboard create token readonly-user
5. 然后使用这个token登录dashboard, 会发现只能查看default namespace的pod信息.
四、常见问题及解决方案
- Dashboard 无法访问:
- 检查网络连接是否正常。
- 检查 Service 类型和端口是否正确。
- 检查防火墙规则是否允许访问 Dashboard 端口。
- 检查 Ingress 配置是否正确。
- Dashboard 登录失败:
- 检查 Token 是否正确。
- 检查 ServiceAccount 是否具有足够的权限。
- 检查 Kubeconfig 文件是否有效。
- Dashboard 显示不完整:
- 尝试刷新页面。
- 清除浏览器缓存。
- 检查 Dashboard 版本是否与 Kubernetes 版本兼容。
- Dashboard 无法显示资源使用情况:
- 检查是否安装了 Metrics Server。
- 检查 Metrics Server 是否正常运行。
- kubectl proxy 访问时出现403错误:
确保你的用户有访问 dashboard 资源的权限。可以尝试使用 cluster-admin 角色进行测试。
五、总结
Kubernetes Dashboard 是一个功能强大且易于使用的 Kubernetes 管理工具。通过本文的介绍,你应该已经掌握了 Dashboard 的安装、配置和基本使用方法。希望你能充分利用 Dashboard,更轻松地管理和监控你的 Kubernetes 集群。
Dashboard 只是 Kubernetes 管理的众多工具之一。随着你对 Kubernetes 的深入了解,你还可以探索更多高级工具和技术,如 Helm、Kustomize、Prometheus、Grafana 等,进一步提升你的集群管理水平。