在上一篇文章中,已经完成了K8s集群的搭建,现在再加上一个可视化的webUI来进行管理和方便查看。
这里选择kubernetes/dashboard 通过官方的配置可以一键部署。

安装

访问下载页面: https://github.com/kubernetes/dashboard/releases
选择自己K8s集群的兼容版本,进行安装

执行安装命令

1
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml

查看启动状态

1
kubectl get pods -n=kubernetes-dashboard -o wide

都为Running状态就可以了

1
2
3
NAME                                         READY   STATUS    RESTARTS   AGE     IP            NODE       NOMINATED NODE   READINESS GATES
dashboard-metrics-scraper-7c857855d9-r6wh7 1/1 Running 0 4m31s 10.98.90.18 k8snode1 <none> <none>
kubernetes-dashboard-658b66597c-6rrzs 1/1 Running 0 4m31s 10.98.90.17 k8snode1 <none> <none>

官方说明上的API访问方式 需要本地配置config,并开启kubectl proxy,比较麻烦

我们可以直接修改kubernetes-dashboard service的Type属性
将里面的type: ClusterIP改为type: NodePort

1
kubectl edit service kubernetes-dashboard -n=kubernetes-dashboard

:wq 保存退出即可

等待更新完成之后,查看端口

1
kubectl get service kubernetes-dashboard -n=kubernetes-dashboard
1
2
NAME                   TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)         AGE
kubernetes-dashboard NodePort 10.99.117.158 <none> 443:32576/TCP 19s

打开游览器 输入IP:32576,访问成功,但是会有https证书警告。

重新生成证书

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#Step 1: 新建目录:
mkdir key && cd key

#Step 2: 生成 SSL 证书
openssl genrsa -out dashboard.key 2048

#Step 3: 我这里写的自己的 node1 节点,因为我是通过 nodeport 访问的
openssl req -new -out dashboard.csr -key dashboard.key -subj '/CN=192.168.31.190'
openssl x509 -req -in dashboard.csr -signkey dashboard.key -out dashboard.crt

#Step 4: 删除原有的证书 secret
kubectl delete secret kubernetes-dashboard-certs -n kubernetes-dashboard

#Step 5: 创建新的证书 secret
kubectl create secret generic kubernetes-dashboard-certs --from-file=dashboard.key --from-file=dashboard.crt -n kubernetes-dashboard

#Step 6: 查看 pod
kubectl get pod -n kubernetes-dashboard

#Step 7: 重启 pod
kubectl delete pod kubernetes-dashboard-7b5bf5d559-gn4ls -n kubernetes-dashboard

创建认证Token


创建用户配置

1
2
3
4
5
6
7
cat >> admin-user.yaml << EOF
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
EOF

创建角色绑定关系配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
cat >> admin-user.yaml << EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
EOF

然后依次执行

1
2
kubectl create -f admin-user.yaml
kubectl create -f admin-user-role-binding.yaml

获取Token

获取Token命令如下,执行之后会输出token。可以看到是JWT形式的

1
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')

token方式登录

将Token复制到控制台,登录即可。不过默认的过期时间是15分钟。太短了不太方便。可以在容器加入参数配置,指定过期时效(单位:秒)
- --token-ttl=864000 我这里直接设置了10天(不过为了安全,不建议设置这么久)

1
kubectl edit deployment kubernetes-dashboard -n=kubernetes-dashboard


至此整个部署就完成了!!!

参考资源