深入浅出k8s dashboard:从安装到使用全攻略 – wiki基地


深入浅出 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 文件进行部署。

  1. 下载推荐的 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等资源。

  2. 验证安装:

    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 的请求。这是最简单、最安全的访问方式,适合本地开发和测试。

  1. 启动代理:

    bash
    kubectl proxy

  2. 访问 Dashboard:

    在浏览器中打开以下地址:

    http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
    此时会要求选择认证方式.

2.3.2 使用 NodePort

如果你的集群在云上,或者需要从外部网络访问 Dashboard,可以使用 NodePort 类型的 Service。

  1. 修改 Service 类型:

    bash
    kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard

    type: ClusterIP 修改为 type: NodePort,并指定一个端口(如 30000)。

  2. 获取访问地址:

    bash
    kubectl get svc kubernetes-dashboard -n kubernetes-dashboard -o jsonpath='{.spec.ports[0].nodePort}'

    记下输出的 NodePort。

  3. 访问 Dashboard:

    在浏览器中打开以下地址:

    https://<NodeIP>:<NodePort>
    <NodeIP> 是集群中任意一个节点的 IP 地址。

2.3.3 使用 Ingress

如果你的集群配置了 Ingress Controller,可以使用 Ingress 来暴露 Dashboard。

  1. 创建 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的配置需要查看对应文档.

  2. 应用 Ingress 资源:

    bash
    kubectl apply -f dashboard-ingress.yaml

  3. 访问 Dashboard:

    在浏览器中打开你配置的域名(如 https://dashboard.example.com)。

2.4 身份验证

无论使用哪种访问方式,都需要进行身份验证。Dashboard 支持两种身份验证方式:

2.4.1 Token 认证

  1. 创建 ServiceAccount:

    bash
    kubectl create serviceaccount admin-user -n kubernetes-dashboard

  2. 绑定 ClusterRole:

    bash
    kubectl create clusterrolebinding admin-user --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:admin-user

    注意: 赋予 cluster-admin 角色具有极高的权限,生产环境中应谨慎使用。建议创建自定义 Role,并绑定最小权限。

  3. 获取 Token:

    bash
    kubectl -n kubernetes-dashboard create token admin-user

    复制输出的 Token。

  4. 登录 Dashboard:

    在 Dashboard 登录页面选择 “Token”,粘贴 Token 并登录。

2.4.2 Kubeconfig 认证 (不推荐)

Kubeconfig 文件包含了集群的访问凭证。

  1. 找到 Kubeconfig 文件:

    通常位于 ~/.kube/config

  2. 登录 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 部署应用

  1. 点击右上角的 “+” 按钮。
  2. 选择 “Create from file” 或 “Create from form”。
    • Create from file: 上传一个 YAML 文件,其中包含了你要部署的应用的配置。
    • Create from form: 通过表单方式填写应用的配置,如镜像名称、副本数、端口等。
  3. 点击 “Create” 按钮。

3.2.3 扩缩容

  1. 在 “Workloads” -> “Deployments” 中找到你要扩缩容的 Deployment。
  2. 点击 Deployment 名称进入详情页面。
  3. 在 “Replicas” 部分,点击 “+” 或 “-” 按钮调整副本数。
  4. 点击 “Update” 按钮。

3.2.4 滚动更新

  1. 在 “Workloads” -> “Deployments” 中找到你要更新的 Deployment。
  2. 点击 Deployment 名称进入详情页面。
  3. 点击 “Edit” 按钮。
  4. 修改 YAML 配置,如更新镜像版本。
  5. 点击 “Update” 按钮。

3.2.5 进入容器

  1. 在 “Workloads” -> “Pods” 中找到你要进入的 Pod。
  2. 点击 Pod 名称进入详情页面。
  3. 在 “Containers” 部分,点击容器名称旁边的 “Exec” 按钮。
  4. 在弹出的终端窗口中执行命令。

3.2.6 查看日志

  1. 在 “Workloads” -> “Pods” 中找到你要查看日志的 Pod。
  2. 点击 Pod 名称进入详情页面。
  3. 点击 “Logs” 标签页。
  4. 选择要查看日志的容器。

3.3 高级功能

3.3.1 自定义资源显示(CRD)

Dashboard 支持显示自定义资源(Custom Resource Definitions, CRD)。如果你的集群中安装了 CRD,Dashboard 会自动识别并显示这些资源。

3.3.2 集成 Metrics Server

Metrics Server 是一个集群范围的资源使用数据聚合器。通过集成 Metrics Server,Dashboard 可以显示更详细的资源使用情况图表。

  1. 安装 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信息, 不允许做任何修改:

  1. 创建 ServiceAccount:

    bash
    kubectl create serviceaccount readonly-user -n kubernetes-dashboard

  2. 创建 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"]

  3. 创建 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信息.

四、常见问题及解决方案

  1. Dashboard 无法访问:
    • 检查网络连接是否正常。
    • 检查 Service 类型和端口是否正确。
    • 检查防火墙规则是否允许访问 Dashboard 端口。
    • 检查 Ingress 配置是否正确。
  2. Dashboard 登录失败:
    • 检查 Token 是否正确。
    • 检查 ServiceAccount 是否具有足够的权限。
    • 检查 Kubeconfig 文件是否有效。
  3. Dashboard 显示不完整:
    • 尝试刷新页面。
    • 清除浏览器缓存。
    • 检查 Dashboard 版本是否与 Kubernetes 版本兼容。
  4. Dashboard 无法显示资源使用情况:
    • 检查是否安装了 Metrics Server。
    • 检查 Metrics Server 是否正常运行。
  5. kubectl proxy 访问时出现403错误:
    确保你的用户有访问 dashboard 资源的权限。可以尝试使用 cluster-admin 角色进行测试。

五、总结

Kubernetes Dashboard 是一个功能强大且易于使用的 Kubernetes 管理工具。通过本文的介绍,你应该已经掌握了 Dashboard 的安装、配置和基本使用方法。希望你能充分利用 Dashboard,更轻松地管理和监控你的 Kubernetes 集群。
Dashboard 只是 Kubernetes 管理的众多工具之一。随着你对 Kubernetes 的深入了解,你还可以探索更多高级工具和技术,如 Helm、Kustomize、Prometheus、Grafana 等,进一步提升你的集群管理水平。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部