k8s dashboard user 创建及登录

  1. 创建管理员 ServiceAccount
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
EOF
  1. 授予集群管理员权限
    方案A:直接绑定集群管理员角色(测试环境)
kubectl create clusterrolebinding admin-user \
  --clusterrole=cluster-admin \
  --serviceaccount=kubernetes-dashboard:admin-user

方案B:精细化权限(生产环境推荐)

cat <<EOF | kubectl apply -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: dashboard-admin
rules:
- apiGroups: ["*"]
  resources: ["*"]
  verbs: ["*"]
- nonResourceURLs: ["*"]
  verbs: ["*"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: dashboard-admin-binding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: dashboard-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard
EOF
  1. 获取访问 Token
    Kubernetes v1.24+ 版本(自动生成临时 Token):
kubectl -n kubernetes-dashboard create token admin-user \
  --duration=8760h  # 1年有效期(生产环境建议缩短)

旧版本(通过 Secret 获取),获取 Token(适用于 v1.23 及以下)

kubectl -n kubernetes-dashboard get secret \
  $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") \
  -o go-template="{{.data.token | base64decode}}"
  1. 访问 Dashboard
    方式一:kubectl proxy(本地访问)
# 访问地址:http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

方式二:NodePort(临时测试)

kubectl patch svc kubernetes-dashboard -n kubernetes-dashboard \
  -p '{"spec":{"type":"NodePort","ports":[{"port":443,"nodePort":30443}]}}'
# 访问地址:https://<节点IP>:30443

方式三:Ingress(生产环境)

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-passthrough: "true"
spec:
  ingressClassName: nginx
  rules:
  - host: dashboard.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: kubernetes-dashboard
            port:
              number: 443
  1. 登录 Dashboard
    选择 Token 登录方式:
    粘贴之前获取的 Token
    点击登录即可获得管理员权限

  2. 权限验证

kubectl auth can-i --list \
  --as=system:serviceaccount:kubernetes-dashboard:admin-user ## 该返回YES

测试资源访问

kubectl get nodes \
  --as=system:serviceaccount:kubernetes-dashboard:admin-user
  1. 安全建议(生产环境必做)
    限制 Token 有效期:
kubectl -n kubernetes-dashboard create token admin-user --duration=2h

启用审计日志:

kubectl create -f - <<EOF
apiVersion: audit.k8s.io/v1
kind: Policy
rules:
- level: Metadata
  namespaces: ["kubernetes-dashboard"]
EOF

配置 OIDC 集成(替代 Token 登录):

# 在 Dashboard 部署中添加启动参数
args:
  - --oidc-issuer-url=https://your-oidc-provider.com
  - --oidc-client-id=your-client-id
  - --oidc-groups-claim=groups

故障排查

如果登录后看不到资源:
检查 Token 是否过期
验证 ClusterRoleBinding 是否存在:

kubectl get clusterrolebindings -o wide | grep admin-user

检查 API Server 日志:

kubectl logs -n kube-system kube-apiserver-<node-name> | grep "Forbidden"

通过以上步骤,您将创建一个具有完整权限的 Dashboard 管理员账户。生产环境请务必选择方案B的精细化权限控制,并定期轮换 Token。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容