[转帖] k8s dashboard 的创建 升级 以及 admin token的创建和简单使用.

本文介绍如何从Kubernetes 1.6版本的Dashboard升级到1.8版本,并开启用户登录认证功能。涉及删除旧版本、部署新版本、获取外部访问端口等步骤,支持kubeconfig和token两种认证方式。

Kubernetes Dashboard中的身份认证详解

https://jimmysong.io/posts/kubernetes-dashboard-upgrade/
 
Thu Nov 2, 2017
1900 Words|Read in about 4 Min
Tags: kubernetes   dashboard  

升级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并开启用户登陆认证的详细步骤。

本文已归档到kubernetes-handbook中。

升级步骤

删除原来的版本

首先删除原来的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访问),支持使用kubeconfigtoken两种的认证方式:

登陆界面

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

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

首页

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

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

用户空间

身份认证

登陆 dashboard 的时候支持 kubeconfig 和 token 两种认证方式,kubeconfig 中也依赖 token 字段,所以生成 token 这一步是必不可少的。

下文分两块来讲解两种登陆认证方式:

  • 为 brand 命名空间下的 brand 用户创建 kubeconfig 文件
  • 为集群的管理员(拥有所有命名空间的 amdin 权限)创建 token

使用 kubeconfig

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

注意我们生成的 kubeconfig 文件中没有 token 字段,需要手动添加该字段。

比如我们为 brand namespace 下的 brand 用户生成了名为 brand.kubeconfig 的 kubeconfig 文件,还要再该文件中追加一行 token 的配置(如何生成 token 将在下文介绍),如下所示:

kubeconfig文件

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

生成 token

需要创建一个 admin 用户并授予 admin 角色绑定,使用下面的 yaml 文件创建 admin 用户并赋予他管理员权限,然后可以通过 token 登陆 dashbaord,该文件见 admin-role.yaml。这种认证方式本质上是通过 Service Account 的身份认证加上 Bearer token 请求 API server 的方式实现,参考 Kubernetes 中的认证

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 

然后执行下面的命令创建 serviceaccount 和角色绑定,对于其他命名空间的其他用户只要修改上述 yaml 中的 name 和 namespace 字段即可:

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 登录页面上使用上面输出中的那个非常长的字符串进行 base64 解码后作为 token 登录,即可以拥有管理员权限操作整个kubernetes集群中的对象。当然您也可以将这串 token 进行 base64 解码后,加到 admin 用户的kubeconfig文件中,继续使用kubeconfig登录,两种认证方式任您选择。

注意:一定要将 kubectl 的输出中的 token 值进行 base64 解码,在线解码工具 base64decode,Linux 和 Mac 有自带的 base64 命令也可以直接使用,输入 base64 是进行编码,Linux 中base64 -d 表示解码,Mac 中使用 base64 -D

也可以使用 jsonpath 的方式直接获取 token 的值,如:

kubectl -n kube-system get secret admin-token-nwphb -o jsonpath={.data.token}|base64 -d

注意我们使用了 base64 对其重新解码,因为 secret 都是经过 base64 编码的,如果直接使用 kubectl 中查看到的 token 值会认证失败,详见 secret 配置。关于 JSONPath 的使用请参考 JSONPath 手册

参考

Thu Nov 2, 2017
1900 Words|Read in about 4 Min
Tags: kubernetes   dashboard  

转载于:https://www.cnblogs.com/jinanxiaolaohu/p/9472651.html

### Kubernetes Dashboard Token 登录失败解决方案 当遇到 Kubernetes Dashboard 使用 Token 登录失败的情况时,可能的原因包括但不限于 Token 获取方式错误、权限不足以及环境配置问题。以下是详细的排查解决方法。 #### 1. 正确获取 Admin Token 确保按照标准流程获取具有管理员权限的 Token 是解决问题的关键之一。可以通过以下命令获取 `dashboard-admin` 的 Token: ```bash kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep kubernetes-dashboard-admin-token | awk '{print $1}') ``` 这条命令会返回 Secret 中存储的 Token 值,用于后续登录操作[^1]。 #### 2. 检查 RBAC 权限设置 如果使用的是自定义角色或服务账户,则需确认该账号已赋予足够的访问权限。通常建议创建专门的服务账户并绑定 ClusterRoleBinding 或 RoleBinding 资源以授予适当权限。例如: ```yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: admin-user roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: admin-user namespace: kube-system ``` 此 YAML 文件定义了一个名为 `admin-user` 的 ClusterRoleBinding,将其与拥有完全控制权的 `cluster-admin` 角色关联起来[^4]。 #### 3. 确认 API Server Frontend 连接正常 有时前端页面加载缓慢甚至无法显示也可能影响到实际登录体验。此时可尝试通过端口转发的方式直接连接至本地浏览器查看是否存在网络层面的问题: ```bash kubectl -n kubernetes-dashboard port-forward svc/kubernetes-dashboard 8443:443 ``` 上述指令允许用户绕过外部代理直接访问 Dashboard 页面,有助于排除中间环节带来的干扰因素[^2]。 #### 4. 版本兼容性考量 考虑到不同版本间的差异可能导致某些特性不可用或者行为改变,在选择安装包时应尽量保持 Kubelet、API Server 及其他组件之间的版本一致性。对于较新的 Kubernetes 发行版而言,推荐选用官方维护支持的良好适配版本组合,比如 v2.x.x 系列作为 Dashboard 插件[^3]。 #### 5. 验证集群健康状态 最后一步是对整个集群的状态进行全面检查,特别是 CoreDNS Pod 是否处于 Running 状态以及其他关键服务是否运行良好。这可通过执行如下命令完成初步诊断: ```bash kubectl get cs kubectl get pods -A -o wide ``` 这些命令能够帮助识别潜在的基础架构故障点,从而为进一步分析提供依据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值