update dashboard deployment and docs

pull/1076/head
gjmzj 2021-09-23 21:36:34 +08:00
parent 785356eba0
commit 4e4dd05a6e
7 changed files with 38 additions and 51 deletions

View File

@ -1,15 +1,13 @@
## dashboard
本文档基于 dashboard 1.10.1版本k8s版本 1.13.x。因 dashboard 1.7 以后默认开启了自带的登录验证机制,因此不同版本登录有差异:
本文档基于 dashboard 2.2 版本k8s 1.22 版本,因 dashboard 1.7 以后默认开启了自带的登录验证机制,因此不同版本登录有差异:
- 旧版(<= 1.6建议通过apiserver访问直接通过apiserver 认证授权机制去控制 dashboard权限详见[旧版文档](dashboard.1.6.3.md)
- 新版(>= 1.7可以使用自带的登录界面使用不同Service Account Tokens 去控制访问 dashboard的权限
### 部署
如果之前已按照本项目部署dashboard1.6.3,先删除旧版本:`kubectl delete -f /etc/ansible/manifests/dashboard/1.6.3/`
新版配置文件参考 https://github.com/kubernetes/dashboard
参考 https://github.com/kubernetes/dashboard
+ 增加了通过`api-server`方式访问dashboard
+ 增加了`NodePort`方式暴露服务,这样集群外部可以使用 `https://NodeIP:NodePort` (注意是https不是http区别于1.6.3版本) 直接访问 dashboard。
@ -17,74 +15,51 @@
安装部署
``` bash
# 部署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
# ezctl 集成部署组件xxxx 代表集群部署名
# dashboard 部署文件位于 /etc/kubeasz/clusters/xxxx/yml/dashboard/ 目录
./ezctl setup xxxx 07
```
### 验证
### 验证部署
``` bash
# 查看pod 运行状态
kubectl get pod -n kube-system | grep dashboard
kubernetes-dashboard-7c74685c48-9qdpn 1/1 Running 0 22s
dashboard-metrics-scraper-856586f554-l6bf4 1/1 Running 0 35m
kubernetes-dashboard-698d4c759b-67gzg 1/1 Running 0 35m
# 查看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
kubectl logs -n kube-system kubernetes-dashboard-698d4c759b-67gzg
```
+ 由于还未部署 Heapster 插件,当前 dashboard 不能展示 Pod、Nodes 的 CPU、内存等 metric 图形,后续部署 heapster后自然能够看到
### 登陆
### 访问控制
因为dashboard 作为k8s 原生UI能够展示各种资源信息甚至可以有修改、增加、删除权限所以有必要对访问进行认证和控制为演示方便这里使用 `https://NodeIP:NodePort` 方式访问 dashboard支持两种登录方式Kubeconfig、令牌(Token)
因为dashboard 作为k8s 原生UI能够展示各种资源信息甚至可以有修改、增加、删除权限所以有必要对访问进行认证和控制本项目部署的集群有以下安全设置详见 [apiserver配置模板](../../roles/kube-master/templates/kube-apiserver.service.j2)
**注意:** 使用chrome浏览器访问 `https://NodeIP:NodePort` 可能提示安全风险无法访问可以换firefox浏览器设置安全例外继续访问。
+ 启用 `TLS认证` `RBAC授权`等安全特性
+ 关闭 apiserver非安全端口8080的外部访问`--insecure-bind-address=127.0.0.1`
+ 关闭匿名认证`--anonymous-auth=false`
+ 可选启用基本密码认证 `--token-auth-file=/etc/kubernetes/ssl/basic-auth.csv`[密码文件模板](../../roles/kube-master/templates/basic-auth.csv.j2)中按照每行(密码,用户名,序号)的格式可以定义多个用户kubeasz 1.0.0 版本以后默认关闭 basic-auth可以在 roles/kube-master/defaults/main.yml 选择开启
- Token令牌方式登录admin
新版 dashboard可以有多层访问控制首先与旧版一样可以使用apiserver 方式登录控制:
- 第一步通过api-server本身安全认证流程与之前[1.6.3版本](dashboard.1.6.3.md)相同,这里不再赘述
- 如需(用户名/密码认证kubeasz 1.0.0以后使用 `ezctl basic-auth -s` 开启
- 第二步通过dashboard自带的登录流程使用`Kubeconfig` `Token`等方式登录
**注意:** 如果集群已启用 ingress tls的话可以[配置ingress规则访问dashboard](ingress-tls.md#%E9%85%8D%E7%BD%AE-dashboard-ingress)
### 演示新登录方式
为演示方便这里使用 `https://NodeIP:NodePort` 方式访问 dashboard支持两种登录方式Kubeconfig、令牌(Token)
- 令牌登录admin
选择“令牌(Token)”方式登录复制下面输出的admin token 字段到输入框
选择 Token 方式登录复制下面输出的admin token 字段到输入框
``` bash
# 创建Service Account 和 ClusterRoleBinding
$ kubectl apply -f /etc/ansible/manifests/dashboard/admin-user-sa-rbac.yaml
# 获取 Bearer Token找到输出中 token: 开头那一行
# 获取 Bearer Token找到输出中 token: 开头的后面部分
$ kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
```
- 令牌登录(只读)
- Token令牌方式登录只读
选择“令牌(Token)”方式登录复制下面输出的read token 字段到输入框
选择 Token 方式登录复制下面输出的read token 字段到输入框
``` bash
# 创建Service Account 和 ClusterRoleBinding
$ kubectl apply -f /etc/ansible/manifests/dashboard/read-user-sa-rbac.yaml
# 获取 Bearer Token找到输出中 token: 开头那一行
# 获取 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追加到该文件中完整的文件格式如下
```
@ -111,9 +86,9 @@ users:
```
- Kubeconfig登录只读
首先[创建只读权限 kubeconfig文件](../op/readonly_kubectl.md)然后类似追加只读token到该文件略。
首先[创建只读权限 kubeconfig文件](../op/kcfg-adm.md)然后类似追加只读token到该文件略。
### 参考
- 1.[Dashboard Access control](https://github.com/kubernetes/dashboard/wiki/Access-control)
- 1.[Dashboard docs](https://github.com/kubernetes/dashboard/blob/master/docs/README.md)
- 2.[a-read-only-kubernetes-dashboard](https://blog.cowger.us/2018/07/03/a-read-only-kubernetes-dashboard.html)

View File

@ -20,6 +20,9 @@ examples: ./ezctl kcfg-adm test-k8s -L
./ezctl kcfg-adm default -D -u jim-202101162141
```
- 可以设置过期时间
- 可以设置权限管理员权限admin和只读权限view
## 使用举例
- 1.查看集群k8s-01当前自定义kubeconfig

2
ezdown
View File

@ -26,7 +26,7 @@ calicoVer=v3.19.2
flannelVer=v0.13.0-amd64
dnsNodeCacheVer=1.17.0
corednsVer=1.8.4
dashboardVer=v2.2.0
dashboardVer=v2.3.1
dashboardMetricsScraperVer=v1.0.6
metricsVer=v0.3.6
pauseVer=3.5

View File

@ -23,12 +23,19 @@
- "{{ metricsscraper_offline }}"
when: "item in image_info.stdout and CONTAINER_RUNTIME == 'containerd'"
- name: prepare some dirs
file: name={{ cluster_dir }}/yml/dashboard state=directory
- name: 准备 dashboard的部署文件
template: src=dashboard/kubernetes-dashboard.yaml.j2 dest={{ cluster_dir }}/yml/kubernetes-dashboard.yaml
template: src=dashboard/{{ item }}.j2 dest={{ cluster_dir }}/yml/dashboard/{{ item }}
with_items:
- "kubernetes-dashboard.yaml"
- "admin-user-sa-rbac.yaml"
- "read-user-sa-rbac.yaml"
run_once: true
connection: local
- name: 创建 dashboard部署
shell: "{{ base_dir }}/bin/kubectl apply -f {{ cluster_dir }}/yml/kubernetes-dashboard.yaml"
shell: "{{ base_dir }}/bin/kubectl apply -f {{ cluster_dir }}/yml/dashboard/"
run_once: true
connection: local

View File

@ -191,6 +191,8 @@ spec:
args:
- --auto-generate-certificates
- --namespace=kube-system
- --token-ttl=1800
- --sidecar-host=http://dashboard-metrics-scraper:8000
# Uncomment the following line to manually specify Kubernetes API server Host
# If not specified, Dashboard will attempt to auto discover the API server and connect
# to it. Uncomment only if the default does not work.