参考文档:

  1. Github介绍:https://github.com/kubernetes/dashboard
  2. 或者(各服务模块独立保存):https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/dashboard

  3. 访问dashboard:https://github.com/kubernetes/dashboard/wiki/Accessing-Dashboard---1.7.X-and-above
  4. 访问dashboard的问题(基于1.6.x版本):https://github.com/opsnull/follow-me-install-kubernetes-cluster/issues/5

Kubernetes-dashboard是kubernetes的ui网页管理工具,可提供部署应用,资源对象管理,容器日志查询,系统监控等常用的集群功能。

一.环境

1. 基础环境

组件

版本

Remark

kubernetes

v1.9.2

 

kubernetes-dashboard

v1.8.3

 

二.部署Kubernetes-dashboard

1. 准备images

kubernetes部署服务时,为避免部署时发生pull镜像超时的问题,建议提前将相关镜像pull到相关所有节点(实验),或搭建本地镜像系统。

  1. 基础环境已做了镜像加速,可参考:http://www.cnblogs.com/netonline/p/7420188.html
  2. 需要从gcr.io pull的镜像,已利用Docker Hub的"Create Auto-Build GitHub"功能(Docker Hub利用GitHub上的Dockerfile文件build镜像),在个人的Docker Hub build成功,可直接pull到本地使用。
# kubernetes-dashboard
[root@kubenode1 ~]# docker pull netonline/kubernetes-dashboard-amd64:v1.8.3

2. 下载kubernetes-dashboard相关yaml范本

#https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/dashboard
# 也可以将多种服务资源置于1个yaml文件
[root@kubenode1 ~]# mkdir -p /usr/local/src/yaml/dashboard
[root@kubenode1 ~]# cd /usr/local/src/yaml/dashboard # ConfigMap
[root@kubenode1 dashboard]# wget https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/dashboard/dashboard-configmap.yaml # Secret
[root@kubenode1 dashboard]# wget https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/dashboard/dashboard-secret.yaml # RBAC
[root@kubenode1 dashboard]# wget https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/dashboard/dashboard-rbac.yaml # dashboard-controller
[root@kubenode1 dashboard]# wget https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/dashboard/dashboard-controller.yaml # Service
[root@kubenode1 dashboard]# wget https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/dashboard/dashboard-service.yaml 本实验使用yaml文件(修改版):https://github.com/Netonline2016/kubernetes/tree/master/addons/dashboard

3. dashboard-configmap.yaml

暂不修改,针对此次验证,dashboard-controller也未使用到configmap。

4. dashboard-rbac.yaml

因api-server做了双向数字证书认证,而dashboard的展示与操作都是通过调用api-server的接口实现的,所以需要为dashboard授权,采用rbac授权模式。

# 默认dashboard-rbac.yaml定义了1个name为”kubernetes-dashboard-minimal”的Role;并做了name为”kubernetes-dashboard-minimal”的RoleBinding,向name为”kubernetes-dashboard”的ServiceAccount授权;
# 但默认的dashboard-rbac.yaml定义的Role权限太小,不太方便验证;
# 重新定义rbac,只需要定义新的ClusterRoleBinding: kubernetes-dashboard,将kubernetes自身的具有全部权限的ClusterRole: cluster-admin赋予ClusterRoleBinding;此授权方式在生产环境慎用;
# 注意红色加粗字体
[root@kubenode1 ~]# cd /usr/local/src/yaml/dashboard/
[root@kubenode1 dashboard]# vim dashboard-rbac.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: kubernetes-dashboard
namespace: kube-system
labels:
k8s-app: kubernetes-dashboard
addonmanager.kubernetes.io/mode: Reconcile
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster
-admin
subjects:
- kind: ServiceAccount
name: kubernetes-dashboard
namespace: kube-system

5. dashboard-secret.yaml

kubernetes 1.8.x 与1.9.x版本中,dashboard服务默认启用https端口,而非1.6.x版本中默认的http 9090端口,需要secret资源调用相关证书。

dashboard-secret.yaml不做修改。

6. dashboard-controller.yaml

# dashboard-controller.yaml定义了ServiceAccount资源(授权)与Deployment(服务Pod);
# 修改第33行默认使用的dashboard镜像
dashboard-controller.yaml
[root@kubenode1 dashboard]# sed -i 's|k8s.gcr.io/kubernetes-dashboard-amd64:v1.8.3|netonline/kubernetes-dashboard-amd64:v1.8.3|g' dashboard-controller.yaml

7. dashboard-service.yaml

# dashboard-service.yaml定义服务,红色加粗字体为修改或新增部分;
# 定义”NodePort” type,为验证通过控制节点直接访问dashboard(生产环境中建议不使用 方式),”nodePort: 18443”定义具体的端口,不设置则在服务端口范围中随机产生
[root@kubenode1 dashboard]# vim dashboard-service.yaml
apiVersion: v1
kind: Service
metadata:
name: kubernetes-dashboard
namespace: kube-system
labels:
k8s-app: kubernetes-dashboard
kubernetes.io/cluster-service: "true"
addonmanager.kubernetes.io/mode: Reconcile
spec:
selector:
k8s-app: kubernetes-dashboard
type: NodePort
ports:
- port: 443
targetPort: 8443
nodePort: 18443

三.验证Kubernetes-dashboard

1. 启动dashboard

# 启动rbac,secret,controller,service4个yaml文件定义的服务即可;
# 或者kubectl create -f .
[root@kubenode1 ~]# cd /usr/local/src/yaml/dashboard/
[root@kubenode1 dashboard]# kubectl create -f dashboard-rbac.yaml
[root@kubenode1 dashboard]# kubectl create -f dashboard-secret.yaml
[root@kubenode1 dashboard]# kubectl create -f dashboard-controller.yaml
[root@kubenode1 dashboard]# kubectl create -f dashboard-service.yaml

2. 查看相关服务

# 查看service,已按定义的端口做了nodePort
[root@kubenode1 dashboard]# kubectl get svc -n kube-system

# 查看deployment与pod服务
[root@kubenode1 dashboard]# kubectl get deployment -n kube-system
[root@kubenode1 dashboard]# kubectl get pod -n kube-system

3. 通过kube-apiserver访问dashboard

访问dashboard有3种方式:

  1. 通过kube-apiserver访问dashboar,;
  2. 通过kubectl proxy访问dashboard;
  3. 通过nodePort访问dashboard,建议在实验环境中使用。

参考:https://github.com/kubernetes/dashboard/wiki/Accessing-Dashboard---1.7.X-and-above

1)生成kube-apiserver的访问证书

# 因kube-apiserver启用了双向认证,而本地浏览器访问kube-apiserver时使用匿名证书(在没有导入相关证书时),导致授权失败而不能访问;
# 客户端工具kubectl访问kube-apiserver的证书之前已经生成,这里只需要转换为浏览器客户端可识别的证书即可;
# 转换时输入密码可留空,否则导入时需要输入密码
[root@kubenode1 ~]# cd /etc/kubernetes/admin/
[root@kubenode1 admin]# openssl pkcs12 -export -in admin.pem -out admin-dashboard.p12 -inkey admin-key.pem

2)导入kube-apiserver的访问证书

以firefox浏览器为例导入证书,密码输入转换时使用的密码,这里留空。

3)通过kube-apiserver访问dashboard

# 获取dashboard的kube-apiserver访问地址
[root@kubenode1 ~]# kubectl cluster-info

浏览器安全方式访问访问https://<kube-apiserver>:<port>:https://172.30.200.10:6443/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy

  1. 使用"Kubeconfig"访问,需要导入kubeconfig文件,这里即生成客户端工具kubectl访问需要的kubeconfig文件:/etc/kubernetes/admin/admin.conf;
  2. 使用令牌访问,需要输入令牌,这里通过"kubectl get secret -n kube-system | grep kubernetes-dashboard-token"获得令牌名名,再通过"kubectl describe secret kubernetes-dashboard-token-wl2wq -n kube-system"获得令牌("kubernetes-dashboard-token-wl2wq "即令牌名);
  3. 或者直接"跳过"(前提是kubernetes-dashboard具有cluster-admin权限)。

进入kubernetes首页后,默认在default命名空间。

4. 通过kube-proxy访问dashboard

# kubectl proxy可启用代理,代理不一定启用在pod所在的节点,如下例pod在172.30.200.23节点,而在172.30.200.21节点启动代理亦可
[root@kubenode1 dashboard]# kubectl get pod -n kube-system -o wide
[root@kubenode1 dashboard]# kubectl proxy --address='172.30.200.21' --port=18001 --accept-hosts='^*$'

浏览器非安全方式访问http://<代理节点>:<port>:http://172.30.200.21:18001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy

5. 通过NodePort访问dashboard

在定义dashboard-service.yaml时,已定义"nodePort" type,并指定"nodePort: 18443",此方式在生产环境不建议采用。

通过浏览器安全访问https://<node>:<port>(node可以是任意宿主机节点ip):https://172.30.200.23:18443

高可用Kubernetes集群-13. 部署kubernetes-dashboard的更多相关文章

  1. 高可用Kubernetes集群-15. 部署Kubernetes集群统一日志管理

    参考文档: Github:https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/fluentd-elasticsear ...

  2. 高可用Kubernetes集群-14. 部署Kubernetes集群性能监控平台

    参考文档: Github介绍:https://github.com/kubernetes/heapster Github yaml文件: https://github.com/kubernetes/h ...

  3. 高可用rabbitmq集群服务部署步骤

    消息队列是非常基础的关键服务,为保证公司队列服务的高可用及负载均衡,现通过如下方式实现: RabbitMQ Cluster + Queue HA + Haproxy + Keepalived 3台ra ...

  4. Ubuntu下搭建Kubernetes集群(4)--部署K8S Dashboard

    K8S Dashboard是官方的一个基于WEB的用户界面,专门用来管理K8S集群,并可展示集群的状态.K8S集群安装好后默认没有包含Dashboard,我们需要额外创建它. 首先我们执行命令: wg ...

  5. hadoop3.1.1 HA高可用分布式集群安装部署

    1.环境介绍 涉及到软件下载地址:https://pan.baidu.com/s/1hpcXUSJe85EsU9ara48MsQ 服务器:CentOS 6.8 其中:2 台 namenode.3 台 ...

  6. 企业运维实践-还不会部署高可用的kubernetes集群?使用kubeadm方式安装高可用k8s集群v1.23.7

    关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 文章目录: 0x00 前言简述 ...

  7. 一寸宕机一寸血,十万容器十万兵|Win10/Mac系统下基于Kubernetes(k8s)搭建Gunicorn+Flask高可用Web集群

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_185 2021年,君不言容器技术则已,欲言容器则必称Docker,毫无疑问,它是当今最流行的容器技术之一,但是当我们面对海量的镜像 ...

  8. 在 Kubernetes 集群快速部署 KubeSphere 容器平台

    KubeSphere 不仅支持部署在 Linux 之上,还支持在已有 Kubernetes 集群之上部署 KubeSphere,自动纳管 Kubernetes 集群的已有资源与容器. 前提条件 Kub ...

  9. 使用kubeadm部署一套高可用k8s集群

    使用kubeadm部署一套高可用k8s集群 有疑问的地方可以看官方文档 准备环境 我的机器如下, 系统为ubuntu20.04, kubernetes版本1.21.0 hostname IP 硬件配置 ...

随机推荐

  1. vue预渲染实践总结

    # 预渲染 ## 预渲染简介 SEO和首屏加载速度慢的问题,社区讨论最多的解决方案是同构 SSR,即首屏使用服务端渲染,之后的交互逻辑交给客户端处理,解决了单页应用带来的两个问题,但是也带来了服务器压 ...

  2. 使用Base64格式的图片制作ICON

    使用Base64格式的图片制作ICON的优势是Base64图片可以减少请求次数:加快首屏数据的显示速度:使用这种方式不会对图片压缩 使用base64工具将图片转成字符串 使用站长工具可以将图片转成字符 ...

  3. Swift学习笔记十:属性

    1.存储属性       1. 作为特定类或结构实例的一部分,存储属性存储着常量或者变量的值. 存储属性可分为变量存储属性(keywordvar描写叙述)和常量存储属性(keywordlet描写叙述) ...

  4. PHP百万级数据导出方案(多csv文件压缩)

    本文转自网络仅供学习之用 概述: 最近公司项目要求把数据除了页面输出也希望有导出功能,虽然之前也做过几个导出功能,但这次数据量相对比较大,差不多一天数据就20W条,要求导7天或者30天,那么数据量就轻 ...

  5. Python基础(11)——反射、异常处理

    1.反射 以下均是对对象的操作,而不是对类 class Foo(object): def __init__(self): self.name = 'wupeiqi' def func(self): r ...

  6. leetcode121—Best Time to Buy and Sell Stock

    Say you have an array for which the ith element is the price of a given stock on day i. If you were ...

  7. 蓝桥杯之剪格子(经典dfs)

    如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+ |10* 1|52| +--****--+ |20|30* 1| *******--+ | 1| 2| 3| +--+--+-- ...

  8. 异常处理简单例子--python

    捕获所有异常 #!/usr/bin/pythona = 10b = 0try: c = a/b print c print 'nothing happen...'#todo: catch all ex ...

  9. Spark1.0.0属性配置

    1:Spark1.0.0属性配置方式 Spark属性提供了大部分应用程序的控制项,并且可以单独为每个应用程序进行配置. 在Spark1.0.0提供了3种方式的属性配置: SparkConf方式 Spa ...

  10. 使用Git进行协同开发

    用了一段时间github,一直想用时间来对git的使用来做一段笔记,前段时间比较忙,现在沉下心来学习也是极好的. 很多项目开发会采用git这一优秀的分布式版本管理工具来进行项目版本管理.因为git的使 ...