一、Dashboard 简单介绍
1.1、Dashboard 它是什么
-
Dashboard 是K8s集群管理的一个基于web的用户界面---WebUI,它提供了一个直观的方式来管理和监控K8s集群。
-
Dashboard 提供了对集群资源、应用程序部署和状态的实时查看和操作,使得用户能够更高效地管理和监控其K8s集。
-
Dashboard 不是K8s 集群核心组件的一个部分,它是K8s的一个附加组件(可选的),所以需要单独地进行部署。
-
区别于命令行操作,提供了图形界面,操作更直观,对于帮助初学者学习和理解K8s来说,是一个非常有用的工具。
1.2、Dashboard 它能干什么
- 查看集群状态: 随时随地的查看集群的总体概况、节点状态和资源使用情况。
- 部署和扩展应用: Dashboard允许用户部署新的应用,并对已有的应用程序进行扩展。
- 监控资源使用情况: 实时监控CPU、内存、存储等资源,帮助用户了解资源分配和消耗情况。
- 查看日志和故障排查: 查看应用程序日志,进行故障排查,帮助用户快速进行应用程序的故障诊断和调试。
- 集中管理集群资源:管理集群中的各种资源,如创建、删除、修改,实现资源的弹性伸缩和滚动升级。
二、Dashboard 的安装相关
2.1、K8s与Dashboard匹配关系
Kubernetes 版本 | Dashboard 版本 | 备注 |
---|---|---|
V1.18 | V2.0.0 、V2.0.1 、V2.0.2 、V2.0.3 | 完全支持 |
V1.19 | V2.0.4、V2.0.5 | 完全支持 |
V1.20 | V2.1.0 、V2.2.1 、V2.3.0 、V2.3.1 、V2.4.0 | 完全支持 |
V1.21 | V2.3.1 、V2.4.0 | 完全支持 |
V1.23 | V2.5.0 、V2.5.1 | 完全支持 |
V1.24 | V2.6.0 、V2.6.1 | 完全支持 |
V1.25 | V2.7.0 | 完全支持 |
V1.27 | V3.0.0-alpha0 | 完全支持 |
2.2、Dashboard 的安装方式
- 直接通过官方提供的yaml文件安装: 安装简单方便,也是本次使用的安装方式
- 通过K8s里面的helm工具进行安装: 涉及了后期K8s内容的高级应用范畴,不采用
三、具体Dashboard 的安装
1、查看目前安装K8S版本
[root@node50 ~]# kubectl version --short
Client Version: v1.20.1
Server Version: v1.20.1
2、下载获取Dashboard 的YAML文件
[root@node50 ~]# wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml --no-check-certificate
3、修改 YAML 文件,更改 Service 使用 NodePort 的方式
[root@node50 ~]# cp recommended.yaml recommended.yaml.bak
[root@node50 ~]# vim recommended.yaml # 在适当的位置加上下面两行
... ...
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
type: NodePort ###
ports:
- port: 443
targetPort: 8443
nodePort: 31000 ###
selector:
k8s-app: kubernetes-dashboard
4、部署 Dashboard 的应用
[root@node50 ~]# kubectl apply -f recommended.yaml
namespace/kubernetes-dashboard created
serviceaccount/kubernetes-dashboard created
service/kubernetes-dashboard created
secret/kubernetes-dashboard-certs created
secret/kubernetes-dashboard-csrf created
secret/kubernetes-dashboard-key-holder created
configmap/kubernetes-dashboard-settings created
role.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
deployment.apps/kubernetes-dashboard created
service/dashboard-metrics-scraper created
deployment.apps/dashboard-metrics-scraper created
5、查看部署结果
[root@node50 ~]# kubectl get pod,svc -n kubernetes-dashboard
NAME READY STATUS RESTARTS AGE
pod/dashboard-metrics-scraper-5b8896d7fc-wntx9 1/1 Running 0 47m
pod/kubernetes-dashboard-6b8f9cc89c-ljvwj 1/1 Running 0 47m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/dashboard-metrics-scraper ClusterIP 10.96.34.53 <none> 8000/TCP 47m
service/kubernetes-dashboard NodePort 10.96.31.206 <none> 443:31000/TCP 47m
四、访问 Dashboard 登录界面
4.1、浏览器登录
4.1.1、谷歌浏览器登录情况
4.1.2、火狐浏览器登录情况
4.2、原因分析与处理方案
具体原因: 谷歌、火狐等浏览器的安全策略的严格的限制,没有配置证书导致的
解决方案:三种办法
4.2.1、方法一
谷歌浏览器:点击空白的地方,切换输入法为英文,依次输入 “thisisunsafe” ,即可自动跳转进入页面
4.2.2、方法二
火狐浏览器:找到浏览器的快捷方式,右键属性,在 "目标"选项的后面输入框里面的添加参数(记得空一格):“--test-type --ignore-certificate-errors” ,关闭浏览器后再重新访问就可以了
4.2.3、方法三
### 手动生成一个证书
1、生成一个新的证书
[root@node50 ~]# mkdir /root/key && cd /root/key
[root@node50 key]# openssl genrsa -out dashboard.key 2048
Generating RSA private key, 2048 bit long modulus
...............+++
...........................................................................................+++
e is 65537 (0x10001)
[root@node50 key]# openssl req -new -out dashboard.csr -key dashboard.key -subj '/CN=192.168.10.50'
[root@node50 key]# openssl x509 -req -in dashboard.csr -signkey dashboard.key -out dashboard.crt
Signature ok
subject=/CN=192.168.10.50
Getting Private key
[root@node50 key]# ls -l
-rw-r--r--. 1 root root 989 Sep 11 00:15 dashboard.crt
-rw-r--r--. 1 root root 895 Sep 11 00:15 dashboard.csr
-rw-r--r--. 1 root root 1679 Sep 11 00:15 dashboard.key
2、删除原有的证书 Secret
[root@node50 key]# kubectl delete secret kubernetes-dashboard-certs -n kubernetes-dashboard
secret "kubernetes-dashboard-certs" deleted
3、创建新的证书 Secret
[root@node50 key]# kubectl create secret generic kubernetes-dashboard-certs --from-file=dashboard.key --from-file=dashboard.crt -n kubernetes-dashboard
secret/kubernetes-dashboard-certs created
4、重新生成一个 Pod
[root@node50 key]# kubectl get pod -n kubernetes-dashboard
NAME READY STATUS RESTARTS AGE
dashboard-metrics-scraper-5b8896d7fc-hkvvg 1/1 Running 0 6h
kubernetes-dashboard-897c7599f-9f6b4 1/1 Running 0 6h
[root@node50 key]# kubectl delete pod -n kubernetes-dashboard kubernetes-dashboard-897c7599f-9f6b4
pod "kubernetes-dashboard-897c7599f-9f6b4" deleted
[root@node50 key]# kubectl get pod -n kubernetes-dashboard
NAME READY STATUS RESTARTS AGE
dashboard-metrics-scraper-5b8896d7fc-hkvvg 1/1 Running 0 6h
kubernetes-dashboard-897c7599f-3f34k 1/1 Running 0 6h
4.3、刷新后的登录界面
五、Dashboard 登录方式说明
尽管上面显示的认证登录方式有两种,但是其实严格的讲,Dashboard 的登录验证方式,有以下的三种方式
-
ServiceAccount 账户的 Token令牌登录
-
使用 Kubeconfig 文件导入的方式登录
-
账号和密码登录 ( K8S V1.19 版本之前支持)
5.1、Token 令牌登录方式
5.1.1、使用现成的 Token 令牌
在安装 Dashboard 的时候,有输出如下一行 "serviceaccount/kubernetes-dashboard created ",那就说明:
- Dashboard 部署的时候是创建了相关的 ServiceAccount 账号的 ( 后面称为 SA )
- 既然有相关的 SA 账号,那就可以找到去对应的 Secret , 然后找出其 Token 令牌
- 通过 Secret 找出来的这个 SA 账号的 Token 应该是可以登录 Dashboard 的面板的
1、查找对应的 Secret
[root@node50 ~]# kubectl get secret -n kubernetes-dashboard
NAME TYPE DATA AGE
default-token-v9d4h kubernetes.io/service-account-token 3 115s
kubernetes-dashboard-certs Opaque 0 115s
kubernetes-dashboard-csrf Opaque 1 115s
kubernetes-dashboard-key-holder Opaque 2 115s
kubernetes-dashboard-token-w8jw5 kubernetes.io/service-account-token 3 115s
2、根据 Secret 查到 Token 令牌
[root@node50 ~]# kubectl describe secret -n kubernetes-dashboard kubernetes-dashboard-token-w8jw5
Name: kubernetes-dashboard-token-w8jw5
Namespace: kubernetes-dashboard
Labels: <none>
Annotations: kubernetes.io/service-account.name: kubernetes-dashboard
kubernetes.io/service-account.uid: e1d216a9-aba7-48b2-875a-4d76b5a7818a
Type: kubernetes.io/service-account-token
Data
====
ca.crt: 1066 bytes
namespace: 20 bytes
token: eyJhbGciOiJSUzI1NiIsImtpZCI6ImlKNGlqOUxQcUlZNGl5c0haMm95Nm13MnlnNWFTN3Z6NW5qa3RZa0xOWlkifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC10b2tlbi13OGp3NSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImUxZDIxNmE5LWFiYTctNDhiMi04NzVhLTRkNzZiNWE3ODE4YSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDprdWJlcm5ldGVzLWRhc2hib2FyZCJ9.rpGVx9Ue8cwksF37Ypw0yP2rJzY6An8vc8uWQ4MiHh351ReTGu9XvOl-xWxzC92CQG3rojjZ96L97EDuD0x2kBZmZornsZG0rBZDmzrqxZ27nY01sTKoSQDOQ7wA8LbrWp7lWuEW6Jd4LywvfNr8nHMDRTAivEqRY3tdgS8qtMlmRPed7Gcu9pavOMMTkFCAmpMNDlnMomUufqQ3ISMiIiwWs-vJ8HWgDYsjhKcs-JwgMiXPUk1HRxan55UHi5AajW_fCBp_tvv3XnJMNUMuFkv8hnNj7LAPm5tZC6YQ5uoPv1F_N2DITKywSC2R3ioFQIyAmbcMHzC5vYdOjkxvMA
### 如上:即为安装 DashBoard时候得到的 Toekn,下面就用这个令牌直接去登录的看看....
白瞎了!登录是没有问题,但是不能正常的使用,是个什么情况?原来是权限不够。。。
解决方法: 权限不够,那就进行权限提升 提权: 直接这个 SA 账号一个泼天的富贵,直接绑定到集群管理员的角色,一个大大的权限!!!
### 提权操作如下
1、找到对应的 clusterrole 角色
[root@node50 ~]# kubectl get sa -n kubernetes-dashboard
NAME SECRETS AGE
default 1 16m
kubernetes-dashboard 1 16m
[root@node50 ~]# kubectl -n kubernetes-dashboard get clusterrole | grep -v system
NAME CREATED AT
admin 2024-09-18T02:54:22Z
calico-kube-controllers 2024-09-18T02:55:48Z
calico-node 2024-09-18T02:55:48Z
cluster-admin 2024-09-18T02:54:22Z
edit 2024-09-18T02:54:22Z
kubeadm:get-nodes 2024-09-18T02:54:23Z
kubernetes-dashboard 2024-09-18T03:09:02Z
view 2024-09-18T02:54:22Z
2、查看 kubernetes-dashboard 绑定的 clusterrole 角色权限
[root@node50 ~]# kubectl -n kubernetes-dashboard describe clusterrole kubernetes-dashboard
Name: kubernetes-dashboard
Labels: k8s-app=kubernetes-dashboard
Annotations: <none>
PolicyRule:
Resources Non-Resource URLs Resource Names Verbs
--------- ----------------- -------------- -----
nodes.metrics.k8s.io [] [] [get list watch]
pods.metrics.k8s.io [] [] [get list watch]
3、查看 cluster-admin 绑定的 clusterrole 角色权限
[root@node50 ~]# kubectl -n kubernetes-dashboard describe clusterrole cluster-admin
Name: cluster-admin
Labels: kubernetes.io/bootstrapping=rbac-defaults
Annotations: rbac.authorization.kubernetes.io/autoupdate: true
PolicyRule:
Resources Non-Resource URLs Resource Names Verbs
--------- ----------------- -------------- -----
*.* [] [] [*]
[*] [] [*]
4、绑定 cluster-admin 的 clusterrole 到 cluster-admin 角色
[root@node50 ~]# kubectl create clusterrolebinding kubernetes-dashboard-cluster-admin --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:kubernetes-dashboard
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard-cluster-admin created
5、 查看绑定后的集群角色
[root@node50 ~]# kubectl get clusterrolebindings -o wide | grep -v system | grep dashboard
kubernetes-dashboard ClusterRole/kubernetes-dashboard 18m kubernetes-dashboard/kubernetes-dashboard
kubernetes-dashboard-cluster-admin ClusterRole/cluster-admin 6m59s kubernetes-dashboard/kubernetes-dashboard
6、查看绑定后关联的角色对象
[root@node50 ~]# kubectl describe clusterrolebindings kubernetes-dashboard-cluster-admin
Name: kubernetes-dashboard-cluster-admin
Labels: <none>
Annotations: <none>
Role:
Kind: ClusterRole
Name: cluster-admin
Subjects:
Kind Name Namespace
---- ---- ---------
ServiceAccount kubernetes-dashboard kubernetes-dashboard
再次使用刚才的 Token 验证,登录成功,各种操作权限也具备了
5.1.2、创建新的 SA 账户得到新的 Token 令牌
总有那么一些人,就是不喜欢用别人的东西,比方说别人的 SA ,别人的 Token ,没毛病!那我们就创建新的 SA ,得到新的 Token
1、创建新的 SA 账户
[root@node50 ~]# kubectl create serviceaccount dashboard-k8s -n kubernetes-dashboard
serviceaccount/dashboard-k8s created
2、把新的 SA 账号进行绑定
[root@node50 ~]# kubectl create clusterrolebinding k8s-dashboard --clusterrole=admin --serviceaccount=kubernetes-dashboard:dashboard-k8s
clusterrolebinding.rbac.authorization.k8s.io/k8s-dashboard created
3、查看新 SA 产生的 Secret 信息
[root@node50 ~]# kubectl get secret -n kubernetes-dashboard | grep dashboard-k8s
dashboard-k8s-token-lkqjt kubernetes.io/service-account-token 3 67s
4、根据 Secret 查询 Token 令牌
[root@node50 ~]# kubectl describe secret -n kubernetes-dashboard dashboard-k8s-token-lkqjt
Name: dashboard-k8s-token-lkqjt
Namespace: kubernetes-dashboard
Labels: <none>
Annotations: kubernetes.io/service-account.name: dashboard-k8s
kubernetes.io/service-account.uid: 0f64422c-04df-4f3c-90aa-0bb463adc162
Type: kubernetes.io/service-account-token
Data
====
ca.crt: 1066 bytes
namespace: 20 bytes
token: eyJhbGciOiJSUzI1NiIsImtpZCI6ImlKNGlqOUxQcUlZNGl5c0haMm95Nm13MnlnNWFTN3Z6NW5qa3RZa0xOWlkifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtazhzLXRva2VuLWxrcWp0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImRhc2hib2FyZC1rOHMiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiIwZjY0NDIyYy0wNGRmLTRmM2MtOTBhYS0wYmI0NjNhZGMxNjIiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6ZGFzaGJvYXJkLWs4cyJ9.kfri86Q0GXdAThbbqPupmgCkyO1fUF4oqGG6OwkdS1Dk7nleLsJ0jhi7jCVbB74J1yQgI8foc-R6pB1yolp5IXA12Bc1ul-e8M2HswK-Pwe2K5aWeehOgTyIj4amCkwffPYkoPy1hMkoLjy0rjkXqZyiv4dqywFuF1B47Sjq0LjZyY3T16YPDAX-FnJs2qQ_k7i9cY-ZPKnqntzt3aF69uH9US3LccZYrgmwIRNE7K8wQdUqizUZb4B7VAn71m_VKiUujnz6g026xe5ShE9iOz8NRoJmSDBBFA55iWPMTyKuQDDHR1ruUXtyYSNZMWN-fi2uAq1WrzI_UBPSW7VALw
使用新 SA 账号的 Token 进行登录验证,发现登录依然是欧拉
5.2、Kubeconfig 文件登录方式
说是文件导入的方式,其实一点也不稀奇,就是把 SA 账号的 Token 封装到一个 Kubeconfig 文件中
5.2.1、直接使用前面 提权过的 SA 账号
1、查看 SA 账户及其 Secret 信息
[root@node50 ~]# kubectl get sa -n kubernetes-dashboard
NAME SECRETS AGE
default 1 16m
kubernetes-dashboard 1 16m
[root@node50 ~]# kubectl get secret -n kubernetes-dashboard
NAME TYPE DATA AGE
default-token-v9d4h kubernetes.io/service-account-token 3 12m
kubernetes-dashboard-certs Opaque 0 12m
kubernetes-dashboard-csrf Opaque 1 12m
kubernetes-dashboard-key-holder Opaque 2 12m
kubernetes-dashboard-token-w8jw5 kubernetes.io/service-account-token 3 12m
2、得到 SA 的 Token 信息并设为系统变量,方便后面使用
[root@node50 ~]# DASH_TOKEN=$(kubectl -n kubernetes-dashboard get secret kubernetes-dashboard-token-w8jw5 -o jsonpath={.data.token} | base64 -d)
[root@node50 ~]# echo $DASH_TOKEN
eyJhbGciOiJSUzI1NiIsImtpZCI6ImlKNGlqOUxQcUlZNGl5c0haMm95Nm13MnlnNWFTN3Z6NW5qa3RZa0xOWlkifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC10b2tlbi13OGp3NSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImUxZDIxNmE5LWFiYTctNDhiMi04NzVhLTRkNzZiNWE3ODE4YSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDprdWJlcm5ldGVzLWRhc2hib2FyZCJ9.rpGVx9Ue8cwksF37Ypw0yP2rJzY6An8vc8uWQ4MiHh351ReTGu9XvOl-xWxzC92CQG3rojjZ96L97EDuD0x2kBZmZornsZG0rBZDmzrqxZ27nY01sTKoSQDOQ7wA8LbrWp7lWuEW6Jd4LywvfNr8nHMDRTAivEqRY3tdgS8qtMlmRPed7Gcu9pavOMMTkFCAmpMNDlnMomUufqQ3ISMiIiwWs-vJ8HWgDYsjhKcs-JwgMiXPUk1HRxan55UHi5AajW_fCBp_tvv3XnJMNUMuFkv8hnNj7LAPm5tZC6YQ5uoPv1F_N2DITKywSC2R3ioFQIyAmbcMHzC5vYdOjkxvMA
3、设置一个集群条目
[root@node50 ~]# kubectl config set-cluster kubernetes --certificate-authority=/etc/kubernetes/pki/ca.crt --embed-certs=true --server=https://192.168.10.50:6443 --kubeconfig=/root/dash.config
Cluster "kubernetes" set.
4、设置一个用户条目
[root@node50 ~]# kubectl config set-credentials kubernetes-dashboard --token=${DASH_TOKEN} --kubeconfig=/root/dash.config
User "kubernetes-dashboard" set.
5、设置一个上下文条目
[root@node50 ~]# kubectl config set-context kubernetes-dashboard@kubernetes --cluster=kubernetes --user=kubernetes-dashboard --kubeconfig=/root/dash.config
Context "kubernetes-dashboard@kubernetes" created.
6、使用kubeconfig文件中的上下文
[root@node50 ~]# kubectl config use-context kubernetes-dashboard@kubernetes --kubeconfig=/root/dash.config
### 说明: 生成的 Kubeconfig 的这个文件,其文件格式和后缀名没有具体的限制和约束
将 dash.config 文件导出,并登录 Dashboard 面板验证,也是正常登录成功的
5.2.2、创建新的 SA 账号进行封装
1、创建新的 SA 账户
[root@node50 ~]# kubectl -n kubernetes-dashboard create serviceaccount dashboard-admin
serviceaccount/dashboard-admin created
2、把新的 SA 账号进行绑定
[root@node50 ~]# kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:dashboard-admin
clusterrolebinding.rbac.authorization.k8s.io/dashboard-admin created
3、查看新 SA 产生的 Secret 信息
[root@node50 ~]# kubectl -n kubernetes-dashboard get secret | grep dashboard-admin
dashboard-admin-token-mll8p kubernetes.io/service-account-token 3 3m20s
4、根据 Secret 查询 Token 令牌,并设置为系统变量
[root@node50 ~]# DASH_TOKEN=$(kubectl -n kubernetes-dashboard get secret dashboard-admin-token-mll8p -o jsonpath={.data.token} | base64 -d)
[root@node50 ~]# echo $DASH_TOKEN
eyJhbGciOiJSUzI1NiIsImtpZCI6ImlKNGlqOUxQcUlZNGl5c0haMm95Nm13MnlnNWFTN3Z6NW5qa3RZa0xOWlkifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tbWxsOHAiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiZDQ0MWUzZDUtMjEzMy00NTI0LTgzZjYtNjAyYWU3ZThlOTE2Iiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmVybmV0ZXMtZGFzaGJvYXJkOmRhc2hib2FyZC1hZG1pbiJ9.uOkO0CMdfalMBatSJvmNO01SIRTB_ZfMnptHhhL1dJuqVZz5XiyzPKE8HjFUdNaejd6khiPYShpfPbqISgXvCbAcgDGWk4f1bafyqiWg5cBYKUwidlun60sLOryUs1gUdMLkkUVtd3N1MbOYmyJT4J-i1gvBVQvQcOpC4KkTq6wnqRdrq1odWuLz2NsgHv79iWdsXlmDL6jDi1HLBDWaqzgl99I_hTzuV7SfoUGoQolNxyuhcfsZYgKzcaYbSsMDMYueBQe9SKn4N7MMQ39Lx36c0j6MXtgTPfBLHEtWH87a8Ai0aQyb_wKQDenQPksqK3CRhZ9bRPbRz7WpFBtjxQ
5、 同上,最终得到一个 Kube'config 文件
[root@node50 ~]# kubectl config set-cluster dashboard-k8s --certificate-authority=/etc/kubernetes/pki/ca.crt --embed-certs=true --server=https://192.168.10.50:6443 --kubeconfig=/root/dash.config
Cluster "dashboard-k8s" set.
[root@node50 ~]# kubectl config set-credentials dashboard-admin --token=${DASH_TOKEN} --kubeconfig=/root/dash.config
User "dashboard-admin" set.
[root@node50 ~]# kubectl config set-context dashboard-admin@dashboard-k8s --cluster=dashboard-k8s --user=dashboard-admin --kubeconfig=/root/dash.config
Context "dashboard-admin@dashboard-k8s" created.
[root@node50 ~]# kubectl config use-context dashboard-admin@dashboard-k8s --kubeconfig=/root/dash.config
Switched to context "dashboard-admin@dashboard-k8s"
# 最后测试,登录成功,使用也是具有各种权限
5.3、账号和密码登录方式 (未验证)
鉴于笔者的集群版本是1.20,不支持此种登录的方式,没法进行相关的验证测试
虽然不知晓目前还有没有低于1.19版本的K8S集群在运行,为此还是将相关的操作步骤罗列在下面
1、定义一个存放账号和密码的文件(注意存放的路径)
[root@node50 ~]# echo "admin,admin&k8s,1" > /etc/kubernetes/pki/basic_auth_file
说明: admin: 账号 、admin&k8s: 密码 、1: 账号的ID
2、备份一下 kube-apiserver.yaml 文件
[root@node50 ~]# cp /etc/kubernetes/manifests/kube-apiserver.yaml /etc/kubernetes/manifests/kube-apiserver.yaml.back
3、编辑 kube-apiserver.yaml 文件
[root@node50 manifests]# grep -A 5 "command" kube-apiserver.yaml
- command:
- kube-apiserver
- --advertise-address=192.168.10.50
- --allow-privileged=true
- --authorization-mode=Node,RBAC
- --client-ca-file=/etc/kubernetes/pki/ca.crt
### 在 “kube-apiserver” 下面增加此行内容: - --basic-auth-file=/etc/kubernetes/pki/basic_auth_file
# 保存退出后 kube-apiserver 会自动重启(大约10s左右,无需 kubectl apply -f ***)
4、查看 kube-apiserver 是否重启
[root@node50 manifests]# kubectl get pod -n kube-system
5、将 admin 与集群角色进行绑定
[root@node50 ~]# kubectl create clusterrolebinding login-on-dashboard-with-cluster-admin --clusterrole=cluster-admin --user=admin
6、查看集群绑定信息
[root@node50 ~]# kubectl get clusterrolebinding login-on-dashboard-with-cluster-admin
NAME AGE
login-on-dashboard-with-cluster-admin 13s
7、修改recommended.yaml文件
[root@node50 ~]# cp /root/recommended.yaml /root/recommended.yaml.bak
[root@node50 ~]# grep -A 7 "v2.4.0" recommended.yaml
image: kubernetesui/dashboard:v2.4.0
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8443
protocol: TCP
args:
- --auto-generate-certificates
- --namespace=kubernetes-dashboard
### 在 args 下面增加此行的内容: - --authentication-mode=basic
8、更新下 Dashboard
[root@node50 ~]# kubectl apply -f recommended.yaml
六、更改Dashboard 的TTL值
Dashboard 默认登录令牌有效期为900秒,即15分钟后自动退出,需要重新登录认证。为延长登录时间,通过修改Dashboard 的 Yaml 部署文件,设置更长的有效期。
6.1、第一种方法
[root@node50 ~]# grep -A 7 "v2.4.0" recommended.yaml
image: kubernetesui/dashboard:v2.4.0
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8443
protocol: TCP
args:
- --auto-generate-certificates
- --namespace=kubernetes-dashboard
## 在 args下面加上一行: - --token-ttl=43200( 即12小时 )
[root@node50 ~]# kubectl apply -f recommended.yaml
6.2、第二种方法
安装 Dashboard 的目的就是让操作变得更简单,可以直接在 Dashboard 里面,对自己的 YAML文件进行更改
操作流程:“Deployment” --- “kubernetes-dashboard” --- “编辑” --- “YAML” --- 添加一行 “- --token-ttl=43200” --- “更新”
标签:kubectl,入门,kubernetes,--,dashboard,K8S,root,node50,Dashboard From: https://blog.51cto.com/liangww/12058264