从Dashboard鉴权认识Kubernetes的用户认证
Kubernetes 用户认证
Kubernetes的API准入(Access Control)分为用户认证(Authenticating)
、鉴权(Authorization)
两个部分。鉴权
是对权限的控制,来控制角色(Role)、用户(User)是否能访问对象,主要通过RBAC、ABAC实现,你大概率听说过这两种鉴权控制策略。当然鉴权不是本片讨论的重点,下面内容我们主要讨论认证部分。
1. Kubernetes中的用户
开始前我们先看下k8s怎么定义用户。
所有的Kubrnetes集群都有两种用户:Kubernetes管理的
服务账号
和普通用户
All Kubernetes clusters have two categories of users: service accounts managed by Kubernetes, and normal users.
1.1.ServiceAccount 服务账号
ServiceAccount(下称SA)为Pod(中的进程)提供身份认证,用来做API访问、镜像仓库等认证。我们本篇中的Dashboard案例即使用SA做认证来访问集群API。SA的作用域是Namespace。
1.2.Normal User 普通用户
普通用户并不由Kubernets管理,可以通过在x509证书中subject字段确定访问者用户名,也可以可以通过OpenID Connect
、Webhook Token
等方式SSO方式认证。
上面关于认证鉴权的描述是我们详细了解k8s认证鉴权的基础。下面文章分为两部分:【章节2】
怎么配置Dashboard鉴权,【章节3】
。
2. Kubernetes Dashborad认证鉴权
2.1. Dashborad的认证方式
Kubernetes Dashboard 的认证有两种方式:Token 、Kubeconfig
Token 是JWT令牌。Kubeconfig是kubectl认证文件,但配置中user同样采用token。
2.2. 配置Dashboard认证
[2.2.1]、[2.2.2]是所有认证方式的必要内容,根据认证方式的区别可以选择[2.2.3]、[2.2.4]、[2.2.5]几种令牌。
当前案例Dashboard已经安装在kubernetes-dashboard命名空间。
|
2.2.1.第一步,创建ServiceAccount
我们使用Dashboard管理集群需要通过Pod访问API,所有首先需要创建一个SA。
|
2.2.1.第二步,给SA绑定集群访问权限
|
2.2.2.获取Bearer Token
|
这是可以用这个token访问Dashboard。
2.2.3.长期有效Token
上面的Token默认只有一小时有效期,我们可以创建一个
kubernetes.io/service-account-token
类型的Secret保存Token。
|
2.2.4.kubeconfig
我们获取到了认证Token,那么怎么把这个附加到kubeconfig方便我们存储数据呢?
|
2.2. More about kubeconfig
从上面的.kube/config我们看到里面还有个叫godev
的用户,godev
用户的认证信息并不是token,而是客户端证书。用户能通过Dashboard访问Kubernetes API Server吗?
答案是不能!
那么这个用户是什么?这是一个普通用户,可以通过kubectl访问API Server。
3. Kubernetes中的普通用户认证
上文kubeconfig中的godev用户是一个普通用户,证书的Subject信息如下,与认识SA认证一样,我们通过配置普通用户认证信息,来了解这种认证过程。
|