k8s鉴权:
k8s不存储用户信息,主要有一下集中识别用户的方式
X509 Client Certs: 使用由 k8s 根 CA 签发的证书,提取O字段
Static Token File: 预先在 API Server 放置 Token 文件(bootstrap 阶段使用过)
Bootstrap Tokens: 一种在集群内创建的 Bootstrap 专用 Token(新的 Bootstarp 推荐)
Static Password File: 跟静态 Token 类似
Service Account Tokens: 使用 Service Account 的 Token
------------------------------------------------------------------------------------------------------------------------
RBAC(Role Base Access Control)
基于角色的权限控制
所有的外部访问都会经过集群的统一入口api-server进入集群,访问的方式有kubectl、客户端库以及restful请求。
Account:
ServiceAccounts:用来访问 kubernetes API,通过 kubernetes API 创建和管理,每个 account 只能在一个namespace 上生效,存
储在kubernetes API 中的 Secrets 资源。kubernetes 会默认创建,并且会自动挂载到Pod中的
/run/secrets/kubernetes.io/serviceaccount 目录下如果pod没有指定sa那么会使用默认的default
ROLE:定义权限规则,维度为namespace
CLusterRole:在集群维度来定义用户权限规则,忽略namespace
RoleBinding:将用户和rules进行绑定
ClusterRoleBinding:将用户与集群资源做绑定,可以使用ClusterRole绑定RoleBinding
------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
创建dashboard登录用的账户过程
首先必须是SA
token认证:
创建sa,根据管理目标进行rolebinding和clusterrolebinding 绑定到role或者cluterrole
获取sa的secret查看token信息
(kubectl get secret lixiao-admin-token-8spcl -o jsonpath={.data.token} |base64 -d)
config文件认证
创建sa,根据管理目标进行rolebinding和clusterrolebinding 绑定到role或者cluterrole
创建配置文件:
kubectl config set-context lixiao@kubernetes --cluster=kubernetes --user=lixiao --kubeconfig=/datafs/lixiao.conf
kubectl config set-credentials lixiao --token=${sa_token} --kubeconfig=/datafs/lixiao.conf
kubectl config use-context lixiao@kubernetes --kubeconfig=/datafs/lixiao.conf
标准的配置文件包含三段
contexts:上下文描述集群和用户关系
current-context:当前上下文
users:包含用户名和集群中的tocken信息
其他节点使用kubectl配置需要导出主节点的
------------------------------------------------------------------------------------------------------------------------
证书认证:
CN:Common Name,kube-apiserver 从证书中提取该字段作为请求的用户名 (User Name)
“O”:Organization,kube-apiserver 从证书中提取该字段作为请求用户所属的组 (Group)
1:制作一组证书
2:将证书信息写入kubeconfig配置文件 kubectl config set-credentials
3:创建role和binding 绑定CN或者O (根据binding.subjects.kind)
cfssl和openssl