终于不用敲命令了——Kubernetes之Dashboard部署与使用详解
2021-03-10 06:30
YPE html>
标签:fss server github utc pac etcd 增加 and beijing
终于不用敲命令了——Kubernetes之Dashboard部署前言
? 前面的几篇文章带着大家体验和部署了一下基于二进制方式部署Kubernetes高可用集群的流程,本文将通过部署Kubernetes的web界面来给大家体验一下使用ui界面管理、监控、使用k8s集群的魅力。
先把节点ip地址介绍一下,以免待会测试验证的时候无法叙说清楚
master01:192.168.0.128
master02:192.168.0.131
node01:192.168.0.129
node02:192.168.0.130
两台作为负载均衡的LB服务器就暂时不写了,因为本文可以不考虑这个层面。
Kubernetes的Dashboard部署流程
我们在master01节点上部署该web ui界面。
首先在k8s工作目录中创建一个Dashboard的工作目录
[root@master01 k8s]# mkdir dashboard
[root@master01 k8s]# cd dashboard/
#下载构建该界面的核心文件,资源地址:(https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/dashboard)
#一共是下载了5个yaml文件,待会会一边使用一边介绍各个文件的作用和核心参数配置
#下面会有6个,其中一个(k8s-admin.yaml是自己写的,是用来做待会在浏览器中登录时的令牌的)
[root@master01 dashboard]# ls
dashboard-configmap.yaml dashboard-rbac.yaml dashboard-service.yaml
dashboard-controller.yaml dashboard-secret.yaml k8s-admin.yaml
先大体上按照待会执行的顺序来讲一下每个文件的作用吧
1、dashboard-rbac.yaml :用于访问控制设置,配置各种角色的访问控制权限及角色绑定(绑定角色和服务账户),内容中包含对应各种角色所配置的规则(rules)
2、dashboard-secret.yaml:提供令牌,访问API服务器所用(个人理解为一种安全认证机制)
3、dashboard-configmap.yaml :配置文件,负责设置Dashboard的文件
4、dashboard-controller.yaml:负责控制器及服务账户的创建
5、dashboard-service.yaml:负责将容器中的服务提供出去
通过kubectl create 命令创建resources,对照中文件来理解笔者下面的解释
1、规定kubernetes-dashboard-minimal该角色的权限:例如其中具备获取更新删除等不同的权限
[root@master01 dashboard]# kubectl create -f dashboard-rbac.yaml
role.rbac.authorization.k8s.io/kubernetes-dashboard-minimal created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard-minimal created
有几个kind就会有几个结果被创建,格式为kind+apiServer/name
2、证书和密钥创建
[root@master01 dashboard]# kubectl create -f dashboard-secret.yaml
secret/kubernetes-dashboard-certs created
secret/kubernetes-dashboard-key-holder created
3、配置文件,对于集群dashboard设置的创建
[root@master01 dashboard]# kubectl create -f dashboard-configmap.yaml
configmap/kubernetes-dashboard-settings created
4、创建容器需要的控制器以及服务账户
[root@master01 dashboard]# kubectl create -f dashboard-controller.yaml
serviceaccount/kubernetes-dashboard created
deployment.apps/kubernetes-dashboard created
5、将服务提供出去
[root@master01 dashboard]# kubectl create -f dashboard-service.yaml
service/kubernetes-dashboard created
2、查看创建dashboard状态
[root@master01 dashboard]# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
kubernetes-dashboard-65f974f565-5vgq9 1/1 Running 0 61s
状态是running,表示创建成功了【-n kube-system表示指定查看命名空间中的pod】
3、查看服务分配的端口等信息
[root@master01 dashboard]# kubectl get svc -n kube-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes-dashboard NodePort 10.0.0.212 443:30001/TCP 2m31s
这个10.0.0.212是内部访问的地址,本文所讲内容对此可以暂时不需要过多理解。
PS:此处的svc是service的简写,可以通过下面的命令查看有哪些命令参数可以简写
[root@master01 dashboard]# kubectl api-resources
#内容较多可以自己尝试验证一下
4、测试访问web ui 界面地址(结合映射的端口号)
首先通过下面的命令查看分配的节点服务器(之前的文章中也使用过就不多解释了)
[root@master01 dashboard]# kubectl get pods,svc -n kube-system -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
pod/kubernetes-dashboard-65f974f565-5vgq9 1/1 Running 0 12m 172.17.70.3 192.168.0.130
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
service/kubernetes-dashboard NodePort 10.0.0.212 443:30001/TCP 12m k8s-app=kubernetes-dashboard
从执行的结果来看,是分配给了node02服务器,访问的入口是30001端口,那么就打开浏览器来进行访问测试,结果和原因分析如下图所示(需要点击“隐藏详情”位置的“高级”控件才能看到详情信息)
5、解决加密通信问题
因此,我们需要为此次构建来写对应的认证证书。这里笔者使用的shell脚本来快速生成证书文件
脚本(脚本名称为dashboard-cert.sh)内容如下,关于证书的构建我们在前面单节点部署etcd集群以及安装apiserver组件时讲述过了,这里就不赘述了。
cat > dashboard-csr.json
另外,此时需要先对dashboard-controller.yaml文件进行修改
#dashboard-controller.yaml 增加证书两行,然后apply
# args:
# # PLATFORM-SPECIFIC ARGS HERE
# - --auto-generate-certificates
# 下面是增加的两行,指定加密(tls)的秘钥和证书文件(在文件的第47行位置)就是下面执行脚本后生成的两个证书文件
# - --tls-key-file=dashboard-key.pem
# - --tls-cert-file=dashboard.pem
执行脚本,别忘了加上位置变量
#先看一下证书目录下的文件
[root@master01 dashboard]# ls /root/k8s/k8s-cert/
admin.csr admin.pem ca-csr.json k8s-cert.sh kube-proxy-key.pem server-csr.json
admin-csr.json ca-config.json ca-key.pem kube-proxy.csr kube-proxy.pem server-key.pem
admin-key.pem ca.csr ca.pem kube-proxy-csr.json server.csr server.pem
#执行刚刚写的脚本
[root@master01 dashboard]# bash dashboard-cert.sh /root/k8s/k8s-cert/
2020/05/07 23:51:08 [INFO] generate received request
2020/05/07 23:51:08 [INFO] received CSR
2020/05/07 23:51:08 [INFO] generating key: rsa-2048
2020/05/07 23:51:08 [INFO] encoded CSR
2020/05/07 23:51:08 [INFO] signed certificate with serial number 404952983625314812290291880178217049372359470061
2020/05/07 23:51:08 [WARNING] This certificate lacks a "hosts" field. This makes it unsuitable for
websites. For more information see the Baseline Requirements for the Issuance and Management
of Publicly-Trusted Certificates, v.1.1.6, from the CA/Browser Forum (https://cabforum.org);
specifically, section 10.2.3 ("Information Requirements").
secret "kubernetes-dashboard-certs" deleted
secret/kubernetes-dashboard-certs created
#在该目录下将生成两个证书
[root@master01 dashboard]# find . -name "*.pem"
./dashboard.pem
./dashboard-key.pem
此时需要使用以下命令重新进行部署(可能会更换所分配的节点哦!)
[root@master01 dashboard]# kubectl apply -f dashboard-controller.yaml
Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply
serviceaccount/kubernetes-dashboard configured
Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply
deployment.apps/kubernetes-dashboard configured
这里有个警告: 也就是apply方式更新的资源应该是由kubectl create 加--save-config参数创建的 或 由apply创建的 (apply当资源不存在时会创建),这里可以忽略。
未免出错,这里再次查看一下分配的节点服务器地址和端口号(果然换了)
[root@master01 dashboard]# kubectl get pods,svc -n kube-system -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
pod/kubernetes-dashboard-7dffbccd68-z6xcj 1/1 Running 0 4m57s 172.17.54.2 192.168.0.129
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
service/kubernetes-dashboard NodePort 10.0.0.212 443:30001/TCP 62m k8s-app=kubernetes-dashboard
再次进行访问测试,结果如下
点击后出现下面的对话框
6、解决token令牌问题,最终实现成功访问dashboard界面
? 此时我们先来看一下我们编写的yaml文件吧
vim k8s-admin.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: dashboard-admin
namespace: kube-system
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: dashboard-admin
subjects:
- kind: ServiceAccount
name: dashboard-admin
namespace: kube-system
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
生成令牌操作流程
#基于该文件进行创建
[root@master01 dashboard]# kubectl create -f k8s-admin.yaml
serviceaccount/dashboard-admin created
clusterrolebinding.rbac.authorization.k8s.io/dashboard-admin created
#获取toke简要信息,名称为dashboard-admin-token-rf7x2
[root@master01 dashboard]# kubectl get secret -n kube-system
NAME TYPE DATA AGE
dashboard-admin-token-rf7x2 kubernetes.io/service-account-token 3 25s
default-token-4mkb6 kubernetes.io/service-account-token 3 3d4h
kubernetes-dashboard-certs Opaque 11 29m
kubernetes-dashboard-key-holder Opaque 2 84m
kubernetes-dashboard-token-m8tlw kubernetes.io/service-account-token 3 84m
#查看令牌序列号(详细信息)
[root@master01 dashboard]# kubectl describe secret dashboard-admin-token-rf7x2 -n kube-system
Name: dashboard-admin-token-rf7x2
Namespace: kube-system
Labels:
Annotations: kubernetes.io/service-account.name: dashboard-admin
kubernetes.io/service-account.uid: a31c4464-907e-11ea-9ec8-000c29069704
Type: kubernetes.io/service-account-token
Data
====
ca.crt: 1359 bytes
namespace: 11 bytes
#下面token冒号后面的内容就是我们需要的令牌代码,额有点长
token: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tcmY3eDIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiYTMxYzQ0NjQtOTA3ZS0xMWVhLTllYzgtMDAwYzI5MDY5NzA0Iiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.IuGFrBYgeiY2yhOwmKRe3Khqs43Z197vlokr6dt-ZW1z8g8lwD7nYahb4qZQJrnkN7ibqvSoX4goCBaXI94Jk4RqmPbpnfHq-gt40tnzYBuXRKWup4GAt-b1JpnDv9cQaC20Hb30R3QGqxtbejSEYXZD3IHxVGBWepa59Lals9Xo9J4dRasHSpOHpE279JITayev4AsafBuURtOmAd0jf8DD9tmWzQzQ4i48d7YwR_KeOENi7KNi3zNS0fWFYdtUlHVS_6SAq35ioS3Rrwu1hf4ToOueJXRWRsq-JVGqj8AC4moDsz7vQFNh4tevbZqocRPq1ImFSy4bmRbGO_AMtw
我们将该令牌序列号复制填入到浏览器页面中,点击登录,可以获取到如下界面
我们可以看一下集群中这个资源是否是在运行中
[root@master01 dashboard]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-dbddb74b8-cnhsl 1/1 Running 0 2d4h
看名称就知道确实没有问题。
那么我们就来简单通过这个nginx服务来体验一下这个dashboard是多么方便吧
首先我们点击侧边栏中的“容器组”,点击该容器名称,进入一个页面,点击右上方的“运行命令”或”日志“控件会弹出另一个额外页面
下面是进入这个容器的网页界面和查看日志记录的页面
执行命令——node02节点上访问容器
[root@node02 ~]# curl 172.17.70.2
Welcome to nginx!
Welcome to nginx!
If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.
For online documentation and support please refer to
nginx.org.
Commercial support is available at
nginx.com.
Thank you for using nginx.
[root@node02 ~]#
通过dashboar页面查看日志更新结果
那么此次dashboard部署和体验使用就到此结束了哈!
总结
? 此次主要是对Kubernetes集群中可视化界面dashboard的部署和简单使用体验。相信大家会发现使用可视化界面就非常友好,而且简化了命令的操作。还附带监控等各种服务。
? 而此次的部署我们主要是需要学会了解整个部署dashboard的流程,以及分析问题、然后如何解决所出现的问题。
? 最后,体会一下dashboard页面的简单使用,非常感谢您的阅读!期待您的持续关注!您的关注一定是笔者前行最大的动力!
终于不用敲命令了——Kubernetes之Dashboard部署与使用详解
标签:fss server github utc pac etcd 增加 and beijing
原文地址:https://blog.51cto.com/14557673/2493323
文章标题:终于不用敲命令了——Kubernetes之Dashboard部署与使用详解
文章链接:http://soscw.com/index.php/essay/62643.html