Kubernets安装dashboard报错怎么解决
更新:HHH   时间:2023-1-7


总算在成功的部署了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了。


返回云计算教程...