ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] 参考:[https://www.qikqiak.com/k8s-book/docs/17.%E5%AE%89%E8%A3%85%20Dashboard%20%E6%8F%92%E4%BB%B6.html](https://www.qikqiak.com/k8s-book/docs/17.%E5%AE%89%E8%A3%85%20Dashboard%20%E6%8F%92%E4%BB%B6.html) ## 安装部署Dashboard 通过一下命令来部署, [recommended.yaml](dashboard%E7%9A%84yaml%E6%96%87%E4%BB%B6.md) ``` $ sudo kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml ``` `https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml`这个地址却很难打开,如果能打开,直接执行即可,如果不能,可以这样做: ``` 到github地址上一步步找:`https://github.com/kubernetes/dashboard/tree/v2.0.0-beta4/aio/deploy`下的`recommended.yaml`文件; ``` ### NodePort方式访问web 为了测试方便,我们将`Service`改成`NodePort`类型,注意 YAML 中最下面的 Service 部分新增一个`type=NodePort`: ``` 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: 30000 #增加 selector: k8s-app: kubernetes-dashboard ``` 然后直接部署新版本的`dashboard`即可: ``` $ sudo kubectl create -f recommended.yaml 或者 $ sudo kubectl apply -f recommended.yaml ``` > 删除的指令 sudo kubectl delete -f recommended.yaml 查看服务暴露的端口 ``` $ sudo kubectl get service -n kubernetes-dashboard NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE dashboard-metrics-scraper ClusterIP 10.103.34.200 <none> 8000/TCP 4s kubernetes-dashboard NodePort 10.98.254.205 <none> 443:31038/TCP 4s ``` 然后**直接访问集群中的任何一个节点 IP** 加上上面的**31038**端口即可打开 dashboard 页面了 查看dashboard状态 ``` $ sudo kubectl get pods --all-namespaces | grep dashboard kubernetes-dashboard dashboard-metrics-scraper-6b4884c9d5-mvnb9 1/1 Running 0 40m kubernetes-dashboard kubernetes-dashboard-d7f7f565d-zhpsc 1/1 Running 0 40m ``` 查看dashboard的日志 ``` $ sudo kubectl logs -f -n kubernetes-dashboard kubernetes-dashboard-d7f7f565d-zhpsc ``` 如果安装后,dashboard状态直接爆错,没有处于Running状态,可以执行下面命令删除插件与镜像,使用docker pull安装镜像的可以更换其他版本镜像与yaml进行安装 ``` # 删除dashboard插件,recommended.yaml为安装时的名称,执行删除后,docker里对应的镜像没不会同步删除 sudo kubectl delete -f recommended.yaml ``` ## **Web访问的其他方式** ### **开启NodePort访问的另一种方式** 查看 kubernetes-dashboard ``` sudo kubectl --namespace=kubernetes-dashboard get service kubernetes-dashboard [root@k8s ~]# kubectl --namespace=kubernetes-dashboard get service kubernetes-dashboard NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes-dashboard ClusterIP 10.97.154.42 <none> 443/TCP 28m ``` 编辑`kubernetes-dashboard`, 将里面的`type: ClusterIP`改为`type: NodePort`即可。 ``` $ kubectl --namespace=kubernetes-dashboard edit service kubernetes-dashboard ``` `wq`保存即可。等一会儿,重新查看,就变为NodePort了。 ``` $ sudo kubectl --namespace=kubernetes-dashboard get service kubernetes-dashboard NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes-dashboard NodePort 10.98.254.205 <none> 443:31038/TCP 59s ``` 然后**直接访问集群中的任何一个节点 IP** 加上上面的**31038**端口即可打开 dashboard 页面了 ### API Server访问 启动Web访问,accept-hosts需要绑定当前服务器ip,即绑定接收请求的地址(可以使用正则表达式),不绑定访问可能会被拒绝,直接返回“Forbidden” ``` nohup sudo kubectl proxy --address='0.0.0.0' --port=8001 --accept-hosts='.*' & ``` 直接用curl在服务器测试访问 ``` curl http://localhost:8001/api/ ``` 如果能返回下面json串,就表示Dashboard已安装成功 ``` { "kind": "APIVersions", "versions": [ "v1" ], "serverAddressByClientCIDRs": [ { "clientCIDR": "0.0.0.0/0", "serverAddress": "192.168.10.161:6443" } ] } ``` 进入Dashboard web管理平台 [http://192.168.10.161:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login](http://192.168.10.161:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login) ## 创建用户 我们创建一个admin用户并授予admin 角色绑定,使用下面的yaml文件创建admin用户并赋予他管理员权限,然后就可以通过token 登陆dashbaord,这种认证方式本质实际上是通过Service Account 的身份认证加上Bearer token请求 API server 的方式实现,参考[Kubernetes 中的认证](https://kubernetes.io/docs/admin/authentication/)。 ` ` **新建文件(文件名随意)`admin-user.yaml`:** 输入内容: ``` apiVersion: v1 kind: ServiceAccount metadata: name: admin-user namespace: kubernetes-dashboard ``` 执行: ``` sudo kubectl create -f admin-user.yaml ``` ## **绑定用户关系** **新建文件(文件名随意)`admin-user-role-binding.yaml`:** 输入内容: ``` apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: admin-user roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: admin-user namespace: kubernetes-dashboard ``` 执行: ``` sudo kubectl create -f admin-user-role-binding.yaml ``` **如果过程中提示存在或者需要删除,只需要`kubectl delete -f 相应的yaml文件`即可。** ## **获取token** 按照官网提示的获取token方法: ``` sudo kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}') ```