首页 > 其他分享 >K8S入门学习(四):集群编排工具之 Dashboard

K8S入门学习(四):集群编排工具之 Dashboard

时间:2024-09-19 18:21:47浏览次数:14  
标签:kubectl 入门 kubernetes -- dashboard K8S root node50 Dashboard

一、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、谷歌浏览器登录情况

D24.png

4.1.2、火狐浏览器登录情况

D23.png

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、刷新后的登录界面

D25.png

   

五、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,下面就用这个令牌直接去登录的看看....  

D01.png

白瞎了!登录是没有问题,但是不能正常的使用,是个什么情况?原来是权限不够。。。

解决方法: 权限不够,那就进行权限提升 提权: 直接这个 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 验证,登录成功,各种操作权限也具备了

D02.png

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 进行登录验证,发现登录依然是欧拉

D02.png

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 面板验证,也是正常登录成功的

D04.png

D02.png

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” --- “更新”

D50.png

D51.png

标签:kubectl,入门,kubernetes,--,dashboard,K8S,root,node50,Dashboard
From: https://blog.51cto.com/liangww/12058264

相关文章

  • Java Quartz Scheduler 入门:从“Hello, Quartz!”到深入探索
    ......
  • k8s规范
    为了更全面地提升Kubernetes集群的效率、安全性、可维护性,以下是更为详尽的Kubernetes使用规范,涵盖架构设计、监控、扩展、安全性等多个维度的最佳实践。 1.架构设计规范1.1多环境隔离开发、测试、生产环境分离:为不同环境使用不同的命名空间或集群,确保开发环境的错误不......
  • MySQL零基础入门教程-1 mysql安装卸载、启动关闭、常用命令、sql语句分类(非常详细),基础
    教程来源:B站视频BV1Vy4y1z7EX001-数据库概述_哔哩哔哩_bilibili我自己听讲收集整理的课程的完整笔记,供大家学习交流吧:夸克网盘分享本文内容为完整笔记的第一篇一、数据库概述1、什么是数据库?什么是数据库管理系统?什么是SQL?他们之间的关系是什么?P1、P2数据库英文单词DataBase,简称DB,......
  • LLMChat入门指南 - 基于Flutter和FastAPI的大语言模型聊天应用
    LLMChat-您的AI聊天助手......
  • 2024 Python3.10 系统入门+进阶(十五):文件及目录操作
    目录一、文件IO操作1.1创建或打开文件1.2读取文件1.2.1按行读取1.2.2多行读取1.2.3完整读取1.3写入文件1.3.1写入字符串1.3.2写入序列1.4上下文管理1.4.1with语句的使用1.4.2上下文管理器(拓展----可以学了面向对象之后再回来看)1.5文件的遍历二、os.pat......
  • Linux 基础入门操作 第九章 进程之间通讯信号量
    systemV的进程间通信之信号量9.3信号量信号量与其他进程间通信方式不大相同,它主要提供对进程间共享资源访问控制机制。相当于内存中的标志,进程可以根据它判定是否能够访问某些共享资源,同时,进程也可以修改该标志。除了用于访问控制外,还可用于进程同步。信号量有以下两......
  • SciTech-Mathmatics-LaTex: LaTeX:从入门到日常使用
    LaTeX:从入门到日常使用发表于2022-02-05|更新于2022-03-20|教程|字数总计:3.6k|阅读时长:12分钟|阅读量:前言:排版工具与书写工具的讨论LaTeX是一种“非所见即所得”的排版系统,用户需要输入特定的代码,保存在后缀为.tex的文件中,通过编译得到所需的pdf文件,例如以下代码:$......
  • 快速入门 vector 容器
    如果一个类存在的意义是为了保存对象,那么就称它为容器(container)。换句话说,容器是用来保存一堆指定类型对象的集合。构建程序的重要步骤就是选择一个合适的容器来保存处理任务的数据(该容器本身也能提供一些用于处理数据的有用方法)。vector是最有用的容器,它其实就是一个动......
  • 云计算-k8s上使用定时任务配置elatiscdump和mysqldump
    现在很多中间件都是容器化部署到k8s平台上,例如elasticsearch和mysql。一般的商业产品k8s都有针对这些中间的备份功能,但是如果我们要对这些容器的化的中间件导出数据进行备份,可以采用k8s的定时任务来执行elasticdump定时任务elasitcdump是一款开源的ES数据迁移工具,国内码云地址 h......
  • [Python]案例驱动最佳入门:Python数据可视化在气候研究中的应用
    在全球气候问题日益受到关注的今天,气温变化成为了科学家、政府、公众讨论的热门话题。然而,全球气温究竟是如何变化的?我们能通过数据洞察到哪些趋势?本文将通过真实模拟的气温数据,结合Python数据分析和可视化技术,带你深入了解全球气温的变化趋势,并揭示气候变化背后的奥秘。1.......