升级Dashboard

我们在kubernetes1.6的时候同时安装了dashboard插件,该插件也是基于kubernetes1.6版本开发的。如今kubernetes1.8版本业已发布,如何升级dashboard以获取新版中功能呢?

Dashboard的升级比较简单,因为它仅仅是一个前端应用,用来展现集群信息和与后端API交互,理论上只需要更新原先dashboard的yaml配置文件中的镜像就可以了,但是为了使用dashboard1.7版本中的用户登陆功能,还需要做一些额外的操作。

dashboard的更新日志请见release note,当前的最新版本为v1.7.1,下面将介绍将dashboard从v1.6.3升级到v1.7.1并开启用户登陆认证的详细步骤。

升级步骤

删除原来的版本

首先删除原来的dashboard资源:

kubectl delete -f dashboard/

dashboard目录下的所有yaml文件中的资源全部删除,包括Deployment、service和角色绑定等。

部署新版本

我们使用官方的配置文件来安装,首先下载官方配置:

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

修改其中的两个镜像地址为我们的私有地址。

  • gcr.io/google_containers/kubernetes-dashboard-init-amd64:v1.0.1
  • gcr.io/google_containers/kubernetes-dashboard-amd64:v1.7.1

这个两个镜像可以同时从时速云上获取:

  • index.tenxcloud.com/jimmy/kubernetes-dashboard-amd64:v1.7.1
  • index.tenxcloud.com/jimmy/kubernetes-dashboard-init-amd64:v1.0.1

将service type设置为NodePort,修改后的yaml文件见kubernetes-dashboard.yaml,然后就可以部署新版本的dashboard了。

kubectl create -f kubernetes-dashboard.yaml

获取dashboard的外网访问端口:

kubectl -n kube-system get svc kubernetes-dashboard
NAME                   CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
kubernetes-dashboard   10.254.177.181   <nodes>       443:32324/TCP   49m

访问集群中的任何一个节点,即可打开dashboard登陆页面,如https://172.20.0.113:32324/(请使用https访问),支持使用`kubeconfig`和`token`两种的认证方式:

登陆界面
图片 - 登陆界面

选择本地的kubeconfig文件以登陆集群,kubeconfig文件中包括登陆的用户名、证书和token信息。

登陆之后首先看到的界面是这样的:

首页
图片 - 首页

这是因为该用户没有对default命名空间的访问权限。

修改URL地址中的namespace字段为该用户有权限访问的命名空间如brand:https://172.20.0.113:32324/#!/overview?namespace=brand

用户空间
图片 - 用户空间

登陆凭证

登陆dashboard的时候可以指定kubeconfig文件来认证用户权限,如何生成登陆dashboard时指定的kubeconfig文件请参考创建用户认证授权的kubeconfig文件

另外还需要生成用户token,例如为brand用户生成token:

$ head -c 16 /dev/urandom | od -An -t x| tr -d ' '
a09bb459d67d876cf1829b4047394a5a

将该用户的token追加到kuberentes API启动参数中指定的token文件中,我们安装时指定的是/etc/kubernetes/token.csv

a09bb459d67d876cf1829b4047394a5a,brand,10002,"brand"

注意:此处Namespace和ServiceAccount相同,都是brand

重启API server也加载最新的配置。

然后在上面生成的kubeconfig文件中追加一行token的配置,如下所示:

kubeconfig文件
图片 - kubeconfig文件

这样就可以使用brand.kubeconfig文件来登陆dashboard了,而且只能访问和操作brand命名空间下的对象。

admin用户

以上是对普通用户登陆验证,管理员用户如何登陆dashboard呢?

需要创建一个admin用户并授予admin角色绑定,使用下面的yaml文件创建admin用户并赋予他管理员权限,然后可以通过token登陆dashbaord,该文件见admin-role.yaml

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: admin
  annotations:
    rbac.authorization.kubernetes.io/autoupdate: "true"
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
  name: admin
  namespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin
  namespace: kube-system
  labels:
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile

然后执行下面的命令:

kubectl create -f admin-role.yaml

创建完成后获取secret和token的值。

# 获取admin-token的secret名字
$ kubectl -n kube-system get secret|grep admin-token
admin-token-nwphb                          kubernetes.io/service-account-token   3         6m
# 获取token的值
$ kubectl -n kube-system describe secret admin-token-nwphb
Name:        admin-token-nwphb
Namespace:    kube-system
Labels:        <none>
Annotations:    kubernetes.io/service-account.name=admin
        kubernetes.io/service-account.uid=f37bd044-bfb3-11e7-87c0-f4e9d49f8ed0

Type:    kubernetes.io/service-account-token

Data
====
namespace:    11 bytes
token:        非常长的字符串
ca.crt:        1310 bytes

在dashboard登录页面上使用上面输出中的那个非常长的字符串作为token登录,既可以拥有管理员权限操作整个kubernetes集群中的对象。当然您也可以将这串token加到admin用户的kubeconfig文件中,继续使用kubeconfig登录,两种认证方式任您选择。

参考

Dashboard log in mechanism #2093

Accessing Dashboard 1.7.X and above

Copyright © jimmysong.io 2017 all right reserved,powered by GitbookUpdated: 2017-11-02 18:22:31

results matching ""

    No results matching ""