2017-11-02 16:43:28 +08:00
|
|
|
|
# 升级Dashboard
|
|
|
|
|
|
|
|
|
|
我们在kubernetes1.6的时候同时安装了dashboard插件,该插件也是基于kubernetes1.6版本开发的。如今kubernetes1.8版本业已发布,如何升级dashboard以获取新版中功能呢?
|
|
|
|
|
|
|
|
|
|
Dashboard的升级比较简单,因为它仅仅是一个前端应用,用来展现集群信息和与后端API交互,理论上只需要更新原先dashboard的yaml配置文件中的镜像就可以了,但是为了使用dashboard1.7版本中的用户登陆功能,还需要做一些额外的操作。
|
|
|
|
|
|
|
|
|
|
[dashboard](https://github.com/kubernetes/dashboard)的更新日志请见[release note](https://github.com/kubernetes/dashboard/releases),当前的最新版本为v1.7.1,下面将介绍将dashboard从v1.6.3升级到v1.7.1并开启用户登陆认证的详细步骤。
|
|
|
|
|
|
|
|
|
|
## 升级步骤
|
|
|
|
|
|
|
|
|
|
**删除原来的版本**
|
|
|
|
|
|
|
|
|
|
首先删除原来的dashboard资源:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
kubectl delete -f dashboard/
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
将`dashboard`目录下的所有yaml文件中的资源全部删除,包括Deployment、service和角色绑定等。
|
|
|
|
|
|
|
|
|
|
**部署新版本**
|
|
|
|
|
|
|
|
|
|
我们使用官方的配置文件来安装,首先下载官方配置:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
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](https://github.com/rootsongjc/kubernetes-handbook/tree/master/manifests/dashboard-1.7.1/kubernetes-dashboard.yaml),然后就可以部署新版本的dashboard了。
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
kubectl create -f kubernetes-dashboard.yaml
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
获取dashboard的外网访问端口:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
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
|
|
|
|
|
```
|
|
|
|
|
|
2017-11-03 17:59:10 +08:00
|
|
|
|
访问集群中的任何一个节点,即可打开dashboard登陆页面,如https://172.20.0.113:32324/(请使用https访问),支持使用`kubeconfig`和`token`两种的认证方式:
|
2017-11-02 16:43:28 +08:00
|
|
|
|
|
|
|
|
|
![登陆界面](../images/kubernetes-dashboard-1.7.1-login.jpg)
|
|
|
|
|
|
|
|
|
|
选择本地的`kubeconfig`文件以登陆集群,`kubeconfig`文件中包括登陆的用户名、证书和token信息。
|
|
|
|
|
|
|
|
|
|
登陆之后首先看到的界面是这样的:
|
|
|
|
|
|
|
|
|
|
![首页](../images/kubernetes-dashboard-1.7.1-default-page.jpg)
|
|
|
|
|
|
|
|
|
|
这是因为该用户没有对`default`命名空间的访问权限。
|
|
|
|
|
|
|
|
|
|
修改URL地址中的`namespace`字段为该用户有权限访问的命名空间如brand:<https://172.20.0.113:32324/#!/overview?namespace=brand>:
|
|
|
|
|
|
|
|
|
|
![用户空间](../images/kubernetes-dashboard-1.7.1-brand.jpg)
|
|
|
|
|
|
|
|
|
|
### 登陆凭证
|
|
|
|
|
|
|
|
|
|
登陆dashboard的时候可以指定`kubeconfig`文件来认证用户权限,如何生成登陆dashboard时指定的`kubeconfig`文件请参考[创建用户认证授权的kubeconfig文件](../guide/kubectl-user-authentication-authorization.md)。
|
|
|
|
|
|
|
|
|
|
另外还需要生成用户token,例如为brand用户生成token:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
$ head -c 16 /dev/urandom | od -An -t x| tr -d ' '
|
|
|
|
|
a09bb459d67d876cf1829b4047394a5a
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
将该用户的token追加到kuberentes API启动参数中指定的`token`文件中,我们安装时指定的是`/etc/kubernetes/token.csv`。
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
a09bb459d67d876cf1829b4047394a5a,brand,10002,"brand"
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
注意:此处Namespace和ServiceAccount相同,都是`brand`。
|
|
|
|
|
|
|
|
|
|
重启API server也加载最新的配置。
|
|
|
|
|
|
|
|
|
|
然后在上面生成的`kubeconfig`文件中追加一行`token`的配置,如下所示:
|
|
|
|
|
|
|
|
|
|
![kubeconfig文件](../images/brand-kubeconfig-yaml.jpg)
|
|
|
|
|
|
|
|
|
|
这样就可以使用`brand.kubeconfig`文件来登陆dashboard了,而且只能访问和操作`brand`命名空间下的对象。
|
|
|
|
|
|
2017-11-02 18:08:27 +08:00
|
|
|
|
## admin用户
|
|
|
|
|
|
|
|
|
|
以上是对普通用户登陆验证,管理员用户如何登陆dashboard呢?
|
|
|
|
|
|
|
|
|
|
需要创建一个admin用户并授予admin角色绑定,使用下面的yaml文件创建admin用户并赋予他管理员权限,然后可以通过token登陆dashbaord,该文件见[admin-role.yaml](https://github.com/rootsongjc/kubernetes-handbook/tree/master/manifests/dashboard-1.7.1/admin-role.yaml)。
|
|
|
|
|
|
|
|
|
|
```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
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
然后执行下面的命令:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
kubectl create -f admin-role.yaml
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
创建完成后获取secret和token的值。
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# 获取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
|
|
|
|
|
```
|
|
|
|
|
|
2017-11-03 17:59:10 +08:00
|
|
|
|
在dashboard登录页面上使用上面输出中的那个**非常长的字符串**作为token登录,既可以拥有管理员权限操作整个kubernetes集群中的对象。当然您也可以将这串token加到admin用户的`kubeconfig`文件中,继续使用`kubeconfig`登录,两种认证方式任您选择。
|
2017-11-02 18:08:27 +08:00
|
|
|
|
|
2017-11-02 16:43:28 +08:00
|
|
|
|
## 参考
|
|
|
|
|
|
|
|
|
|
[Dashboard log in mechanism #2093](https://github.com/kubernetes/dashboard/issues/2093)
|
|
|
|
|
|
|
|
|
|
[Accessing Dashboard 1.7.X and above](https://github.com/kubernetes/dashboard/wiki/Accessing-Dashboard---1.7.X-and-above)
|