kubernetes-dashboard(1.8.3)部署与踩坑
Kubernetes Dashboard 是一个管理Kubernetes集群的全功能Web界面,旨在以UI的方式完全替代命令行工具(kubectl 等)。
目录
- 部署
- 创建用户
- 集成Heapster
- 访问
- kubectl proxy
- NodePort
- API Server
- Ingress
部署
Dashboard需要用到k8s.gcr.io/kubernetes-dashboard
的镜像,由于网络原因,可以采用预先拉取并打Tag或者修改yaml文件中的镜像地址,本文使用后者:
kubectl apply -f http://mirror.faasx.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
上面使用的yaml只是将 https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml 中的 k8s.gcr.io 替换为了 reg.qiniu.com/k8s。
然后可以使用kubectl get pods
命令来查看部署状态:
kubectl get pods --all-namespaces# 输出
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system kubernetes-dashboard-7d5dcdb6d9-mf6l2 1/1 Running 0 9m
如果要在本地访问dashboard,我们需要创建一个安全通道,可运行如下命令:
kubectl proxy
现在就可以通过 http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/ 来访问Dashborad UI了。
创建用户
如上图,跳转到了登录页面,那我们就先创建个用户:
1.创建服务账号
首先创建一个叫admin-user
的服务账号,并放在kube-system
名称空间下:
# admin-user.yaml
apiVersion: v1
kind: ServiceAccount metadata: name: admin-user namespace: kube-system
执行kubectl create
命令:
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
命令:
kubectl create -f admin-user-role-binding.yaml
3.获取Token
现在我们需要找到新创建的用户的Token,以便用来登录dashboard:
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
输出类似:
Name: admin-user-token-qrj82
Namespace: kube-system
Labels: <none>
Annotations: kubernetes.io/service-account.name=admin-userkubernetes.io/service-account.uid=6cd60673-4d13-11e8-a548-00155d000529Type: kubernetes.io/service-account-tokenData
====
token: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLXFyajgyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI2Y2Q2MDY3My00ZDEzLTExZTgtYTU0OC0wMDE1NWQwMDA1MjkiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06YWRtaW4tdXNlciJ9.C5mjsa2uqJwjscWQ9x4mEsWALUTJu3OSfLYecqpS1niYXxp328mgx0t-QY8A7GQvAr5fWoIhhC_NOHkSkn2ubn0U22VGh2msU6zAbz9sZZ7BMXG4DLMq3AaXTXY8LzS3PQyEOCaLieyEDe-tuTZz4pbqoZQJ6V6zaKJtE9u6-zMBC2_iFujBwhBViaAP9KBbE5WfREEc0SQR9siN8W8gLSc8ZL4snndv527Pe9SxojpDGw6qP_8R-i51bP2nZGlpPadEPXj-lQqz4g5pgGziQqnsInSMpctJmHbfAh7s9lIMoBFW7GVE8AQNSoLHuuevbLArJ7sHriQtDB76_j4fmA
ca.crt: 1025 bytes
namespace: 11 bytes
然后把Token复制到登录界面的Token输入框中,登入后显示如下:
集成Heapster
Heapster是容器集群监控和性能分析工具,天然的支持Kubernetes和CoreOS。
Heapster支持多种储存方式,本示例中使用influxdb
,直接执行下列命令即可:
kubectl create -f http://mirror.faasx.com/kubernetes/heapster/deploy/kube-config/influxdb/influxdb.yaml
kubectl create -f http://mirror.faasx.com/kubernetes/heapster/deploy/kube-config/influxdb/grafana.yaml
kubectl create -f http://mirror.faasx.com/kubernetes/heapster/deploy/kube-config/influxdb/heapster.yaml kubectl create -f http://mirror.faasx.com/kubernetes/heapster/deploy/kube-config/rbac/heapster-rbac.yaml
上面命令中用到的yaml是从 https://github.com/kubernetes/heapster/tree/master/deploy/kube-config/influxdb 复制的,并将
k8s.gcr.io
修改为国内镜像。
然后,查看一下Pod的状态:
raining@raining-ubuntu:~/k8s/heapster$ kubectl get pods --namespace=kube-system
NAME READY STATUS RESTARTS AGE
...
heapster-5869b599bd-kxltn 1/1 Running 0 5m
monitoring-grafana-679f6b46cb-xxsr4 1/1 Running 0 5m monitoring-influxdb-6f875dc468-7s4xz 1/1 Running 0 6m ...
等待状态变成Running
,刷新一下浏览器,最新的效果如下:
关于Heapster更详细的用法可参考官方文档:https://github.com/kubernetes/heapster。
访问
Kubernetes提供了以下四种访问服务的方式:
kubectl proxy
在上面的示例中,我们使用的便是kubectl proxy
,它在您的机器与Kubernetes API之间创建一个代理,默认情况下,只能从本地访问(启动它的机器)。
我们可以使用kubectl cluster-info
命令来检查配置是否正确,集群是否可以访问等:
raining@raining-ubuntu:~$ kubectl cluster-info
Kubernetes master is running at https://192.168.0.8:6443
Heapster is running at https://192.168.0.8:6443/api/v1/namespaces/kube-system/services/heapster/proxy
KubeDNS is running at https://192.168.0.8:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
monitoring-grafana is running at https://192.168.0.8:6443/api/v1/namespaces/kube-system/services/monitoring-grafana/proxy
monitoring-influxdb is running at https://192.168.0.8:6443/api/v1/namespaces/kube-system/services/monitoring-influxdb/proxyTo further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
启动代理只需执行如下命令:
$ kubectl proxy
Starting to serve on 127.0.0.1:8001
我们也可以使用--address
和--accept-hosts
参数来允许外部访问:
kubectl proxy --address='0.0.0.0' --accept-hosts='^*$'
然后我们在外网访问http://<master-ip>:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
,可以成功访问到登录界面,但是却无法登录,这是因为Dashboard只允许localhost
和127.0.0.1
使用HTTP连接进行访问,而其它地址只允许使用HTTPS。因此,如果需要在非本机访问Dashboard的话,只能选择其他访问方式。
NodePort
NodePort是将节点直接暴露在外网的一种方式,只建议在开发环境,单节点的安装方式中使用。
启用NodePort很简单,只需执行kubectl edit
命令进行编辑:
kubectl -n kube-system edit service kubernetes-dashboard
输出如下:
apiVersion: v1
kind: Service
metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"k8s-app":"kubernetes-dashboard"},"name":"kubernetes-dashboard","namespace":"kube-system"},"spec":{"ports":[{"port":443,"targetPort":8443}],"selector":{"k8s-app":"kubernetes-dashboard"}}} creationTimestamp: 2018-05-01T07:23:41Z labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard namespace: kube-system resourceVersion: "1750" selfLink: /api/v1/namespaces/kube-system/services/kubernetes-dashboard uid: 9329577a-4d10-11e8-a548-00155d000529 spec: clusterIP: 10.103.5.139 ports: - port: 443 protocol: TCP targetPort: 8443 selector: k8s-app: kubernetes-dashboard sessionAffinity: None type: ClusterIP status: loadBalancer: {}
然后我们将上面的type: ClusterIP
修改为type: NodePort
,保存后使用kubectl get service
命令来查看自动生产的端口:
kubectl -n kube-system get service kubernetes-dashboard
输出如下:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes-dashboard NodePort 10.103.5.139 <none> 443:31795/TCP 4h
如上所示,Dashboard已经在31795
端口上公开,现在可以在外部使用https://<cluster-ip>:31795
进行访问。需要注意的是,在多节点的集群中,必须找到运行Dashboard节点的IP来访问,而不是Master节点的IP,在本文的示例,我部署了两台服务器,MatserIP为192.168.0.8
,ClusterIP为192.168.0.10
。
但是最后访问的结果可能如下:
遗憾的是,由于证书问题,我们无法访问,需要在部署Dashboard时指定有效的证书,才可以访问。由于在正式环境中,并不推荐使用NodePort的方式来访问Dashboard,故不再多说,关于如何为Dashboard配置证书可参考:Certificate management。
API Server
如果Kubernetes API服务器是公开的,并可以从外部访问,那我们可以直接使用API Server的方式来访问,也是比较推荐的方式。
Dashboard的访问地址为:
https://<master-ip>:<apiserver-port>/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
,但是返回的结果可能如下:
{"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文件,重新打开浏览器,显示如下:
点击确定,便可以看到熟悉的登录界面了:
我们可以使用一开始创建的admin-user
用户的token进行登录,一切OK。
对于生产系统,我们应该为每个用户应该生成自己的证书,因为不同的用户会有不同的命名空间访问权限。
Ingress
Ingress将开源的反向代理负载均衡器(如 Nginx、Apache、Haproxy等)与k8s进行集成,并可以动态的更新Nginx配置等,是比较灵活,更为推荐的暴露服务的方式,但也相对比较复杂,以后再来介绍。
引自:https://www.cnblogs.com/RainingNight/p/deploying-k8s-dashboard-ui.html
转载于:https://www.cnblogs.com/itrena/p/8994764.html
kubernetes-dashboard(1.8.3)部署与踩坑相关推荐
- Hexo+GitHub 博客部署 个人踩坑记录(一)
Hexo+GitHub 博客部署 个人踩坑记录(一) 前言 博客的作用 编程学习本身是持续性的学习行为,说明所学习的内容是在持续地增加.这要求我们要学会阶段性总结自己所学的东西,复习并巩固.所以写文章 ...
- crmeb商城部署(踩坑及解决方法)
源码地址: https://gitee.com/ZhongBangKeJi/CRMEB 原版是PHP版,我也不懂PHP,但看到功能很全,而且有docker-compose的脚本可以部署,并且教程也很完 ...
- 【RK部署】RK3566部署PaddleOCRv2踩坑记录
部署全流程 paddle2onnx PC连板推理 板端C++推理 项目需要在rk3566板子上,实时识别用户在白纸上用马克笔写的字/字符,或者打印到白纸的字/字符.由于之前在Nvidia的NX板上部署 ...
- 腾讯云部署homeassistant踩坑记录
之前花199买了3年的2C4G8M轻量云服务器一直闲着在,就开始几个月倒腾了下,看网上很多把homeassistant部署到局域网NAS或者路由器的,想着来整点活儿.也是一个意外在淘宝搜米家的接入模块 ...
- K8s部署Heapster踩坑记录
最近部署安装Heapster+InfluxDB+Grafana的时候遇到一个坑,一直没有解决,在按照官方github提示应用完yaml文件后出现了如下报错: Influxdb Pod一直报错Crash ...
- Kubernetes Dashboard、 Rancher、 Kuboard什么关系
Kubernetes 已然是当下容器编排领域事实上的标准,各大云服务商都急于推出 Kubernetes 服务,互联网公司也纷纷跟进,将自己的应用容器化,并使用 Kubernetes 编排. 在 Kub ...
- 阿里云部署Tiny Tiny RSS踩坑笔记
阿里云部署Tiny Tiny RSS踩坑笔记 前言 入坑了RSS,之前的配置是阿里云部署RSSHub,配合Inoreader进行文章阅读,详情见RSS入坑指南.阿里云部署RSSHub踩坑笔记.在202 ...
- 【完整记录】使用kubeadm部署kubernetes集群踩坑记录及解决方案
文章目录 搭建集群过程中遇到的问题及解决方案 1. 现有网上的kubernetes集群搭建教程中的kubeadm配置文件版本过老导致出现以下报错: 2. kubeadm init过程中pull镜像超时 ...
- 有史以来最详细 安装部署Kubernetes Dashboard (补充解决官方出现的一些RBAC CERT等问题)
安装部署Kubernetes Dashboard (补充解决官方出现的一些RBAC CERT等问题) 官方文档:https://github.com/kubernetes/dashboard 参考文章 ...
最新文章
- 美团点评基于 Flink 的实时数仓建设实践
- ERP项目实施的原则
- 电气工程及其自动化专业英语苏小林翻译_“万千星光 智能点亮” 电气工程及其自动化专业讲座...
- mysql php 新手卡生成_6个强大的PHP/Mysql代码生成器介绍
- 在Kotlin中使用Gradle构建缓存
- KETTLE使用教程
- Python办公自动化——发票开具明细汇总
- 蓝桥本第九届省赛刷题记录
- 让人喷血的92条个性签名!!!
- java 扫描仪_Java调用扫描仪2
- Android 集成腾讯Bugly
- P2704 [NOI2001] 炮兵阵地
- [网络安全自学篇] 七十一.深信服分享之外部威胁防护和勒索病毒对抗
- 阿里云李津:公有云做的是信心与责任!
- java最简单的代码
- MATLAB中cftool多曲线画图
- Oracle分区表操作
- vscode在windows端远程连接ubuntu工作站
- 宜家要 All in 智能家居?但和 Google 、亚马逊不太一样
- Android ListView局部刷新item
热门文章
- Java的访问控制修饰符_访问权限修饰符_访问权限修饰词
- 基2FFT算法matlab程序编写,频率抽取(DIF)基2FFT算法的MATLAB实现
- python合并csv文件_Python学习——pandas 合并csv文件
- 【WebRTC---入门篇】(十三)WebRTC音视频数据采集
- 【C语言入门学习笔记】如何把C语言程序变成可执行文件!
- ps图片拖不进去_PS教学:你的logo还不够高大上?7步教做出黄色金属质感logo
- 串口服务器介绍及产品特点详解
- 交换机端口故障问题解决方法
- 【渝粤教育】国家开放大学2018年秋季 0653-21T机电控制与可编程控制技术 参考试题
- [渝粤教育] 广东-国家-开放大学 10259k2_经济学基础_21秋考试