k8s 安装部署dashboard仪表板
dashboard仪表板一、概述二、安装环境三、获得yaml四、修改yaml文件1、修改dashboard-controller.yaml2、修改dashboard-service.yaml五、部署dashboard1、 创建自签证书2、创建令牌六、验证访问dashboard一、概述Kubernetes仪表板是用于Kubernetes集群的基于web的通用UI。它允许用户管理集群中运行的应用程序、
dashboard仪表板
一、概述
Kubernetes仪表板是用于Kubernetes集群的基于web的通用UI。
它允许用户管理集群中运行的应用程序、故障排除以及管理集群本身
二、安装环境
这里已经用二进制部署好了一套多master的k8s集群
k8s集群master01:192.168.245.211
k8s集群master02:192.168.245.206
k8s集群node01:192.168.245.209
k8s集群node02:192.168.245.210
etcd集群节点1:192.168.245.211
etcd集群节点2:192.168.245.209
etcd集群节点3:192.168.245.210
三、获得yaml
首先进入k8s的github:https://github.com/kubernetes/kubernetes
因为k8s我们安装的版本是1.12.3版本所以到github找到相对应的dashboard版本,复制yaml到本地
注意:高版本的dashboard版本可能会不兼容
或者直接访问:https://github.com/kubernetes/kubernetes/tree/release-1.12/cluster/addons/dashboard
四、修改yaml文件
首先新建一个dashboard目录,用于存放所有dashboard相关文件
[root@master01 ~]# cd k8s/
[root@master01 k8s]# mkdir dashboard
将5个yaml文件上传到虚拟机上
[root@master01 dashboard]# ls
dashboard-controller.yaml dashboard-secret.yaml dashboard-configmap.yaml dashboard-rbac.yaml dashboard-service.yaml
1、修改dashboard-controller.yaml
找到image: k8s.gcr.io/kubernetes-dashboard-amd64:v1.8.3
将镜像改成:siriuszg/kubernetes-dashboard-amd64:v1.8.3
否则镜像拉取会报错,因为k8s.gcr.io是国外的网站,因为某些不可描述的问题镜像拉取不下来的
2、修改dashboard-service.yaml
在dashboard-service.yaml添加如下两行内容
spec:
type: NodePort
selector:
k8s-app: kubernetes-dashboard
ports:
- port: 443
targetPort: 8443
nodePort: 30001
五、部署dashboard
应用5个yaml文件,注意执行的顺序!!!
[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
[root@master01 dashboard]# kubectl create -f dashboard-secret.yaml
secret/kubernetes-dashboard-certs created
secret/kubernetes-dashboard-key-holder created
[root@master01 dashboard]# kubectl create -f dashboard-configmap.yaml
configmap/kubernetes-dashboard-settings created
[root@master01 dashboard]# kubectl create -f dashboard-controller.yaml
serviceaccount/kubernetes-dashboard created
deployment.apps/kubernetes-dashboard created
[root@master01 dashboard]# kubectl create -f dashboard-service.yaml
service/kubernetes-dashboard created
查看该命名空间下的pod,Running表示正常,如果是在指定命名空间下创建的pod查看需要-n [命名空间]
[root@master01 etcd-cert]# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
kubernetes-dashboard-65f974f565-7n8qv 1/1 Running 10 28m
访问网页出现如下界面无法访问,由于是https协议访问的,所以必须需要证书
这里用的谷歌浏览器,用firefox没有这个问题
1、 创建自签证书
创建自签证书,根证书还是用的之前创建k8s集群的那一套,这里写了一个脚本,签发证书,生成dashboard的证书
[root@master01 dashboard]# vim vim dashboard-cert.sh
[root@master01 dashboard]# bash dashboard-cert.sh /root/k8s/k8s-cert/
2020/10/11 14:12:40 [INFO] generate received request
2020/10/11 14:12:40 [INFO] received CSR
2020/10/11 14:12:40 [INFO] generating key: rsa-2048
2020/10/11 14:12:40 [INFO] encoded CSR
2020/10/11 14:12:40 [INFO] signed certificate with serial number 554203672686759515690476517992263359047347411388
2020/10/11 14:12:40 [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
修改yaml添加证书文件
[root@master01 dashboard]# vim dashboard-controller.yaml
args:
# PLATFORM-SPECIFIC ARGS HERE
- --auto-generate-certificates
- --tls-key-file=dashboard-key.pem //添加dashboard私钥
- --tls-cert-file=dashboard.pem //添加dashboard证书
重新应用yaml文件
[root@master01 dashboard]# kubectl apply -f dashboard-controller.yaml
serviceaccount/kubernetes-dashboard unchanged
deployment.apps/kubernetes-dashboard configured
重新查看pod信息,这里可以看到dashboard这次部署在了另外一台节点上
[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-f4rhv 1/1 Running 0 60s 172.17.75.2 192.168.245.210 <none>
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
service/kubernetes-dashboard NodePort 10.0.0.250 <none> 443:30001/TCP 49m k8s-app=kubernetes-dashboard
再次访问网页,因为这个证书是我们自己签发的,谷歌浏览器不认,点击“高级”
点击“继续前往”
2、创建token令牌
点击进入之后出现如下界面,这一步主要是dashboard为了鉴权,什么人登陆进来需要给什么样的权限,实际上就是选择以什么样的方式登录,这里选择令牌
因为每个ServiceAccount都会产生一个secret,所以这里创建一个服务账户叫做dashboard-admin,并进行集群角色的绑定,把这个用户跟集群角色cluter-admin进行绑定,让它拥有cluter-admin的权限,而cluter-admin拥有最高权限
其实这一步的目的就是创建一个账户,让他具有集群管理员的权限登录到dashboard
[root@master01 dashboard]# vim k8s-admin.yaml
应用此yaml文件
[root@master01 dashboard]# kubectl apply -f k8s-admin.yaml
serviceaccount/dashboard-admin created
clusterrolebinding.rbac.authorization.k8s.io/dashboard-admin created
查看令牌,dashboard-admin-token-vbm2k这个就是我们生成的token
[root@master01 dashboard]# kubectl get secret -n kube-system
NAME TYPE DATA AGE
dashboard-admin-token-vbm2k kubernetes.io/service-account-token 3 8s
default-token-x4rjz kubernetes.io/service-account-token 3 11d
kubernetes-dashboard-certs Opaque 10 9m23s
kubernetes-dashboard-key-holder Opaque 2 63m
kubernetes-dashboard-token-svz9c kubernetes.io/service-account-token 3 63m
metrics-server-token-88l8l kubernetes.io/service-account-token 3 2d18h
查看token的详情
[root@master01 dashboard]# kubectl describe secret dashboard-admin-token-vbm2k -n kube-system
回到浏览器
六、验证访问dashboard
成功登陆,出现如下界面,就可以对k8s集群进行管理了
注:如果pod状态不正常,可以使用如下命令查看详细信息进行排错
kubectl describe pod kubernetes-dashboard-7dffbccd68-f4rhv(pod名称) -n kube-system
七、关于ServiceAccount
有人会问,为什么controller.yaml文件里官方已经默认创建好了一个ServiceAccount了为什么鉴权时还需要再创建一个呢?
因为实验发现官方默认给的这个ServiceAccount给的是最小权限
如果用这个token登陆,你会发现虽然登陆进去dashboard了但是基本上能看到的东西很少,所以我们直接创建一个具有管理员权限的账户登陆,便于我们集群的管理和操作
更多推荐
所有评论(0)