重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
总算在成功的部署了k8s之后,我打算再部署一下k8s的web UI:dashboard.
网上主要的部署方法都是一些IT用yaml文件去生成的dashboard服务。然后所有的文章或多或少的都有点问题,不是步骤不一样了进行不下去了,内容或文件过期,或都就是作者认为某些内容是大家都懂的于是怱略了一些步骤,但是我已经进行不下去了。
首先是拉镜像的问题,dashboard的镜像依旧是在“某个外国知名搜索引擎”服务器上的没法直接拉下来,所以依旧使用从镜像服务器上下载之后再用docker tag命令更改名称的方法来解决问题。
官方的镜像地址是:k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1
我找了一个镜像的地址:mirrorgooglecontainers (下载命令为:docker pull mirrorgooglecontainers/kubernetes-dashboard-amd64:v1.10.1)
接下来是改名
docker tag mirrorgooglecontainers/kubernetes-dashboard-amd64:v1.10.1 k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1 docker rmi mirrorgooglecontainers/kubernetes-dashboard-amd64:v1.10.1
然后有了镜像之后,开启dashboard的pod。网上也有各种yaml文件版本,我试下来最靠谱的是以下文件。将它命名为kubernetes-dashboard.yaml。
kind: Service apiVersion: v1 metadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard namespace: kube-system spec: type: NodePort ports: - port: 443 targetPort: 8443 nodePort: 30001 selector: k8s-app: kubernetes-dashboard
其中30001可以自己改,在k8s允许的范围内内改成自己想要的端口。这个端口是应用于物理机上的而不是pod网络。非k8s集群的集群可以通过这个端口去访问(毕竟还是给浏览器去访问的。)我已开始没改端口,但是没有意识到30001端口已经被其他的服务给占掉了,所以yaml文件运行后没有起到起到什么作用。我在这里选了一个30012端口。
用这个文件来安装dashboard
kubectl create -f kubernetes-dashboard.yaml
接下来是用浏览器登陆,首先找到dashboard是在那个节点上运行的,
kubectl get pods --all-namespaces -o wide | grep dashboard | awk '{print $8}'
然后在浏览器里访问这个node节点。网址要加上https://<节点的ip或域名>:<前面yaml文件中的nodePort的值>。我用的浏览器是chrome,立即显示了“证书不受信任”的页面,而且高级选项里继续选项也没有,就无法访问了。上网查了一下这个问题的解决方法,原因是证书过期了(0001年1月3日开的证书,整整过期2000+年),只有firefox能够添加例外。而真正的解决方法是替换证书。在网上找到最好的方法如下文。
mkdir key && cd key openssl genrsa -out dashboard.key 2048 openssl req -new -out dashboard.csr -key dashboard.key -subj '/CN=172.19.0.48' openssl x509 -req -in dashboard.csr -signkey dashboard.key -out dashboard.crt kubectl delete secret kubernetes-dashboard-certs -n kube-system kubectl create secret generic kubernetes-dashboard-certs --from-file=dashboard.key --from-file=dashboard.crt -n kube-system #新的证书 kubectl delete pod kubernetes-dashboard-746dfd476-b2r5f -n kube-system #重启服务
其中有一些地方要根据实际情况改动,例如第三句的IP地址要改成node节点的,还有最后一句删除pod名字也得改一下。获取的命令为
kubectl get pods --all-namespaces -o wide | grep dashboard | awk '{print $2}'
然后在浏览器里就可以跳过证书受信问题了。接下来的问题是登陆界面,有两种登陆的方式,个人觉得还是token这种方便一点。网上也有高手总结了一下获取token命令的方法。
kubectl -n kube-system describe $(kubectl -n kube-system get secret -n kube-system -o name | grep namespace) | grep token
将获取的token复制到浏览器的界面中,就可以登陆dashboard了。