【Kubernetes】之统一认证鉴权
K8s基于RBAC的权限策略
·
常用认证模型
- 基于角色的访问控制(RBAC):RBAC 是一种将权限与角色相关联的访问控制方式,用户通过被赋予特定的角色来获得相应的权限。RBAC 的优点在于简化了权限管理,降低了系统的复杂性
- 基于属性的访问控制(ABAC):ABAC 是一种基于用户属性(如用户身份、角色、位置等)的访问控制方式,系统根据用户的属性来决定是否授予其相应的权限
- 基于任务的访问控制(TBAC):TBAC 是一种将任务作为核心的访问控制方式,系统根据任务的特性和要求来分配相应的权限
- 基于对象的访问控制(OBAC):OBAC 是一种将对象作为核心的访问控制方式,系统根据对象的属性和状态来决定是否授予用户相应的权限
拓展:权限策略
Kubernetes
ApiServer组件
ApiServer作为Kubernetes的认证中心负责验证和授权用户对集群的访问请求。认证中心在Kubernetes中主要涉及以下几个方面:
- 认证:验证用户或服务的身份。Kubernetes支持多种认证方式,包括基于证书的认证、基于令牌的认证等。这些认证方式可以单独使用,也可以组合使用,以满足不同的安全需求。
- 授权:根据用户的身份和角色,决定用户对集群资源的访问权限。Kubernetes使用基于角色的访问控制(RBAC)模型进行授权管理,通过定义用户角色和资源角色,将访问权限与角色相关联,从而简化了权限管理。
- 准入控制:在资源对象的创建、删除、更新或连接操作时,准入控制器对操作进行更精细的许可检查,只有满足条件的请求才能被执行
认证方式
介绍几种K8S最常用的认证:
- CA证书认证:这是基于CA根证书签名的双向数字证书认证方式,是最严格的认证方式;Kubernetes中的Ingress控制器可以使用相关证书,通过TLS/SSL加密方式提供安全的外部访问
- ServiceAccount认证:ServiceAccount会挂载到Kubernetes集群中的pod的目录下,每个应用的pod可以用过读取目录下的ServiceAccount来获取集群的认证证书数据,从而可以与集群中的apiServer进行认证通信
- Bare Token认证:一种基于令牌的身份验证方法,通常用于API访问控制。令牌(Token)通常由服务端根据密钥生成,并由客户端在请求时附加在HTTP请求头中。服务端收到请求后,会解析出令牌并进行合法性验证。如果验证通过,则认为客户端已经通过了身份验证
BareToken实现步骤
步骤一:创建用户
apiVersion: v1
kind: ServiceAccount
metadata:
name: user-01
namespace: kube-system
labels:
kubernetes.io/cluster-service: "true"
addonmanager.kubernetes.io/mode: Reconcile
步骤二:创建角色
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: role-01
rules:
- apiGroups: ["*"]
resources: ["*"]
verbs:
- get
- list
- watch
步骤三:用户和角色绑定
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: user-role
labels:
addonmanager.kubernetes.io/mode: Reconcile
roleRef:
kind: ClusterRole
name: role-01
apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
name: user-01
namespace: kube-system
步骤四:获取BareToken
kubectl get secrets -n kube-system|grep user-role|awk '{print $1}'|xargs kubectl describe secrets -n kube-system
更多推荐
已为社区贡献1条内容
所有评论(0)