全网最简单的k8用户JWT牌管理器

  
  

kubernetes集群三步安装

     

概述

  

kubernetes服务器帐户的令牌很容易获取,但是用户的令牌非常麻烦,本文给出一个极简的用户令牌生成方式,让用户可以一个http请求就能获取到。

  

标记主要用来干啥

  

官方仪表板登录时需要。如果通过使用kubeconfig文件登录而文件中又没有令牌的话会失败,现在大部分文章都介绍使用服务帐户的令牌来登录指示板,能通,不过有问题:
第一:绑定角色时要指定类型是服务帐户:

  
 <代码> apiVersion: rbac.authorization.k8s.io/v1beta1
  :ClusterRoleBinding
  元数据:
  名称:kubernetes-dashboard
  标签:
  k8s-app: kubernetes-dashboard
  roleRef:
  apiGroup: rbac.authorization.k8s.io
  :ClusterRole
  名称:集群管理员
  主题:
  类型:ServiceAccount #这里不是用户类型
  名称:kubernetes-dashboard
  名称空间:kube-system  
  

第二:要理解kubeconfig里是解析证书把CN作为用户名的,这时服务帐户即便与CN一样那还是两个账户,绑定角色时还需要绑定两次,有点像把服务帐户给“人“用,所以把服务帐户的令牌扔给某个开发人员去用往往不合适,服务帐户标记更多时候是给程序用的。

  

想直接调用https的,没有令牌就会:

  
 <代码> (root@iZj6cegflzze2l7fpcqoerZ ssl) # curl https://172.31.12.61:6443/api/v1/命名空间/违约/豆荚,没有安全感
  {
  “类型”:“状态”,
  “apiVersion”:“v1”,
  “元数据”:{
  
  },
  “状态”:“失败”,
  “消息”:“豆荚是被禁止的:用户\”系统:匿名\“不能列出资源\”吊舱\ API组\“\”在名称空间\“默认\ ",
  “原因”:“禁止”,
  "详细信息":{
  “类型”:“豆荚”
  },
  “代码”:403
  } 
  

因为没有任何认证信息,所以匿名(匿名)用户没有任何权限

  

加了令牌是这样的:

  
 <代码> (root@iZj6cegflzze2l7fpcqoerZ ssl) # curl - h”授权:无记名eyJhbGciOiJSUzI1NiIsImtpZCI6IkNnYzRPVEV5TlRVM0VnWm5hWFJvZFdJIn0.eyJpc3MiOiJodHRwczovL2RleC5leGFtcGxlLmNvbTo4MDgwIiwic3ViIjoiQ2djNE9URXlOVFUzRWdabmFYUm9kV0kiLCJhdWQiOiJleGFtcGxlLWFwcCIsImV4cCI6MTU1MTA5NzkwNiwiaWF0IjoxNTUwNzM3OTA2LCJlbWFpbCI6ImZodGpvYkBob3RtYWlsLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJncm91cHMiOlsiZGV2Il0sIm5hbWUiOiJmYW51eCJ9。ZqKn461UW0aGtyjyqu2Dc5tiUzC-6eYLag542d3AvklUdZuw8i9XwyaUg_f1OAj0ZsEcOybOe9_PeGMaUYzU0OvlKPY-q2zbQVC-m6u6sQw6ZXx8pi0W8k4wQSJnMaOLddCfurlYufmr8kScDBQlnKapSR0F9mJzvpKkHD-XNshQKWhX3n03g7OfFgb4RuhLjKDNQnoGn7DfBNntibHlF9sPo0jC5JjqTZaGvoGmiRE4PAXwxA-RJifsWDNf_jW8lrDiY4NSO_3O081cia4N1GKht51q9W3eaNMvFDD9hje7abDdZoz9KPi2vc3zvgH7cNv0ExVHKaA0-dwAZgTx4g”- k名称空间https://172.31.12.61:6443/api/v1//默认/豆荚
  {
  “类型”:“状态”,
  “apiVersion”:“v1”,
  “元数据”:{
  
  },
  “状态”:“失败”,
  “消息”:“禁止豆荚:用户\”https://dex.example.com: 8080 # fanux \“不能列出资源\”吊舱\ API组\“\”在名称空间\“\”“违约,
  “原因”:“禁止”,
  "详细信息":{
  “类型”:“豆荚”
  },
  “代码”:403
  } 
  

看,虽然还是403但是已经有了用户信息,只要给该用户授权就可正常访问了,如何授权下文介绍

  

牌种类介绍

  

标记的生成方式有很多,主要分成三种:

  
      <李>服务帐户标记这个创建服务帐户就有,存在秘密里获取比较简单,但是要区分好用户和服务帐户区别李   <李>普通的令牌,这种令牌就是个普通的字符串,一般是自己写一个认证的web钩,k8认证时调用这个钩查询令牌是否有效,比较低   <李>基于openid的智威汤逊(josn web标记)这种令牌,认证中心把用户信息放在json里,用私钥加密,k8拿到令牌后用公钥解密,只要解密成功的令牌就是合法的而且能拿到用户信息,不需要再像认证中心请求李   
  

基于openid的jwt是本文介绍的重点。

  

社区用的比较多的就是敏捷,是一个比较完整的实现,但是对于不熟悉该技术的朋友来说还是有点门槛的,容易绕进去,而且还存在一些使用不方便的问题。
如依赖复杂,首先得需要一个真正的用户管理程序,如ldap或者一个auth3服务端,这还可以接受,关键是认证时可能需要依赖浏览器进行跳转授权,这在十分多的场景里就变的十分尴尬,就比如我们的场景压根没有
界面,这样生成令牌就成了一个大问题。其次集成到别的系统中时往往用户已经登录过了,所以需要一个二次授权的过程才能拿到令牌,依赖过重导致系统难以设计。

全网最简单的k8用户JWT牌管理器