kubernetes-Dashboard是一个基于Web UI的kubernetes用户接口。你可以使用它在kubernetes集群中部署、调试容器化的应用,管理集群本身,创建、预览、更新集群中所拥有的资源对象,扩展和滚动更新你的应用。下面就来记录一下我是如何配置安装kuernetes-dashboard的。
kubernetes-dashboard 1.6.x以前和1.7.x的差距比较大,主要增加了一些https的认证。由于我们的集群的版本为1.7.5,下面打算安装kubernetes-dashboard V1.7.1,首先我们需要做的就是下载需要的镜像。
镜像准备
1 |
|
下载对应的yml文件
接下来我们需要一个kubernetes-dashboard.yaml的配置文件,可以直接在dashboard的仓库中的dashboard/src/deploy/recommended文件夹下下载。注意:由于我们这里安装的是kubernetes-dashboard V1.7.1,所以我们需要下载对应版本的kubernetes-dashboard.yaml文件。具体做法是,调整repository的tag至v1.7.1。查看文件的内容:
1 | # Copyright 2015 Google Inc. All Rights Reserved. |
查看上述的文件,可以看到这里需要的两个镜像都已经存在于本地,但是略有不同的是这里需要的kubernetes-dashboard-init-amd64:v1.0.0
,而我们本地有的镜像tag为v1.0.1
,所以我们这里更改一下这个yml文件,将kubernetes-dashboard-init-amd64的tag
从v1.0.0
改为v1.0.1
.
创建相应的资源
初次尝试
1 | $ kc create -f kubernetes-dashboard.yml |
查看kube-system中,kubernetes-dashboard所对应的pod的状态一直是这样的:
1 | NAME READY STATUS RESTARTS AGE |
我们discribe一下这个pod
1 | $ kubectl describe pod kubernetes-dashboard-3554419144-j2qqp -n kube-system |
输出的Event如下:
1 | Events: |
可以看到,initContainer kubernetes-dashboard-init容器全运行正常,kubernetes-dashboard容器运行失败。
接着我们来查看一下logs:
1 | $ kubectl logs kubernetes-dashboard-3554419144-j2qqp -n kube-system |
输出如下:
1 | 2018/04/24 14:41:19 Using in-cluster config to connect to apiserver |
可以看到,这里说没有/certs/dashboard.crt
文件,这个证书文件本应该是在运行init容器时创建的,但是这里不知道为什么我们这里没有创建成功。
下面,我们删除刚才由kubernetes-dashboard.yml
文件所创建的资源,然后采取openssl来创建自签名证书。
1 | $ kubectl delete -f kubenetes-dashboard.yml |
再次尝试
1 | $ openssl req -newkey rsa:4096 -nodes -sha256 -keyout dashboard.key -x509 -days 365 -out dashboard.crt |
依据提示,填写签发者信息:
1 | Generating a 4096 bit RSA private key |
执行完之后,你的命令执行目录就会多出来两个文件
1 | $ ll |
1 | -rw-r--r--. 1 root root 2086 Nov 14 09:59 dashboard.crt |
将这两个文件移动到/certs/
目录之下,然后根据这两个文件使用下面的命令来创建secret,来替换掉kubernetes-dashboard.yml中定义的secret:
1 | $ kubectl create secret generic kubernetes-dashboard-certs --from-file=/certs -n kube-system |
下面,我们再次依据kubernetes-dashboard.yml
来创建dashboard所需要的资源对象:
1 | $ kubectl create -f kubernetes-dashboard.yml |
输出如下:
1 | serviceaccount "kubernetes-dashboard" created |
从输出也可以看出来,其他资源已经创建成功,而kubernetes-dashboard-certs
则被我们成功替换掉了。
下面,我们查看一下dashboard对应的pod的事件:
1 | $ kubectl describe pod kubernetes-dashboard-3554419144-jjj5q -n kube-system |
事件如下:
1 | Events: |
如上,一切正常。我们的kubernetes-dashboard插件就此安装完成。
暴露服务
下面,我们要访问服务器上的kubernetes-dashboard
服务就还需要做下面的一步操作:将kubernetes-dashboard的service变为外部可路由。将service的类型由默认的ClusterIP改为NodePort.
执行下面的命令,更改service的配置文件:
1 | $ kubectl edit service kubernetes-dashboard -n kube-system |
更改完成之后,我们查看服务的暴露的主机端口:
1 | $ kubectl get service kubernetes-dashboard -n kube-system |
输出:
1 | NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE |
如上,服务暴露的主机端口为30087,我们访问https://<主机公网IP>:30087/
即可访问到dashboard服务。注意,这里使用的是HTTPS服务,并且使用的是自签名证书,所以在我们初次进入时,浏览器会因为无法识别证书的签署机构而阻止继续访问,这时我们只需要点击高级选项,标识网站为安全即可。