Kubernetes Dashboard是Kubernetes集群的通用基于Web的UI。它允许用户管理在群集中运行的应用程序并对其进行故障排除,并管理群集本身。

部署Dashboard

项目github地址
官方文档参考

获取yaml文件

curl -O https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml   # https访问的
curl -O https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/alternative/kubernetes-dashboard.yaml   # http方式访问

在使用traefik ingress暴露方式访问建议使用http方式

修改yaml文件中的镜像地址

查看镜像地址

>  grep image kubernetes-dashboard.yaml image: k8s.gcr.io/kubernetes-dashboard-amd64:v1.8.3   # 这个地址被墙,可以去docker-hub搜索此镜像上传至自己的镜像库中

替换镜像地址

这里我们直接使用docker-hub上的镜像
镜像地址

> grep image kubernetes-dashboard.yaml image: anjia0532/kubernetes-dashboard-amd64:v1.8.3在deployment段加一个配置
- --heapster-host=http://heapster

引入yaml文件

> kubectl apply -f kubernetes-dashboard.yaml > kubectl get pods -n kube-system | grep dashboard
kubernetes-dashboard-bbc7b8b5-rj8hf   1/1       Running   0          10m> kubectl get svc -n kube-system | grep dashboard
kubernetes-dashboard   ClusterIP   10.254.61.253   <none>        80/TCP          43s

要从本地工作站访问仪表板,您必须为您的Kubernetes集群创建一个安全通道。
运行以下命令:

kubectl proxy

现在访问dashboard

http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/.    # 可惜本地的服务器没有浏览器和GUI,可以使用elinks试下

身份认证

登录dashboard 的时候支持Kubeconfig 和token 两种认证方式,Kubeconfig 中也依赖token 字段,所以生成token 这一步是必不可少的。

创建用户及rbac

使用下面的yaml文件绑定集群赋予集群管理员权限,然后就可以通过token 登陆dashbaord,这种认证方式本质实际上是通过Service Account 的身份认证加上Bearer token请求 API server 的方式实现,参考 Kubernetes 中的认证

# cat k8s-dashboard-admin-rbac.yaml
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:name: kubernetes-dashboardlabels:k8s-app: kubernetes-dashboard
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-admin
subjects:
- kind: ServiceAccountname: kubernetes-dashboardnamespace: kube-system

创建

kubectl apply -f k8s-dashboard-admin-rbac.yaml

获取token

上面的admin用户创建完成后我们就可以获取到该用户对应的token了,如下命令:

> kubectl get secret -n kube-system | grep dashboard-token
kubernetes-dashboard-token-5zclk         kubernetes.io/service-account-token   3         1h> kubectl get secret kubernetes-dashboard-token-5zclk  -o jsonpath={.data.token} -n kube-system |base64 -d
eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC10b2tlbi01emNsayIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjVjM2UzZWMxLTc4MjQtMTFlOC05MzQwLTAwNTA1Njk4NzU5MCIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTprdWJlcm5ldGVzLWRhc2hib2FyZCJ9.Czpad8AfU_FfD6UpHuUSRO_qp5TaEnlPLO_CKFXOqV-lwIQqMWJzLSdEmzG1pRH8X27_oUHPwJBq0WB9UoEYzPriQT6n8gC6iVnYP4gDeNnuQsyHsTfbYXq8rcnCOE3bgl54Pbdq4kLkO5qLVndgrJMFPA82bnnqTNymIaPGqEi-D5qT8y0gSkU1m8aCnQ57OtmgbjaLaWHH1sVtqLW4VzPtu65DSEH8XtVvb0sZVgoO3xhj_VQ5cfwGjDEmneVcbBEVKbSMAly4VpwkbK4qih5tkYwBFMVmY1oACQbNjjsMErVxZNIkAP5GHMO00E7DF80Svc7GHEtSNU-jWILTig

这个token有效期只针对于当前生命周期内的dashborad,如果删除后再创建,需要生成新的token

集成Heapster插件

Heapster是容器集群监控和性能分析工具,天然的支持Kubernetes和CoreOS。Kubernetes有个出名的监控cAdvisor。在每个kubernetes Node上都会运行cAdvisor,它会收集本机以及容器的监控数据(cpu,memory,filesystem,network,uptime)。
在较新的版本中,K8S已经将cAdvisor功能集成到kubelet组件中。每个Node节点可以直接进行web访问。cAdvisor web界面访问: http://< Node-IP >:4194
cAdvisor也提供Restful API: https://github.com/google/cadvisor/blob/master/docs/api.md

到heapster release 页面下载最新版的heapster

获取文件

> wget https://github.com/kubernetes/heapster/archive/v1.5.3.tar.gz
> tar -xf v1.5.3.tar.gz # 相关文件
> cd heapster-1.5.3/deploy/kube-config/
> ls rbac/ && ls influxdb/
heapster-rbac.yaml
grafana.yaml  heapster.yaml  influxdb.yaml

镜像地址修改

查看镜像地址

> grep image influxdb/*
influxdb/grafana.yaml:        image: gcr.io/google_containers/heapster-grafana-amd64:v4.4.3
influxdb/heapster.yaml:        image: gcr.io/google_containers/heapster-amd64:v1.5.3
influxdb/influxdb.yaml:        image: gcr.io/google_containers/heapster-influxdb-amd64:v1.3.3

修改镜像地址

> grep image influxdb/*
influxdb/grafana.yaml:        image: anjia0532/heapster-grafana-amd64:v4.4.3
influxdb/heapster.yaml:        image: anjia0532/heapster-amd64:v1.5.3
influxdb/influxdb.yaml:        image: anjia0532/heapster-influxdb-amd64:v1.3.3

引入yaml文件

> cp rbac/heapster-rbac.yaml influxdb/
> cd influxdb/
> ls
grafana.yaml  heapster-rbac.yaml  heapster.yaml  influxdb.yaml
> kubectl create -f .

查看pod,svc

> kubectl get svc -n kube-system -o wide
NAME                   TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE       SELECTOR
coredns                ClusterIP   10.254.0.2       <none>        53/UDP,53/TCP   7d        k8s-app=coredns
heapster               ClusterIP   10.254.76.86     <none>        80/TCP          24s       k8s-app=heapster
kubernetes-dashboard   ClusterIP   10.254.61.253    <none>        80/TCP          1h        k8s-app=kubernetes-dashboard
monitoring-grafana     ClusterIP   10.254.234.193   <none>        80/TCP          24s       k8s-app=grafana
monitoring-influxdb    ClusterIP   10.254.83.156    <none>        8086/TCP        24s       k8s-app=influxdb> kubectl get pod -n kube-system -o wide
NAME                                   READY     STATUS    RESTARTS   AGE       IP            NODE
coredns-66c9f6f9f7-5k9fb               1/1       Running   1          3d        172.18.16.2   k8s-n2-16-239
heapster-d59d66579-gr8sf               1/1       Running   0          33s       172.18.29.3   k8s-n3-16-240
kubernetes-dashboard-bbc7b8b5-rj8hf    1/1       Running   0          1h        172.18.29.2   k8s-n3-16-240
monitoring-grafana-bff95c48c-7kfjm     1/1       Running   0          10m       172.18.16.3   k8s-n2-16-239
monitoring-influxdb-5d474bf6d5-56pxq   1/1       Running   0          34s       172.18.52.2   k8s-n1-16-238

访问方式

kubectl proxy

本地访问方式

我们之前使用kubectl proxy就是只能loclahost访问

使用--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/  # 也是半天没出来

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-06-22T09:56:05Zlabels:k8s-app: kubernetes-dashboardname: kubernetes-dashboardnamespace: kube-systemresourceVersion: "1715288"selfLink: /api/v1/namespaces/kube-system/services/kubernetes-dashboarduid: 7abab091-7602-11e8-80c7-00505698f5d8
spec:clusterIP: 10.254.61.253ports:- port: 443protocol: TCPtargetPort: 8443selector:k8s-app: kubernetes-dashboardsessionAffinity: Nonetype: 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.254.61.253   <none>        443:30054/TCP   2hs> kubectl -n kube-system get pod  -o wide | grep dashboard
kubernetes-dashboard-9d85bdcb6-n5ngf   1/1       Running   0          14m       172.18.16.4   k8s-n2-16-239

访问

(http)https://192.168.16.239:30054/#!/login   # 登录界面,输入之前的令牌就可以登录

API Server

如果Kubernetes API服务器是公开的,并可以从外部访问,那我们可以直接使用API Server的方式来访问,也是比较推荐的方式。
Dashboard的访问地址为:

(http)https://<master-ip>:<apiserver-port>/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
(http)https://api.kubernetes.master/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文件,重新打开浏览器

因为证书无法签证通过,还是无法访问到

Ingress

使用开源的反向代理负载均衡软件(nginx,haproxy)与k8s集成,更为方便灵活的服务暴露方式,推荐使用这种,在下面的Ingress我们会将dashboard service使用traefik暴露出来进行访问的

参考blog地址

转载于:https://www.cnblogs.com/knmax/p/9215417.html

[k8s集群系列-09]Kubernetes 组件 Dashboard相关推荐

  1. 为k8s集群部署界面图形化- dashboard

    在之前的文章里,我们已经安装好了k8s集群,你可以测试k8s集群是否成功: 在Kubernetes集群中创建一个pod,验证是否正常运行: ```bash [root@k8s-master ~]# k ...

  2. Kubernetes 系列之 kubeadm 搭建k8s集群

    Kubeadm 搭建k8s集群 注意:Kubernetes 系列 所采用的kuberntetes版本都是 1.15+ 1 Master 节点安装 1.1 系统环境配置 1.1.1 设置主机名称 hos ...

  3. 搭建K8S集群之node节点部署

    在上一篇文章中,我们完成了K8S系列之K8S集群之Master节点部署,在这篇文章中,我们将开始部署Node节点相关的组件.在node节点上,需要部署kubelet和kube-proxy两个K8S组件 ...

  4. Addon SuperEdge 让原生 K8s 集群可管理边缘应用和节点

    作者 梁豪,腾讯TEG工程师,云原生开源爱好者,SuperEdge 开发者,现负责TKEX-TEG容器平台运维相关工作. 王冬,腾讯云TKE后台研发工程师,专注容器云原生领域,SuperEdge 核心 ...

  5. CentOS7中使用kubeadm快速部署一套K8S集群

    一.Kubernetes概述 1.1 Kubernetes是什么 Kubernetes是Google在2014年开源的一个容器集群管理系统,Kubernetes简称K8S K8S用于容器化应用程序的部 ...

  6. 自建k8s平台-高可用k8s集群

    自建k8s平台-高可用k8s集群 一.前置概念与操作 1.内核升级 3.10内核在大规模集群具有不稳定性 内核升级到4.19+ # 查看内核版本 uname -sr # 0.升级软件包,不升级内核 y ...

  7. 利用k8s集群部署第一个容器化应用

    准备工作 按照这篇文章描述的流程搭建好k8s集群. 部署nginx Kubernetes 跟 Docker 等很多项目最大的不同,就在于它不推荐你使用命令行的方式直接运行容器(虽然 Kubernete ...

  8. Grafana监控Docker容器+K8s集群容器

    文章目录 监控Docker容器 监控K8s集群容器 监控Docker容器 Dashboard ID:10657 原版Json文件:戳我下载 图为修改后Json文件:戳我下载~ 监控K8s集群容器 Da ...

  9. 【云原生Kubernetes系列第五篇】kubeadm v1.20 部署K8S 集群架构(人生这道选择题,总会有遗憾)

    系列文章目录 ??即日起,更新云原生相关知识,喜欢的小伙伴可以给我点个三连喔 ??收录至专栏 云原生 ??[云原生Docker系列第一篇]Docker镜像管理 ??[云原生Docker系列第二篇]Do ...

最新文章

  1. 这回导师们颤抖了,这个网站能匿名评价其“人品”,已有大量“不良”导师被爆...
  2. 暑假N天乐【比赛篇】 —— 2019杭电暑期多校训练营(第四场)
  3. poj 1144 割点和桥
  4. c语言提取图片yiq分量,图片数字水印C语言代码
  5. 达内TTS6.0课件oop_day01
  6. activity多实例任务减签
  7. PhoneGap开发环境搭建
  8. POJ3274 Gold Balanced Lineup【Hash函数】
  9. Win8(X64)下MySQL5.6版本安装及配置
  10. 微信小程序使用彩色图标(阿里巴巴矢量图标库)(炒鸡详细)
  11. 计算机上数字代表那个音符,音符时值
  12. 【生物信息学】外显子测序的原理及优缺点
  13. 〖Python自动化办公篇㉑〗- python实现邮件自动化 - 定时发送邮件
  14. 公寓宽带服务器无响应,学生宿舍公寓网络建设项目需求分析报告文档(8页)-原创力文档...
  15. Error creating bean with name ‘configurationPropertiesBeans‘ defined in class path resource异常分析
  16. 多元正态分布的性质和定理
  17. FastReport关闭弹出的进度条窗口
  18. WIFI 认证加密模式介绍
  19. c# picturebox 刷新_c# – 更新PictureBox时可能导致ArgumentException的原因是什么?
  20. Linux常用命令-文件操作 网络命令 性能命令

热门文章

  1. 【死链】JDK1.7中HashMap在多线程环境的并发问题源码分析
  2. 在docker中搭建xss漏洞靶场
  3. 量化投资学习——orderbook数据分析
  4. excel制作跨职能流程图_如何绘制泳道图(跨职能流程图)
  5. oracle sqlplus建用户,Oracle用SQL Plus创建数据库表空间和用户
  6. Unity Movetowards方法
  7. CVPR 2022: 图像分割论文大盘点
  8. HTML图片打开新窗口
  9. 对自己的大学期望与目标
  10. 记2019北航计算机夏令营体验~