1、Dashboard安装
上一小节我们讲解了怎么利用Kubeadm快速的搭建Kubernetes集群,这一小节我们安装一下Dashboard插件,实现Kubernetes集群可视化。
Dashboard插件Github地址:https://github.com/kubernetes/dashboard
Dashboard 是基于网页的 Kubernetes 用户界面。您可以使用 Dashboard 将容器应用部署到 Kubernetes 集群中,也可以对容器应用排错,还能管理集群资源。您可以使用 Dashboard 获取运行在集群中的应用的概览信息,也可以创建或者修改 Kubernetes 资源(如 Deployment,Job,DaemonSet 等等)。例如,您可以对 Deployment 实现弹性伸缩、发起滚动升级、重启 Pod 或者使用向导创建新的应用。
以下所有操作都在Node节点
在开始之前我们需要在Node节点提前下载Dashboard的镜像:
docker pull googlecontainersmirrors/kubernetes-dashboard-amd64:v1.10.1(这个版本和v1.17.3版本不兼容、因为这里是测试环境、我们替换版本为下面的v2.0.0-rc5测试版本)
docker pull kubernetesui/dashboard:v2.0.0-rc5
docker tag googlecontainersmirrors/kubernetes-dashboard-amd64:v1.10.1 k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1
首先我们去Github下载Dashboard的.yaml文件(版本一定要和镜像版本对应哦)。
wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml(这里需要修改recommended.yaml文件、使用NodePort映射Dashboard服务)
创建Dashboard:下载完成以后、我们使用下面的命令创建Dashboard:
kubectl apply -f recommended.yaml
注:如果感觉创建的服务有问题、可以通过:kubectl delete-f kubernetes-dashboard.yaml 命令删除,然后重建。
当然我们还可以通过下面的命令查看Dashboard的状态。
查看Dashboard详细情况:
kubectl describe svc kubernetes-dashboard -n kubernetes-dashboard
查看Dashboard的调度情况:
kubectl get pods -n kubernetes-dashboard -o wide
通过:kubectl get pods -n kubernetes-dashboard -o wide 命令查看dashboard 的调度情况、我们发现dashboard 被调度到了node02节点上。
2、Dashboard访问
Kubernetes提供了以下四种访问服务的方式:kubectl proxy,NodePort,API Server,Ingress。由于默认的service类型是ClusterIP,我们是自建的kubernetes,无法自动分配ip给service,所以这里我们需要修改一下dashboard的service类型,指定为NodePort以方便我们访问。
kubectl proxy:
如果要在本地访问dashboard,我们需要创建一个安全通道,可运行如下命令:kubectl proxy。
NodePort:NodePort是将节点直接暴露在外网的一种方式,只建议在开发环境,单节点的安装方式中使用。
API Server:如果Kubernetes API服务器是公开的,并可以从外部访问,那我们可以直接使用API Server的方式来访问,也是比较推荐的方式。
Ingress:Ingress将开源的反向代理负载均衡器(如 Nginx、Apache、Haproxy等)与k8s进行集成,并可以动态的更新Nginx配置等,是比较灵活,更为推荐的暴露服务的方式,但也相对比较复杂,后面的文章我们会详细介绍。
这里我们采用NodePort的方式直接将端口映射出来,启用NodePort很简单,我们只需要在recommended.yaml文件中添加如下内容即可(修改的时候切记大小写和空格):
修改完成以后通过 kubectl apply -f recommended.yaml 命令更新一下Dashboard就可以了,此时可以通过 kubectl get service -n kubernetes-dashboard 看到443端口已经成功映射到30355端口了。Dashboard已经在30335端口上公开,现在可以在任意节点的IP地址https://
遗憾的是,由于证书问题,我们无法访问,需要在部署Dashboard时指定有效的证书,才可以访问(在正式环境中,并不推荐使用NodePort的方式来访问Dashboard,后面我们会详细讲解生产环境如何访问Dashboard)。
3、生成Token
登录dashboard 的时候支持Kubeconfig 和token 两种认证方式,Kubeconfig 中也依赖token 字段,所以生成token 这一步是必不可少的。这里我们创建一个admin用户并授予admin 角色绑定,使用下面的yaml文件创建admin用户并赋予他管理员权限,然后就可以通过token 登陆dashbaord,这种认证方式本质实际上是通过Service Account 的身份认证加上Bearer token请求 API server 的方式实现,参考 Kubernetes 中的认证。
创建 create-admin.yaml 文件,并插入如下代码:
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: admin
annotations:
rbac.authorization.kubernetes.io/autoupdate: "true"
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
name: admin
namespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin
namespace: kube-system
labels:
kubernetes.io/cluster-service: "true"
addonmanager.kubernetes.io/mode: Reconcile
通过kubectl apply -f create-admin.yaml 命令应用配置文件创建用户。上面的admin用户创建完成后我们就可以获取到该用户对应的token了,如下命令:
kubectl -n kubernetes-dashboard describe secret ParseError: KaTeX parse error: Expected '}', got 'EOF' at end of input: …r | awk '{print1}')
然后在dashboard登录页面上直接使用上面得到的token字符串即可登录,这样就可以拥有管理员权限操作整个kubernetes集群的对象,当然你也可以为你的登录用户新建一个指定操作权限的用户。