基于kubernetes v1.17部署dashboard:v2.0-beta8
参考文章:
https://www.jianshu.com/p/60a1d6db9f12
https://www.jianshu.com/p/c6d560d12d50
一、前言
Dashboard 是基于网页的 Kubernetes 用户界面。您可以使用 Dashboard 将容器应用部署到 Kubernetes 集群中,也可以对容器应用排错,还能管理集群资源。您可以使用 Dashboard 获取运行在集群中的应用的概览信息,也可以创建或者修改 Kubernetes 资源(如 Deployment,Job,DaemonSet 等等)。例如,您可以对 Deployment 实现弹性伸缩、发起滚动升级、重启 Pod 或者使用向导创建新的应用。
在部署完kubernetes v1.17后,让我们来部署一下dashboard,然后通过图形化界面来对资源进行查看与管理。
二、安装
环境信息
操作系统:CentOS Linux release 7.6.1810 (Core)
docker:19.03.5
kubernetes:v1.17.0
主机名和ip:
hostname | ip |
master01 |
192.168.1.230 |
node01 |
192.168.1.241 |
node02 |
192.168.1.242 |
部署GitHub上目前最新版本的dashboard v2.0.0-beta8
https://github.com/kubernetes/dashboard/releases
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml
修改service通过NodePort方式访问k8s dashboard:
由于默认的service类型是ClusterIP,我们是自建的kubernetes,无法自动分配ip给service,所以这里我们需要修改一下dashboard的service类型,指定为NodePort以方便我们访问。
--- kind: Service apiVersion: v1 metadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard namespace: kubernetes-dashboard spec: type: NodePort #新加此行 ports: - port: 443 nodePort: 30001 #新加此行
targetPort: 8443 selector: k8s-app: kubernetes-dashboard
应用配置文件
kubectl apply -f recommended.yaml
之后指定namespace查看pod和service
通过节点ip以及service的端口30001访问dashboard页面
注意:在没有设置证书的情况下,通过Chrome和ie内核是无法访问这个页面的,我们这里就先使用火狐来继续实验,后面补充通过更新证书来解决此问题。
火狐浏览器:
我们还需要创建一个dashboard用户来登录
创建一个yaml文件,内容如下
[root@master01 ~]# cat create-admin.yaml apiVersion: v1 kind: ServiceAccount metadata: name: admin-user namespace: kubernetes-dashboard --- 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
应用配置文件创建用户
获取到用户的token以用作登录
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')
登录dashboard
成功登录后的界面
三、使用dashboard
在学习完kubernetes的基础后,再来看dashboard,就会对整体架构有更清晰的认识。
在Dashboard中,我们通过kubectl所做的操作大部分都可以可视化操作,比如我们可以对deployment做伸缩:
执行命令以及日志追踪
还可以编辑资源的yaml文件,以及导入yaml文件创建 更新资源
补充:
1、解决Chrome、ie无法正常访问dashboard问题
问题:通过Chrome和ie无法正常访问dashboard
原因是默认证书是0001年1月签发的已经过期
解决思路:生成有效证书替换之前的证书
生成证书
下面是生成 k8s dashboard 域名证书方法,任何一种都可以
- 通过
https://freessl.cn
网站,在线生成免费1年
的证书 - 通过
Let’s Encrypt
生成90天
免费证书 - 通过
Cert-Manager
服务来生成和管理证书
#我是在家目录创建的目录
mkdir certs
cd certs
#生成私钥
openssl genrsa -out dashboard.key 2048
#生成csr证书签名请求
openssl req -new -out dashboard.csr -key dashboard.key -subj '/CN=192.168.1.241'
#生成自签名的ssl证书
openssl x509 -req -days 365 -in dashboard.csr -signkey dashboard.key -out dashboard.crt
重新创建dashboard
kubectl delete -f create-admin.yaml
kubectl delete -f recommended.yaml
手工创建namespace
kubectl create namespace kubernetes-dashboard
创建证书存放目录
mkdir $HOME/certs
手工生成secret;后面会将recommend配置中关于certs部分注释掉
kubectl create secret generic kubernetes-dashboard-certs --from-file=$HOME/certs -n kubernetes-dashboard
修改 deployment 配置,具体修改见下面配置
$ vim recommended.yaml # 把创建 kubernetes-dashboard-certs Secret 注释掉,前面已通过命令创建 #apiVersion: v1 #kind: Secret #metadata: # labels: # k8s-app: kubernetes-dashboard # name: kubernetes-dashboard-certs # namespace: kubernetes-dashboard #type: Opaque # 添加ssl证书路径,关闭自动更新证书,添加多长时间登出 containers: - args: #- --auto-generate-certificates - --tls-cert-file=/tls.crt - --tls-key-file=/tls.key - --token-ttl=3600
部署 k8s dashboard
kubectl apply -f recommended.yaml
再次通过Chrome或ie访问,即可正常。
记得还需要重新创建用户