本文使用的K8S是基于kubeasz一键搭建

Github地址:https://github.com/easzlab/kubeasz

本文档基于 dashboard 1.10.1版本,k8s版本 1.18.3。

部署

新版配置文件参考 https://github.com/kubernetes/dashboard

安装部署

# 部署dashboard 主yaml配置文件
$ kubectl apply -f /etc/ansible/manifests/dashboard/kubernetes-dashboard.yaml
# 创建可读可写 admin Service Account
$ kubectl apply -f /etc/ansible/manifests/dashboard/admin-user-sa-rbac.yaml
# 创建只读 read Service Account
$ kubectl apply -f /etc/ansible/manifests/dashboard/read-user-sa-rbac.yaml

验证

# 查看pod 运行状态
kubectl get pod -n kube-system | grep dashboard
kubernetes-dashboard-65665f84db-46j96        1/1     Running   0          103m
# 查看dashboard service
kubectl get svc -n kube-system|grep dashboard
kubernetes-dashboard        NodePort    10.68.216.4     <none>        443:35259/TCP            103m       443:24108/TCP                   53s
# 查看集群服务
kubectl cluster-info|grep dashboard
kubernetes-dashboard is running at https://192.168.1.1:6443/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy
# 查看pod 运行日志
kubectl logs kubernetes-dashboard-7c74685c48-9qdpn -n kube-system
  • 由于还未部署 Heapster 插件,当前 dashboard 不能展示 Pod、Nodes 的 CPU、内存等 metric 图形,后续部署 heapster后自然能够看到

访问控制

因为dashboard 作为k8s 原生UI,能够展示各种资源信息,甚至可以有修改、增加、删除权限,所以有必要对访问进行认证和控制,本项目部署的集群有以下安全设置:

  • 启用 TLS认证 RBAC授权等安全特性
  • 关闭 apiserver非安全端口8080的外部访问--insecure-bind-address=127.0.0.1
  • 关闭匿名认证--anonymous-auth=false
  • 可选启用基本密码认证 --basic-auth-file=/etc/kubernetes/ssl/basic-auth.csv,按照每行(密码,用户名,序号)的格式,可以定义多个用户;kubeasz 1.0.0 版本以后默认关闭 basic-auth,可以在 roles/kube-master/defaults/main.yml 选择开启

新版 dashboard可以有多层访问控制,首先与旧版一样可以使用apiserver 方式登录控制:

  • 第一步通过api-server本身安全认证流程,与之前相同,这里不再赘述
    • 如需(用户名/密码)认证,kubeasz 1.0.0以后使用 easzctl basic-auth -s 开启
  • 第二步通过dashboard自带的登录流程,使用Kubeconfig Token等方式登录

注意: 如果集群已启用 ingress tls的话,可以配置ingress规则访问dashboard

演示新登录方式

为演示方便这里使用 https://NodeIP:NodePort 方式访问 dashboard,支持两种登录方式:Kubeconfig、令牌(Token)

  • 令牌登录(admin)

选择“令牌(Token)”方式登录,复制下面输出的admin token 字段到输入框

# 创建Service Account 和 ClusterRoleBinding
$ kubectl apply -f /etc/ansible/manifests/dashboard/admin-user-sa-rbac.yaml
# 获取 Bearer Token,找到输出中 ‘token:’ 开头那一行
$ kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
  • 令牌登录(只读)

选择“令牌(Token)”方式登录,复制下面输出的read token 字段到输入框

# 创建Service Account 和 ClusterRoleBinding
$ kubectl apply -f /etc/ansible/manifests/dashboard/read-user-sa-rbac.yaml
# 获取 Bearer Token,找到输出中 ‘token:’ 开头那一行
$ kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep read-user | awk '{print $1}')
  • Kubeconfig登录(admin)
    Admin kubeconfig文件默认位置:/root/.kube/config,该文件中默认没有token字段,使用Kubeconfig方式登录,还需要将token追加到该文件中,完整的文件格式如下:
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: LS0tLS1CRUdxxxxxxxxxxxxxx
    server: https://10.0.0.10:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: admin
  name: kubernetes
current-context: kubernetes
kind: Config
preferences: {}
users:
- name: admin
  user:
    client-certificate-data: LS0tLS1CRUdJTiBDRxxxxxxxxxxx
    client-key-data: LS0tLS1CRUdJTxxxxxxxxxxxxxx
    token: eyJhbGcixxxxxxxxxxxxxxxx
  • Kubeconfig登录(只读)
    首先创建只读权限 kubeconfig文件,然后类似追加只读token到该文件,略。

访问部署好的K8S面板

如图所示:
image.png
输入token后点击登录:
image.png
登录到这个界面就说明成功了

参考


一个热爱学习的运维