温馨提示×

如何在Debian上安装K8s Dashboard

小樊
40
2025-12-26 20:51:18
栏目: 智能运维

在 Debian 上安装 Kubernetes Dashboard 的完整步骤

一 前置条件

  • 已部署可用的 Kubernetes 集群(建议使用 kubeadm 初始化),并确认节点状态为 Readykubectl get nodes
  • 已安装并配置 kubectl(本机或管理节点均可),可正常访问集群:kubectl cluster-info
  • 如需从外部访问,确保管理节点或 Ingress 节点 防火墙放行 443/80(或 NodePort 端口)。

二 安装方式

  • 方式 A 推荐 Helm 安装(版本新、升级方便)

    1. 安装 Helm(如未安装):curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
    2. 添加仓库并部署:
      helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/
      helm upgrade --install kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard \
        --create-namespace --namespace kubernetes-dashboard
      
    3. 验证:kubectl -n kubernetes-dashboard get pods,svc
  • 方式 B 使用官方清单安装(稳定、无需 Helm)

    1. 部署 Dashboard(示例采用 v2.7.0,可按需调整版本):
      kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
      
    2. 验证:kubectl -n kubernetes-dashboard get pods,svc

三 创建管理员并获取令牌

  • 创建具有 cluster-admin 权限的 ServiceAccount(推荐在 kubernetes-dashboard 命名空间):
    cat <<'EOF' | kubectl apply -f -
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: admin-user
      namespace: kubernetes-dashboard
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: admin-user
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: cluster-admin
    subjects:
    - kind: ServiceAccount
      name: admin-user
      namespace: kubernetes-dashboard
    EOF
    
  • 获取登录令牌(短期,默认 1 小时):
    kubectl -n kubernetes-dashboard create token admin-user
    
  • 如需长期令牌(便于日常使用),可创建 Secret 绑定到该 SA 并读取:
    cat <<'EOF' | kubectl apply -f -
    apiVersion: v1
    kind: Secret
    metadata:
      name: admin-user-permanent-token
      namespace: kubernetes-dashboard
      annotations:
        kubernetes.io/service-account.name: admin-user
    type: kubernetes.io/service-account-token
    EOF
    
    kubectl patch serviceaccount admin-user -n kubernetes-dashboard \
      -p '{"secrets": [{"name": "admin-user-permanent-token"}]}'
    
    kubectl get secret admin-user-permanent-token -n kubernetes-dashboard \
      -o jsonpath="{.data.token}" | base64 --decode
    
    提示:生产环境不建议长期使用 cluster-admin,可按需收敛权限。

四 访问方式

  • 本地端口转发(仅本机访问):

    kubectl -n kubernetes-dashboard port-forward svc/kubernetes-dashboard-kong-proxy 8443:443
    

    浏览器访问:https://localhost:8443(首次会提示证书不受信任,属于自签名,测试环境可继续)。

  • NodePort 暴露(内网/公网访问):

    1. 将代理 Service 改为 NodePort
      kubectl patch svc kubernetes-dashboard-kong-proxy \
        -n kubernetes-dashboard -p '{"spec":{"type":"NodePort"}}'
      
    2. 查看分配的端口并访问:
      kubectl -n kubernetes-dashboard get svc kubernetes-dashboard-kong-proxy
      
      访问地址:https://<任意节点IP>:
  • Ingress 暴露(域名 + HTTPS,生产推荐):

    1. 前提:已部署 Ingress Controller(如 Nginx Ingress)。
    2. 创建 Ingress 资源(示例域名 web.dashboard.com):
      cat <<'EOF' | kubectl apply -f -
      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        name: dashboard-ingress
        namespace: kubernetes-dashboard
        annotations:
          nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
          nginx.ingress.kubernetes.io/ssl-redirect: "true"
      spec:
        ingressClassName: nginx
        rules:
        - host: web.dashboard.com
          http:
            paths:
            - path: /
              pathType: Prefix
              backend:
                service:
                  name: kubernetes-dashboard
                  port:
                    number: 443
        tls:
        - hosts:
          - web.dashboard.com
      EOF
      
    3. 本地/内网 DNS 将 web.dashboard.com 解析到 Ingress Controller 所在节点 IP,浏览器访问:https://web.dashboard.com

五 常见问题与排查

  • 镜像拉取失败:在 Helm 安装时通过 values.yaml 或本地 values 文件替换镜像仓库;或提前在各节点 docker pull 并推送到私有仓库后修改镜像地址。
  • 访问被拒绝或权限不足:确认已创建 ServiceAccount + ClusterRoleBinding,并使用该 SA 的 Token 登录;避免误用默认受限账户。
  • 无法从外部访问:检查 Service 类型(NodePort/Ingress)、防火墙/安全组、以及 Ingress Controller 是否就绪
  • 证书安全:测试环境可用自签名证书;生产环境请配置 有效 TLS 证书(如 cert-manager 自动签发)。

0