系列目录

kubernetes dashboard是kubernetes官方提供的web管理界面,通过dashboard可以很方便地查看集群的各种资源.以及修改资源编排文件,对集群进行扩容操作,查看日志等.功能非常强大.虽然dashboard是官方提供的web管理界面,但是并没有默认安装,需要额外安装.下面将介绍如何安装kubernetes dashboard以及如何访问.

dashboard安装

使用如下命令:

wget https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended/kubernetes-dashboard.yaml

在windows平台在浏览器直接输入网址即可下载

把dashboard的yaml编排文件下载下来到本地,然后进入下载目录,修改刚下载的kubernetes-dashboard.yaml文件,找到image栏,删除它的值(不要把键删了,即删除image:后面的值,保留键),然后替换为:registry.cn-hangzhou.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.0

注意,有些网上的教程直接使用kubernetes的官方提供的安装命令,即kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended/kubernetes-dashboard.yaml这是不科学的,因为这个yml文件使用的镜像存放在gcr.io上,很多用户是无法访问的,因此需要修改镜像源.

修改完yml文件后,我们在kubernetes-dashboard.yaml所在目录执行kubectl apply -f kubernetes-dashboard.yaml即可完成安装.

使用proxy方式访问 dashboard

这里先介绍一个坑,就是很多互联网上的教程照般官网上的示例教程,即使用kubectl proxy然后在浏览器输入http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/.,这种方式只能用在windows或者mac上的docker.而linux服务器往往是没有图形界面的,没法直接通过浏览器访问,机智的你可能马上会想到,把localhost换成对应主机的ip,即可以在局域网访问了.然而实际情况并没有这么美好,大家可以试一下改成ip后也是访问不了的.

正确的姿势是执行以下命令:

kubectl proxy --address='0.0.0.0'  --accept-hosts='^*$'

这时候就可以通过其它主机访问dashboard了.(以上地址中localhost改为ip地址)

如果没有登陆,则会默认定向到登陆页面,可以使用config或者token方式登陆.我们这里使用token方式登陆.

一般情况下,登陆的token默认都以secret对象的形式存在kube-system名称空间下,我们执行kubectl get secret -n=kube-system

attachdetach-controller-token-zzdbv              kubernetes.io/service-account-token   3      37d
bootstrap-signer-token-kn7mv kubernetes.io/service-account-token 3 37d
certificate-controller-token-ck4bp kubernetes.io/service-account-token 3 37d
clusterrole-aggregation-controller-token-gd8sq kubernetes.io/service-account-token 3 37d
coredns-token-tm8nw kubernetes.io/service-account-token 3 37d
cronjob-controller-token-4p64q kubernetes.io/service-account-token 3 37d
daemon-set-controller-token-dhl8h kubernetes.io/service-account-token 3 37d
dashboard-admin-token-sg6bp kubernetes.io/service-account-token 3 23h
default-token-tl6cs kubernetes.io/service-account-token 3 37d
deployment-controller-token-bs8zp kubernetes.io/service-account-token 3 37d
disruption-controller-token-snpvq kubernetes.io/service-account-token 3 37d
endpoint-controller-token-4kgz8 kubernetes.io/service-account-token 3 37d
expand-controller-token-6j57x kubernetes.io/service-account-token 3 37d
flannel-token-f857v kubernetes.io/service-account-token 3 37d
generic-garbage-collector-token-2j6zz kubernetes.io/service-account-token 3 37d
horizontal-pod-autoscaler-token-l7gt5 kubernetes.io/service-account-token 3 37d
job-controller-token-57rtv kubernetes.io/service-account-token 3 37d
kube-proxy-token-bf969 kubernetes.io/service-account-token 3 37d
kubernetes-dashboard Opaque 0 36d
kubernetes-dashboard-key-holder Opaque 2 36d
kubernetes-dashboard-token-8z4v2 kubernetes.io/service-account-token 3 36d
namespace-controller-token-zp4vx kubernetes.io/service-account-token 3 37d
node-controller-token-9kbmx kubernetes.io/service-account-token 3 37d
persistent-volume-binder-token-knjs7 kubernetes.io/service-account-token 3 37d
pod-garbage-collector-token-p7xhk kubernetes.io/service-account-token 3 37d
pv-protection-controller-token-9rsjc kubernetes.io/service-account-token 3 37d
pvc-protection-controller-token-5z68z kubernetes.io/service-account-token 3 37d
replicaset-controller-token-gsfhs kubernetes.io/service-account-token 3 37d
replication-controller-token-pvgrh kubernetes.io/service-account-token 3 37d
resourcequota-controller-token-pmtsh kubernetes.io/service-account-token 3 37d
service-account-controller-token-6zvnc kubernetes.io/service-account-token 3 37d
service-controller-token-dnw2d kubernetes.io/service-account-token 3 37d
statefulset-controller-token-zn6tn kubernetes.io/service-account-token 3 37d
tiller-token-7lpwt kubernetes.io/service-account-token 3 10d
token-cleaner-token-df7n5 kubernetes.io/service-account-token 3 37d
ttl-controller-token-kfsh5 kubernetes.io/service-account-token 3 37d
[centos@k8s-master dashboard]$

这些secrets中的大部分都可以用来访问dashboard的,只有不同的账户权限不同,很多账户被限制不能进行操作.比如我们使用名称为default-token-tl6cs的secret包含的token进行登陆

注意,不同的机器上secret的名称是不一样的,读者以自己实际情况为主.

我们使用以下命令来查看这个secret包含的token的值

[centos@k8s-master dashboard]$ kubectl describe secret -n=kube-system default-token-tl6cs
Name: default-token-tl6cs
Namespace: kube-system
Labels: <none>
Annotations: field.cattle.io/projectId: c-tms4q:p-5bmgn
kubernetes.io/service-account.name: default
kubernetes.io/service-account.uid: f760bf27-44ab-11e9-a5c4-0050568417a2 Type: kubernetes.io/service-account-token Data
====
ca.crt: 1025 bytes
namespace: 11 bytes
token: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkZWZhdWx0LXRva2VuLXRsNmNzIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImRlZmF1bHQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJmNzYwYmYyNy00NGFiLTExZTktYTVjNC0wMDUwNTY4NDE3YTIiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06ZGVmYXVsdCJ9.yVU85i5naX14TimIlQL0jgTv0oFsEFix7l55Wo09_Q9KbTavL2cjpdu26fHF7OtMCgGAsqxO0R_vOy_vVaPav6AvRWmCBPUEBr_oG_AcJCzdWvmCQkClAGaoZjGNx_qAbuJ3ZD9CG7C_QzjIIqMtjN7DVWjop2vQbByZL2yqkavMchuatr_LYkb_EsaGSKXFAZfDlqt7IO9IqGULl5Ri99fojCD230ji9QRO7x5g75Z6nBT1xf1g7txSAOppEn9S_J90CJ30tt0c9pEAhQ1qisLWpw0sZTBjjq4XcTjAszKe2u3G-ed5XLwEe_0xylbubRhT68XKWKUgBYx8IaqxIA
[centos@k8s-master dashboard]$

我们复制以上token值,然后粘贴到登陆页面的token里,就可以登陆了.

可以看到已经登陆进来了,但是这个用户没有任何权限,甚至连查看权限都没有.

我们使用一个叫作replicaset-controller-token-gsfhs的secret里包含的token来登陆,根据名字可以大概可以知道它是用来管理replicaset用的.实际上也确实是的,我们用它的token登陆来看一下web界面展示的内容

这里仅展示内容,操作方法与以上一样,这里就略过了

下面展示的还有replicaset的信息,这里我就没有截这么多.

由于replicaset包含的是pod的集合,因此这里展示出的有pod的信息

初次接触的朋友可能并不知道以上是不是展示的全部信息,因为并没有见过完整信息是什么样子的,这里先展示一下一个拥有完整权限的用户登陆后展示的信息是什么样子的.

从图形概览上可以看到,展示的信息比以上多.

下面我们来讲解如何配置一个拥有完整权限的token.

  • 创建一个dashboard管理用户
kubectl create serviceaccount dashboard-admin -n kube-system
  • 绑定用户为集群管理用户
kubectl create clusterrolebinding dashboard-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin

执行完以上操作后,由于管理用户的名称为dashboard-admin,生成的对应的secret的值则为dashboard-admin-token-随机字符串我的机器上完整名称为dashboard-admin-token-sg6bp

[centos@k8s-master dashboard]$ kubectl get secret -n=kube-system |grep dashboard-admin-token
dashboard-admin-token-sg6bp kubernetes.io/service-account-token 3 23h
[centos@k8s-master dashboard]$

可以看到这个secret的完整名称,或者不使用grep管道,列出所有的secrets,然后从中寻找需要的.

通过上面介绍过的kubectl describe secret命令查看token

[centos@k8s-master dashboard]$ kubectl describe -n=kube-system  secret dashboard-admin-token-sg6bp
Name: dashboard-admin-token-sg6bp
Namespace: kube-system
Labels: <none>
Annotations: kubernetes.io/service-account.name: dashboard-admin
kubernetes.io/service-account.uid: c60d2a65-619e-11e9-a627-0050568417a2 Type: kubernetes.io/service-account-token Data
====
ca.crt: 1025 bytes
namespace: 11 bytes
token: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tc2c2YnAiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiYzYwZDJhNjUtNjE5ZS0xMWU5LWE2MjctMDA1MDU2ODQxN2EyIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.Ai8UqLHNbwVFf4QRq1p0JdVVy-KuguSTrsJRYmh-TEArH-Bkp0yBWNPpsP8fKL8MRMwlZEyJml-GZEoWvEbInvrgLHtMgA0A6Xbq89fvXqnLQBWsjEnrdIBSHmksLk4v_ldvVrnr6XXK8LGB34TVWxeYvSfv8aF35hXAV_r5-p18t7m9GFxU0_z1Gq1Af9GMA4wotERaWd1hHqNIcrDF8UpgUw2952nIu_VxGSV6eCagPxlpjbyAPrcEjSBK7O7QACtKXnG0bW8MqNaNYiLksYpvtJS7f0GlTeTpDZoj--5gJqAcNanCy7eQU8LuF-fiUaZIfXe0ZaWH0M1mjcAskA
[centos@k8s-master dashboard]$

我们把以上token复制到登陆页面的token栏里,就可以登陆了.登陆以后就可以看到如上面最后展示的有完整信息的界面.

使用kubeconfig文件访问

这里只记录下命令,不做详细介绍,在dashboard 1.10.1里尝试了数次以及按照官网设置--authentication-mode=config也不行,这里就不再做详细介绍了.

DASH_TOCKEN=$(kubectl get secret -n kube-system dashboard-admin-token-sg6bp -o jsonpath={.data.token}|base64 -d)

kubectl config set-cluster kubernetes --server=192.168.124.59:6443 --kubeconfig=/root/dashbord-admin.conf

kubectl config set-credentials dashboard-admin --token=$DASH_TOCKEN --kubeconfig=/root/dashbord-admin.conf

kubectl config set-context dashboard-admin@kubernetes --cluster=kubernetes --user=dashboard-admin --kubeconfig=/root/dashbord-admin.conf

kubectl config user-context dashboard-admin@kubernets --kubeconfig=/root/dashbord-admin.conf

生成的dashbord-admin.conf即可用于登录dashboard

开启跳过登陆

根据使用的版本不同,可能有的版本包含skip按钮,有的则不包含,在1.10.1里面默认不再显然skip按钮,其实dashboard安装有很多坑,如果有读者按照以上设置仍然不能正常成功登陆,但是仍然想要体验dashboard,可以开启默认关闭的skip按钮,这样就可以进入到dashboard管理界面了.

注意,生产环境强烈不建议这样做.

执行命令

kubectl edit deploy -n=kube-system kubernetes-dashboard

在containers下面的args栏里输入

- --enable-skip-login

内容如下

然后保存即可.刷新web页面,登陆界面就会多出一个skip按钮.

kubernetes实战篇之dashboard搭建的更多相关文章

  1. kubernetes实战篇之Dashboard的访问权限限制

    系列目录 前面我们的示例中,我们创建的ServiceAccount是与cluster-admin 绑定的,这个用户默认有最高的权限,实际生产环境中,往往需要对不同运维人员赋预不同的权限.而根据实际情况 ...

  2. kubernetes实践之二:Kubernetes可视WEB UI Dashboard搭建

    Kubernetes可视WEBUI Dashboard搭建 支持浏览器:火狐 一.Dashboard下载地址 git clone https://github.com/kubernetes/kuber ...

  3. kubernetes实战篇之docker镜像的打包与加载

    系列目录 前面我们讲到了使用nexus搭建docker镜像仓库,操作还是有点复杂的,可能有的童鞋仅仅是想尝试kubernetes功能,并不想在搭建仓库上花费过多时间,但是又想在不同的主机之间传递镜像. ...

  4. kubernetes实战篇之通过api-server访问dashboard

    系列目录 前面一节我们介绍了如何使用kube-proxy搭建代理访问dashboard,这样做缺点非常明显,第一可以通过http访问,第二是这种方式要启动一个后台进程,如果进程关闭了则不能够访问了,还 ...

  5. kubernetes实战篇之部署一个.net core微服务项目

    目录 继上一篇kubernetes理论知识完结.本篇主要讲解基于nexus搭建一个docker镜像仓库(当然大家实践过程是不必完全跟着做,也可以搭建harbor仓库或者直接把镜像推送到docker h ...

  6. kubernetes实战篇之helm填坑与基本命令

    系列目录 其实前面安装部分我们已经分享一些互联网上其它网友分享的一些坑,本篇介绍helm的基本使用以及在使用过程中碰到的一些坑. 客户端版本和服务端版本不一致问题 有些朋友可能在使用helm init ...

  7. kubernetes实战篇之创建密钥自动拉取私服镜像

    系列目录 前面我们讲解了如何搭建nexus服务器,以及如何使用nexus搭建docker私有镜像仓库,示例中我们都是手动docker login登陆私服,然后通过命令拉取镜像然后运行容器.然而这种做法 ...

  8. kubernetes实战篇之创建一个只读权限的用户

    系列目录 上一节我们讲解到了如何限制用户访问dashboard的权限,这节我们讲解一个案例:如何创建一个只读权限的用户. 虽然可以根据实际情况灵活创建各种权限用户,但是实际生产环境中往往只需要两个就行 ...

  9. kubernetes实战篇之helm安装

    系列目录 Helm是kubernetes的应用包管理工具,是CNCF孵化器下的一个项目,主要用来管理 Charts.类似于 Ubuntu 中的 APT 或 CentOS 中的 YUM.它提供了一种简单 ...

随机推荐

  1. jQuery多库共存处理$.noConflict()

    如果我们需要同时使用jQuery和其他JavaScript库,我们可以使用 $.noConflict()把$的控制权交给其他库.旧引用的$ 被保存在jQuery的初始化; noConflict() 简 ...

  2. LeetCode: Generate Parentheses [021]

    [称号] Given n pairs of parentheses, write a function to generate all combinations of well-formed pare ...

  3. Qt、Qte与Qtopia(Qt嵌入式的发展历程)

    Qt的授权是分为两条线,商业版和开源版.如果使用商业版的Qt,那么开发出的程序可以是私有的和商业的:如果使用的是开源版的Qt,由于其使用的是GPL协议,那么可发出的程序也必须是GPL的.不过自从qt ...

  4. python实现DES加密算法和3DES加密算法

    pyDes.py ############################################################################# # Documentati ...

  5. Poco logger 日志使用小析

    Poco logger 日志使用小析 Poco logger 日志使用小析 日志 logger 库选择 Pocologger 架构简析 步骤一 生成消息 步骤二 写入logger 步骤三 导入chan ...

  6. python 教程 第四章、 控制流

    第四章. 控制流 控制语句后面要加冒号: 1)    if语句 if guess == number: print 'Congratulations, you guessed it.' # New b ...

  7. 【iOS发展-89】UIGestureRecognizer完整的旋转手势识别、缩放和拖拽等效果

    (1)效果 (2)代码 http://download.csdn.net/detail/wsb200514/8261001 (3)总结 --先依据所需创建不同类型的手势识别.比方: UITapGest ...

  8. WPF 4 日期选择器(DatePicker)

    原文:WPF 4 日期选择器(DatePicker)      前一篇<WPF 4 日历控件(Calendar)> 中我们对日历控件的使用方式有了基本了解,本篇将继续介绍WPF 4 中另一 ...

  9. 基于IOCP的高速文件传输代码

    //服务端: const   //transmit用的参数   TF_USE_KERNEL_APC     = $20;   //命令类型   CMD_CapScreen             =  ...

  10. JavaScript严格模式分析

    简要:严格模式(strict mode)是JavaScript在ES5里面新增的编码模式,只要一行代码 就可开启,可谓 非常简单了,而它对于 我们的编码来说到底有什么不同呢? 一. 严格模式的目的? ...