Kubernetes——服务账号与权限

服务账号与权限

用户认证

  • 所有kubernetes集群都有两类用户:由kubernetes管理的服务账号和普通用户
  • 普通用户是以证书或密钥形式签发,主要用途是认证和鉴权,集群中并不包含用来代表普通用户帐号的对象,普通用户的信息无法调用和查询
  • 服务帐号是kubernetes API所管理的用户。它们被绑定到特定的名称空间,与一组Secret凭证相关联,供Pod调用以获得相应的授权

serviceaccount

# 创建ServiceAccount
[root@master ~]# vim admin-user.yaml
---
kind: ServiceAccount
apiVersion: v1
metadata:
  name: dashboard-admin					# ServiceAccount名称
  namespace: kubernetes-dashboard		# 名称空间

[root@master ~]# kubectl apply -f admin-user.yaml 
serviceaccount/dashboard-admin created
[root@master ~]# kubectl -n kubernetes-dashboard get serviceaccounts 
NAME                   SECRETS   AGE
dashboard-admin        1         61s
default                1         79m
kubernetes-dashboard   1         79m
# 每个ServiceAccount都会关联一个Secrets
[root@master ~]# kubectl -n kubernetes-dashboard describe serviceaccounts dashboard-admin 
Name:                dashboard-admin
Namespace:           kubernetes-dashboard
Labels:              <none>
Annotations:         <none>
Image pull secrets:  <none>
Mountable secrets:   dashboard-admin-token-6kf8l
Tokens:              dashboard-admin-token-6kf8l
Events:              <none>
# Token保存在Secrets
[root@master ~]# kubectl -n kubernetes-dashboard describe secrets dashboard-admin-token-6kf8l 
Name:         dashboard-admin-token-6kf8l
Namespace:    kubernetes-dashboard
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: dashboard-admin
              kubernetes.io/service-account.uid: 0cfe4f55-8cc3-42fd-b88b-84f49604ae56

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1099 bytes
namespace:  20 bytes
token:      <Base64 编码的令牌数据>

角色与鉴权

  • 如果想访问和管理kubernetes集群,就要对身份以及权限做验证,kubernetes支持的鉴权模块有Node、RBAC、ABAC、Webhook API
    • Node:一种特殊用途的鉴权模式,专门对kubelet发出的请求进行鉴权
    • RBAC:是一种基于组织中用户的角色来控制资源使用的方法
    • ABAC:基于属性的访问控制,是一种通过将用户属性与权限组合在一起像用户授权的方法
    • Webhook:是一个HTTP回调

RBAC声明了四种kubernetes对象:

Role:用来在某一个名称空间内创建授权角色,创建 Role 时,必须指定所属的名字空间的名字。
ClusterRole:可以和 Role 相同完成授权。但属于集群范围,对所有名称空间有效。
RoleBinding:是将角色中定义的权限赋予一个或者一组用户,可以使用 Role 或 ClusterRole 完成授权。
ClusterRoleBinding:在集群范围执行授权,对所有名称空间有效,只能使用 ClusterRole 完成授权。

# 查询当前集群使用的鉴权方法
[root@master ~]# grep authorization-mode /etc/kubernetes/manifests/kube-apiserver.yaml 
    - --authorization-mode=Node,RBAC
 
[root@master ~]# vim myrole.yaml 
# 自定义角色
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: myrole		# 角色名称
rules:				# 规则
- apiGroups:		# 资源对象所属组信息
  - ""				# 分组信息
  resources:		# 要设置权限的资源对象
  - pods			# 资源对象名称,使用api-resource查询
  verbs:			# 权限设置
  - get				# 权限
  - list			# 权限

# 给dashboard-admin授权
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: dashboard-admin		# 授权策略名称
roleRef:					# 关联权限
  apiGroup: rbac.authorization.k8s.io	# 角色对象组
  kind: Role				# 角色对象
  name: myrole				# 角色名称
subjects:					# 授权信息
- kind: ServiceAccount		# 账号资源对象
  name: dashboard-admin		# 账号名称
  namespace: kubernetes-dashboard		# 账号所在的名称空间

[root@master ~]# kubectl apply -f myrole.yaml 
role.rbac.authorization.k8s.io/myrole created
rolebinding.rbac.authorization.k8s.io/dashboard-admin created

[root@master ~]# kubectl delete -f myrole.yaml 
role.rbac.authorization.k8s.io "myrole" deleted
rolebinding.rbac.authorization.k8s.io "dashboard-admin" deleted

使用ClusterRole授管理员权限

[root@master ~]# kubectl get clusterrole
NAME                              CREATED AT
admin                             2022-06-24T08:11:17Z
cluster-admin                     2022-06-24T08:11:17Z
... ...

[root@master ~]# cat admin-user.yaml 
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: dashboard-admin
  namespace: kubernetes-dashboard

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: dashboard-admin		# 授权策略名称
roleRef:					# 关联权限
  apiGroup: rbac.authorization.k8s.io	# 角色对象组
  kind: ClusterRole			# 角色对象
  name: cluster-admin		# 角色名称,这里使用了管理员角色
subjects:					# 授权信息
- kind: ServiceAccount		# 账号资源对象
  name: dashboard-admin		# 账号名称
  namespace: kubernetes-dashboard		# 账号所在的名称空间

[root@master ~]# kubectl apply -f admin-user.yaml 
serviceaccount/dashboard-admin unchanged
clusterrolebinding.rbac.authorization.k8s.io/dashboard-admin created
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值