安装kubernetes dashboard前,默认k8s已经安装成功!需要安装的可以转上一篇查看。
下面开始安装kubernetes dashboard:
1、在Master节点上面执行
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
2、查看dashboard Pod节点运行情况
kubectl get pod -n kube-system
注意:如果kubernetes dashboard 已经是 Running的话,那就说明安装成功了。但一般情况下在不进行翻墙的状况下,都会是:
kubernetes-dashboard-57df4db6b-9qxn5 0/1 ErrImagePull 0 25s
3、使用命令查看问题
kubectl describe pod kubernetes-dashboard-57df4db6b-9qxn5 -n kube-system
.... #此处省略其他信息主要看下面
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 41s default-scheduler Successfully assigned kube-system/kubernetes-dashboard-57df4db6b-9qxn5 to k8s2
Warning Failed 39s kubelet, k8s2 Failed to pull image "k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1": rpc error: code = Unknown desc = Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
Warning Failed 39s kubelet, k8s2 Error: ErrImagePull
Normal BackOff 39s kubelet, k8s2 Back-off pulling image "k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1"
Warning Failed 39s kubelet, k8s2 Error: ImagePullBackOff
Normal Pulling 27s (x2 over 54s) kubelet, k8s2 pulling image "k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1"
很明显错误原因是在K8s2上面无法获取镜像文件,那么既然我们无法从Google获取就是用docker直接拉取。
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
如果你读了上一篇文章此处应该知道是干啥的。
注意:镜像的拉取一定是在查看错误里面的From 所在的节点,如果在你的Master上面进行镜像拉取或者其他节点的话,问题依然还是无法解决的。
4、回到Master节点 查看dashboard Pod 节点状态
kubectl get pod -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-86c58d9df4-j9g8d 1/1 Running 0 7h24m
coredns-86c58d9df4-pg45w 1/1 Running 0 7h24m
etcd-k8s1 1/1 Running 0 7h24m
kube-apiserver-k8s1 1/1 Running 0 7h24m
kube-controller-manager-k8s1 1/1 Running 0 7h24m
kube-flannel-ds-amd64-7btlw 1/1 Running 0 6h47m
kube-flannel-ds-amd64-9vq42 1/1 Running 0 7h3m
kube-flannel-ds-amd64-kdf42 1/1 Running 0 6h47m
kube-proxy-dtmfs 1/1 Running 0 7h24m
kube-proxy-p76tc 1/1 Running 0 6h47m
kube-proxy-xgw28 1/1 Running 0 6h47m
kube-scheduler-k8s1 1/1 Running 0 7h24m
kubernetes-dashboard-57df4db6b-9qxn5 1/1 Running 0 27s
不出意外会启动成功了,如果依旧出现错误: 请先删除pod,然后重新创建(注意有可能创建的节点发生了变化,从k8s2变成了k8s3,所以还是需要手动拉取镜像)
kubectl delete pod kubernetes-dashboard-57df4db6b-9qxn5 -n kube-system #删除节点命令
5、访问kubernetes dashboard ,两种方式进行访问:
1、NodePort 方式访问
创建NodePort 方式访问可以两种方式:
①是将kubernetes-dashboard.yaml文件下载到本地(使用 wget 命令将上面第一条命令的连接下载文件)
然后在Service 中添加 type: NodePort
②不用下载文件 ,在dashboard搭建成功后 进行动态修改命令如下:
kubectl patch svc kubernetes-dashboard -p '{"spec":{"type":"NodePort"}}' -n kube-system
查看可访问的接口
kubectl get svc -n kube-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 7h26m
kubernetes-dashboard NodePort 10.109.189.52 <none> 443:30346/TCP 6h37m
即访问地址为:https://192.168.10.202:30346
此处有坑:切忌 是HTTPS协议 你用HTTP访问是无法访问地,被此地坑惨了。
2、kubectl proxy 方式访问
访问地址:(没错这次是http协议不是https IP地址为master的IP地址)
http://192.168.10.202:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login
如果你是在kubernetes dashboard的github上面看到 只需要执行kubectl proxy 就能访问 你可以尝试 一下,你能不能访问我不知道,我只知道这家伙坑惨我了,说啥也不能访问。
原因在于:
[root@k8s1 ~]# kubectl proxy
[root@k8s1 ~]# Starting to serve on 127.0.0.1:8001 #原因在这个127.0.0.1 上面 ,外部访问是无法访问到这个地址的
#修改如下
[root@k8s1 ~]# kubectl proxy --address=0.0.0.0
[root@k8s1 ~]# Starting to serve on [::]:8001
#这回应该可以了吧,访问地址 提示“Forbidden ” 啥意思 禁止访问 咋整继续修改命令
[root@k8s1 ~]# kubectl proxy --address='0.0.0.0' --accept-hosts='^*$'
[root@k8s1 ~]# Starting to serve on [::]:8001
#这会访问终于见到了自己想要的界面
6、登陆kubernetes dashboard 这里只介绍Token登陆方式
①使用默认的账号kubernetes-dashboard的Token登陆
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep kubernetes-dashboard | awk '{print $1}')
.... #此处省略
ca.crt: 1025 bytes
namespace: 11 bytes
token: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC10b2tlbi1qeGQ3aCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjBlOTYxODk1LTBiMGYtMTFlOS1hOGZlLTA4MDAyNzk4MGYxNSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTprdWJlcm5ldGVzLWRhc2hib2FyZCJ9.QeIQ4T3EikE9ZIWkv4lInxuQ-TZmJT6XBEBaNTsL-bKQ7XQENKESqo0VtUHEngtYYs4qf8Z_U2_0c5gOHiVrkak_OqSAbUW8UwI9DOXygDvjmZyYdkpVH5iF06TWCEjMISPC6m4d9_czcXkGVPMlICJs-5C1tuJgReT7v4sspW8OUTfBezC1KMbvpuPYGNoE1d9WCQmNo75XU0vV9ie0r_YFhd-0irqU45RzvXM7HDrzvdBJotNpxgp-lNRDuz0V5HHf8NYThKWocFSxbJlz3MorXU8bRuXUE2SSwXIR4lmCIWZw1IzGGzziWknbxEdBFSGVnUz5ZFFvU3vnW5Fqdw
#token就是登陆所需要的内容
但是这里填进去后登陆你会发现问题:
黄色啥意思.....啥意思.....
就是禁止访问的意思,别多想。
出现这个问题是因为账户权限不足,因为kubernetes使用了RBAC用户角色访问控制,如果你查看kubernetes-dashboard.yaml文件中创建的kubernetes-dashboard是RoleBinding而不是ClusterRoleBinding就知道问题所在了。
那咋办,凉拌二
②自己创建账号
# ------------------- Dashboard Service Account ------------------- #
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kube-system
---
# ------------------- Dashboard ClusterRoleBinding ------------------- #
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kube-system
将上面内容 保存到文件 cluster-admin.yaml中。
kubectl apply -f cluster-admin.yaml #创建成功后获取它的token
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep cluster-admin | awk '{print $1}')
#用对应的token登陆 即可。
7、至此kubernetes dashboard 安装完毕,遇到的坑真的不少,如果你也遇到了,可以跟大家分享一下。