ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] # 安装管理dashboard [dashboard官网地址](https://github.com/kubernetes/dashboard) #### 安装 ~~~ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml ~~~ 如果是离线环境,可以根据yaml里面的image字段,把镜像下载下来 ![](https://img.kancloud.cn/5b/d2/5bd213a387865a14ba3acddbb157ba6d_1064x39.png) * 安装完成`kubectl get pod --allnamespaces` ![](https://img.kancloud.cn/51/6d/516d9173d9a858442f460adb188f287b_793x500.png) * 查看监听`kubectl get service --all-namespaces` ![](https://img.kancloud.cn/9b/61/9b614c076910811865aa0cc7f41f0c32_907x93.png) #### 访问 访问UI分为三种方式: * 使用 proxy 方式访问 * 使用 NodePort 方式访问 * 使用 API 方式访问 ##### 使用 proxy 访问 Proxy方式需要执行`kubectl proxy`打开proxy端口。 ~~~ kubectl proxy --address='0.0.0.0' --accept-hosts='^*$' ~~~ ##### 使用 API 访问 直接在浏览器中输入:`https://<master-ip>:<apiserver-port>/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/` 会因为证书问题,返回403,被拒绝访问 ![](https://img.kancloud.cn/c1/2c/c12c4fbfd6ef5ad873afeca042fa7059_604x350.png) 这是因为kubeadm默认启动了RBAC功能,而浏览器没有相关的用户证书,所以需要创建一个浏览器证书 * 生成证书 ~~~ # 生成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 # 生成证书 openssl pkcs12 -export -clcerts -inkey kubecfg.key -in kubecfg.crt -out kubecfg.p12 -name "kubernetes-client" ~~~ * 导入证书到浏览器 将生成的`kubecfg.p12`到处浏览器 导入完成后,重新打开浏览器 ![](https://img.kancloud.cn/01/e3/01e349f5524d95c582cfdaec57ac5b7e_829x423.png)![](https://img.kancloud.cn/c3/d9/c3d9bfa0db0e9e0269e66542f9a05817_571x499.png) ##### 使用 NodePort 访问 (不需要再执行 kubectl porxy 命令了) 修改service类型 ~~~ # 修改service中的type为“NodePort” kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard ~~~ #### 修改登录方式(可选) * 使用用户名密码登录 默认情况下,dashboard只能使用token和config方式登录, 但是可以通过添加`--authentication-mode=basic`选项,使用用户名密码登录 ~~~ #下载yaml文件 wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml #编辑kubernetes-dashboard.yaml #在args项里面,添加 args: - --auto-generate-certificates - --authentication-mode=basic #保存文件并执行 kubectl apply -f kubernetes-dashboard.yaml ~~~ ![](https://img.kancloud.cn/74/38/7438e8827c2dc5ba3b02abc9c4e7db8d_692x352.png) * 打开skip按钮 添加`--enable-skip-login` ![](https://img.kancloud.cn/49/0f/490f60e3458ab7fc1b2a87baf9266bff_479x147.png) #### 用户认证登录 ##### 使用token认证登录 * 1、创建服务账户admin-user ~~~ kubectl create serviceaccount admin-user -n kube-system ~~~ **或用YAML** ~~~ apiVersion: v1 kind: ServiceAccount metadata: name: admin-user namespace: kube-system ~~~ * 2、admin-user绑定集群cluster-admin角色 ~~~ apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: admin-user roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin #cluster-admin角色在使用kubeadm建设的时候,就已经被自动创建 subjects: - kind: ServiceAccount name: admin-user namespace: kube-system ~~~ * 3、查看集群角色绑定: ~~~ kubectl get clusterrolebindings --all-namespaces ~~~ ![](https://img.kancloud.cn/fe/49/fe4976f4e389910b4ace3dfb0f3314d8_616x154.png) * 4、查看服务账户: ~~~ kubectl get serviceaccounts --all-namespaces ~~~ ![](https://img.kancloud.cn/fe/ae/feaefc6b4bbc7a8343fd1fd366cace3c_562x226.png) * 5、获取token并登录 ~~~ kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}') ~~~ ![](https://img.kancloud.cn/64/2d/642d7e0b3cb633e9201d7a84159a5c2b_974x369.png) 复制token,进行登录 ![](https://img.kancloud.cn/4d/74/4d741e4ba453b673b9328a663185e2e8_482x414.png) ![](https://img.kancloud.cn/1a/c8/1ac8c05707fb2ca2201665f6eff21209_920x500.png) ##### 使用kubeconfig认证登录 使用token的方式使用不方便,所以将token存入到kubeconfig中 创建一个用于**管理默认命名空间**的账号 ~~~ kubectl create serviceaccount def-ns-admin -n default kubectl create rolebinding def-ns-admin --clusterrole=admin --serviceaccount=default:def-ns-admin ~~~ * 1、初始化集群信息 ~~~ kubectl config set-cluster kubernetes --embed-certs=true --server="https://192.168.222.7:16443" --certificate-authority=/etc/kubernetes/pki/ca.crt --kubeconfig=./def-ns-admin.kubeconfig ~~~ * 2、获取token ~~~ DEF_NS_ADMIN_SECRET=$(kubectl -n default get secret | awk '/^def-ns-admin/{print $1}') DEF_NS_ADMIN_TOKEN=$(kubectl -n default get secret ${DEF_NS_ADMIN_SECRET} -o jsonpath={.data.token}|base64 -d) kubectl config set-credentials def-ns-admin --token=${DEF_NS_ADMIN_TOKEN} --kubeconfig=./def-ns-admin.kubeconfig ~~~ * 3、设置context列表 ~~~ kubectl config set-context def-ns-admin --cluster=kubernetes --user=def-ns-admin --kubeconfig=./def-ns-admin.kubeconfig ~~~ * 4、 指定要使用的context ~~~ kubectl config use-context def-ns-admin --kubeconfig=./def-ns-admin.kubeconfig ~~~ * 5、使用生成的 def-ns-admin.kubeconfig 登录即可