高可用Kubernetes集群-13. 部署kubernetes-dashboard
参考文档:
- Github介绍:https://github.com/kubernetes/dashboard
- Github yaml文件:https://github.com/kubernetes/dashboard/blob/master/src/deploy/recommended/kubernetes-dashboard.yaml
或者(各服务模块独立保存):https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/dashboard
- 访问dashboard:https://github.com/kubernetes/dashboard/wiki/Accessing-Dashboard---1.7.X-and-above
- 访问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到相关所有节点(实验),或搭建本地镜像系统。
- 基础环境已做了镜像加速,可参考:http://www.cnblogs.com/netonline/p/7420188.html
- 需要从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种方式:
- 通过kube-apiserver访问dashboar,;
- 通过kubectl proxy访问dashboard;
- 通过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
- 使用"Kubeconfig"访问,需要导入kubeconfig文件,这里即生成客户端工具kubectl访问需要的kubeconfig文件:/etc/kubernetes/admin/admin.conf;
- 使用令牌访问,需要输入令牌,这里通过"kubectl get secret -n kube-system | grep kubernetes-dashboard-token"获得令牌名名,再通过"kubectl describe secret kubernetes-dashboard-token-wl2wq -n kube-system"获得令牌("kubernetes-dashboard-token-wl2wq "即令牌名);
- 或者直接"跳过"(前提是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的更多相关文章
- 高可用Kubernetes集群-15. 部署Kubernetes集群统一日志管理
参考文档: Github:https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/fluentd-elasticsear ...
- 高可用Kubernetes集群-14. 部署Kubernetes集群性能监控平台
参考文档: Github介绍:https://github.com/kubernetes/heapster Github yaml文件: https://github.com/kubernetes/h ...
- 高可用rabbitmq集群服务部署步骤
消息队列是非常基础的关键服务,为保证公司队列服务的高可用及负载均衡,现通过如下方式实现: RabbitMQ Cluster + Queue HA + Haproxy + Keepalived 3台ra ...
- Ubuntu下搭建Kubernetes集群(4)--部署K8S Dashboard
K8S Dashboard是官方的一个基于WEB的用户界面,专门用来管理K8S集群,并可展示集群的状态.K8S集群安装好后默认没有包含Dashboard,我们需要额外创建它. 首先我们执行命令: wg ...
- hadoop3.1.1 HA高可用分布式集群安装部署
1.环境介绍 涉及到软件下载地址:https://pan.baidu.com/s/1hpcXUSJe85EsU9ara48MsQ 服务器:CentOS 6.8 其中:2 台 namenode.3 台 ...
- 企业运维实践-还不会部署高可用的kubernetes集群?使用kubeadm方式安装高可用k8s集群v1.23.7
关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 文章目录: 0x00 前言简述 ...
- 一寸宕机一寸血,十万容器十万兵|Win10/Mac系统下基于Kubernetes(k8s)搭建Gunicorn+Flask高可用Web集群
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_185 2021年,君不言容器技术则已,欲言容器则必称Docker,毫无疑问,它是当今最流行的容器技术之一,但是当我们面对海量的镜像 ...
- 在 Kubernetes 集群快速部署 KubeSphere 容器平台
KubeSphere 不仅支持部署在 Linux 之上,还支持在已有 Kubernetes 集群之上部署 KubeSphere,自动纳管 Kubernetes 集群的已有资源与容器. 前提条件 Kub ...
- 使用kubeadm部署一套高可用k8s集群
使用kubeadm部署一套高可用k8s集群 有疑问的地方可以看官方文档 准备环境 我的机器如下, 系统为ubuntu20.04, kubernetes版本1.21.0 hostname IP 硬件配置 ...
随机推荐
- PHP 与 YAML
PHP 与 YAML 这一段时间都没有写blog,并不是因为事情多,而是自己变懒了.看到新技术也不愿意深入思考其背后的原理,学习C++语言了近一个多月,由于学习方法有问题,并没有什么项目可以练手.靠每 ...
- vc获取当前进程CPU使用率
double GetCPUUserRate() { HANDLE hProcess=::GetCurrentProcess(); static DWORD s_dwTickCountOld = 0; ...
- github团队使用记录
Last login: Sat Nov 4 09:20:15 on ttys000 bogon:~ neveszhang$ git clone git@github.com:031502243/Cla ...
- BZOJ4184:shallot(线段树分治,线性基)
Description 小苗去市场上买了一捆小葱苗,她突然一时兴起,于是她在每颗小葱苗上写上一个数字,然后把小葱叫过来玩游戏. 每个时刻她会给小葱一颗小葱苗或者是从小葱手里拿走一颗小葱苗,并且 让小葱 ...
- ethereumjs/ethereumjs-util
ethereumjs/ethereumjs-util Most of the string manipulation methods are provided by ethjs-util 更多的字符串 ...
- nginx中server的匹配顺序
在开始处理一个http请求时,nginx会取出header头中的host,与nginx.conf中每个server的server_name进行匹配,以此决定到底由哪一个server块来处理这个请求. ...
- VC++环境下单文档SDI与OpenGL多视图分割窗口的实现-类似3DMAX的主界面
本文主要讲述如何在VC++环境下实现单文档SDI与OpenGL多视图分割窗口,最终的界面类似3DMAX的主界面.首先给出我实现的效果图: 整个实现过程网络上有很多零散的博文,请各位自行搜索,在基于对话 ...
- PAT B1002 写出这个数
读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10100. 输出格式:在一行内输出n的各位数字之和的每 ...
- mybatis的一对一,一对多查询,延迟加载,缓存介绍
一对一查询 需求 查询订单信息关联查询用户信息 sql语句 /*通过orders关联查询用户使用user_id一个外键,只能关联查询出一条用户记录就可以使用内连接*/ SELECT orders.*, ...
- Apple 相关官方地址
https://developer.apple.com/download/more/ 证书制作地址: https://developer.apple.com/account/ios/profile/ ...