K8S--可视化界面Kubernetes Dashboard(API Server方式)
一、安装Kubernetes Dashboard
1、下载yaml文件
查看K8S版本:kubectl version,我的版本是1.15,那么就可以使用v2.0.0-beta4版本的Kubernetes-dashboard。版本的对应关系:https://github.com/kubernetes/dashboard/releases
以下命令在Master节点执行
#如果需要进行修改,需要先下载到本地 wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta4/aio/deploy/recommended.yaml #如果不需要修改的话直接使用,我这里就不需要修改 kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta4/aio/deploy/recommended.yaml
查看pod:kubectl get pod --all-namespaces
这里可能会出现以下访问结果:
{ "kind": "Status", "apiVersion": "v1", "metadata": { }, "status": "Failure", "message": "services \"https:kubernetes-dashboard:\" is forbidden: User \"system:anonymous\" cannot get services/proxy in the namespace \"kube-system\"", "reason": "Forbidden", "details": { "name": "https:kubernetes-dashboard:", "kind": "services" }, "code": 403 }
这是因为最新版的k8s默认启用了RBAC,并为未认证用户赋予了一个默认的身份:anonymous
。对于API Server来说,它是使用证书进行认证的,我们需要先创建一个证书:
(1)首先找到kubectl
命令的配置文件,默认情况下为/etc/kubernetes/admin.conf
,我这里已经复制到了$HOME/.kube/config
中。
(2)然后我们使用client-certificate-data
和client-key-data
生成一个p12文件,可使用下列命令:
# 生成client-certificate-data grep 'client-certificate-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.crt # 生成client-key-data grep 'client-key-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.key # 生成p12 openssl pkcs12 -export -clcerts -inkey kubecfg.key -in kubecfg.crt -out kubecfg.p12 -name "kubernetes-client"
3、然后将生成的p12文件添加到浏览器,然后重新打开浏览器,再次访问。
二、创建、绑定用户
1、创建admin-user账号,并放在kube-system
名称空间下
apiVersion: v1 kind: ServiceAccount metadata: name: admin-user namespace: kube-system
执行创建账号命令
kubectl create -f admin-user.yaml
2、绑定角色
默认情况下,kubeadm创建集群时已经创建了admin角色,我们直接绑定即可:
# admin-user-role-binding.yaml 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
执行绑定命令:
kubectl create -f admin-user-role-binding.yaml
3、获取Token:
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
4、使用token登录Kubernetes Dashboard
说明:
目前访问Dashboard有四种方式:NodePort、API Server、kubectl proxy、Ingress,这里只演示了API Server一种,其他的可以参照https://www.cnblogs.com/RainingNight/p/deploying-k8s-dashboard-ui.html,这位博主写的非常的清楚。
三、碰到的问题(dial tcp 10.244.1.8:8443: i/o timeout)
在一次搭建kubernetes-dashboard时,导入p12文件后,访问https://192.168.124.17:6443/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy
出现了kubernetes-dashboard Error: 'dial tcp 10.244.1.8:8443: i/o timeout'的错误。
原因是由于将 kubernetes-dashboard安装在了node节点
kubectl get pod --all-namespaces -o wide
但是当时我确实是在master节点上执行的操作,那为什么会被安装到了node节点呢,由于kubernetes-dashboard是K8S的插件,因此其默认会安装到node节点,如果没有将master设置为node,那么虽然在master上执行安装命令,但是仍然会被安装到其他的node节点上。
对于这个问题,解决方案:要么将master设置为node节点,要么在没有node加入的时候安装kubernetes-dashboard,至于第一种方案,其会调整K8S集群中master的类型,这个最好还是别动了,那么就是采用第二种方案,但是我这里已经有了node节点,删除再加入,未免影响太大了,其实有一个更好的方法,就是将所有的node置为不可用状态(污点node),然后重新安装kubernetes-dashboard即可。
## 删除现有的dashboard kubectl delete -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.2.0/aio/deploy/recommended.yaml ## 将node服务器设置为污点,这样dashboard就不会部署过去了,如果有更多参数,自行调整 kubectl taint nodes k8s-node1 note=void-dashboard:NoSchedule ## 重新部署dashboard kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.2.0/aio/deploy/recommended.yaml ## 取消node节点的污点设置 kubectl taint nodes k8s-node1 note=void-dashboard:NoSchedule-
重新查看pod部署的情况
可以看到,已经部署到了master节点,然后关闭浏览器,重新打卡,完美解决。
-----------------------------------------------------------
---------------------------------------------
朦胧的夜 留笔~~