kubeasz/docs/guide/dashboard-1.8.2.md

6.9 KiB
Raw Blame History

dashboard

本文档基于 dashboard 1.8.2版本k8s版本 1.9.x。

部署

如果之前已按照本项目部署dashboard1.6.3,先删除旧版本:kubectl delete -f /etc/ansible/manifests/dashboard/

1.8.2配置文件参考官方文档

  • 增加了通过api-server方式访问dashboard
  • 增加了NodePort方式暴露服务,这样集群外部可以使用 https://NodeIP:NodePort (注意是https不是http区别于1.6.3版本) 直接访问 dashboard生产环境建议关闭该访问途径。

安装部署

# 部署dashboard 主yaml配置文件
$ kubectl create -f /etc/ansible/manifests/dashboard/1.8.2/kubernetes-dashboard.yaml
# 部署基本密码认证配置[可选],密码文件位于 /etc/kubernetes/ssl/basic-auth.csv
$ kubectl create -f /etc/ansible/manifests/dashboard/ui-admin-rbac.yaml
$ kubectl create -f /etc/ansible/manifests/dashboard/ui-read-rbac.yaml

验证

# 查看pod 运行状态
kubectl get pod -n kube-system | grep dashboard
kubernetes-dashboard-7c74685c48-9qdpn   1/1       Running   0          22s
# 查看dashboard service
kubectl get svc -n kube-system|grep dashboard
kubernetes-dashboard   NodePort    10.68.219.38   <none>        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

访问

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

  • 启用 TLS认证 RBAC授权等安全特性
  • 关闭 apiserver非安全端口8080的外部访问--insecure-bind-address=127.0.0.1
  • 关闭匿名认证--anonymous-auth=false
  • 补充启用基本密码认证 --basic-auth-file=/etc/kubernetes/ssl/basic-auth.csv密码文件模板中按照每行(密码,用户名,序号)的格式,可以定义多个用户

新版本dashboard登陆可以分为两步类似流行的双因子登陆系统

  • 第一步通过api-server本身安全认证流程与之前1.6.3版本相同
  • 第二步通过dashboard自带的登陆流程使用Kubeconfig Token等方式登陆

1. 临时访问:使用 https://NodeIP:NodePort 方式直接访问 dashboard生产环境建议关闭该途径

打开页面出现dashboard 新版本自带的登陆页面,我们选择“令牌(Token)”方式登陆,关于令牌的获取参考

# 创建Service Account 和 ClusterRoleBinding
$ kubectl create -f /etc/ansible/manifests/dashboard/1.8.2/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}')

2. 用户+密码访问:安全性比证书方式差点,务必保管好密码文件basic-auth.csv

  • 这里演示两种权限使用admin 登陆dashboard拥有所有权限使用readonly 登陆后仅查看权限,首先在 master节点文件 /etc/kubernetes/ssl/basic-auth.csv 确认用户名和密码如果要增加或者修改用户修改保存该文件后记得逐个重启你的master 节点
  • 为了演示用户密码访问,如果你已经完成证书访问方式,你可以在浏览器删除证书,或者访问时候浏览器询问你证书时不选证书
  • 2.1 设置用户admin 的RBAC 权限,如下运行配置文件 kubectl create -f ui-admin-rbac.yaml
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: ui-admin
rules:
- apiGroups:
  - ""
  resources:
  - services
  - services/proxy
  verbs:
  - '*'

---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: ui-admin-binding
  namespace: kube-system
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: ui-admin
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: admin
  • 2.2 设置用户readonly 的RBAC 权限,如下运行配置文件 kubectl create -f ui-read-rbac.yaml
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: ui-read
rules:
- apiGroups:
  - ""
  resources:
  - services
  - services/proxy
  verbs:
  - get
  - list
  - watch

---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: ui-read-binding
  namespace: kube-system
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: ui-read
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: readonly
  • 2.3 访问 https://x.x.x.x:6443/api/v1/namespaces/kube-system/services/kubernetes-dashboard/proxy 使用 admin登陆拥有所有权限比如删除某个部署使用 readonly登陆只有查看权限尝试删除某个部署会提示错误 forbidden: User \"readonly\" cannot delete services/proxy in the namespace \"kube-system\"

  • dashboard自带的登陆流程同上

3. 证书访问:最安全的方式,配置较复杂

  • 使用集群CA 生成客户端证书,可以根据需要生成权限不同的证书,这里为了演示直接使用 kubectl使用的证书和key(在03.kubectl.yml阶段生成),该证书拥有所有权限
  • 指定格式导出该证书,进入/etc/kubernetes/ssl目录,使用命令openssl pkcs12 -export -in admin.pem -inkey admin-key.pem -out kube-admin.p12 提示输入证书密码和确认密码,可以用密码再增加一层保护,也可以直接回车跳过,完成后目录下多了 kube-admin.p12文件,将它分发给授权的用户
  • 用户将 kube-admin.p12 双击导入证书即可,IEChrome 中输入https://x.x.x.x:6443/api/v1/namespaces/kube-system/services/kubernetes-dashboard/proxy 或者 https://x.x.x.x:6443/ui 即可访问。补充最新firefox需要在浏览器中单独导入 [选项] - [隐私与安全] - [证书/查看证书] - [您的证书] 页面点击 [导入] 该证书
  • dashboard自带的登陆流程同上

小结

  • dashboard 访问控制实现较复杂,文档中给出的例子也有助于你理解 RBAC的灵活控制能力当然最好去官方文档学习一下,这块篇幅不长
  • 由于还未部署 Heapster 插件,当前 dashboard 不能展示 Pod、Nodes 的 CPU、内存等 metric 图形,后续部署 heapster后自然能够看到
  • 本文中的权限设置仅供演示用,生产环境请在此基础上修改成适合你安全需求的方式

前一篇 -- 目录 -- 后一篇