文章目录
1. 版本
功能状态: Kubernetes v1.21 [deprecated]
PodSecurityPolicy
自 Kubernetes v1.21
起已弃用,并将在 v1.25 中删除。
Pod 安全策略启用对 Pod 创建和更新的细粒度授权
2. 介绍
PodSecurityPolicy对象定义一组条件,一个pod必须以被接受进入系统,以及用于相关字段默认值运行。它们允许管理员控制以下内容:
Pod 安全策略控制作为可选(但推荐)的 准入控制器实现。PodSecurityPolicies 是通过启用准入控制器来强制执行的,但是在没有授权任何策略的情况下这样做会阻止在集群中创建任何 pod。
由于 Pod 安全策略 API ( policy/v1beta1/podsecuritypolicy) 是独立于准入控制器启用的,对于现有集群,建议在启用准入控制器之前添加和授权策略。
3. 授权政策
创建 PodSecurityPolicy 资源时,它什么都不做。为了使用它,请求用户或目标 Pod 的服务帐户必须被授权使用该策略,方法是允许use策略上的动词。
大多数 Kubernetes pod 不是由用户直接创建的。相反,它们通常作为Deployment、 ReplicaSet或其他模板化控制器的一部分通过控制器管理器间接创建 。授予控制器访问策略的权限将授予该控制器创建的所有pod 的访问权限,因此授权策略的首选方法是授予对 pod 服务帐户的访问权限
3.1 通过 RBAC
RBAC是一种标准的 Kubernetes 授权模式,可以很容易地用于授权使用策略。
首先, a RoleorClusterRole需要授予use对所需策略的访问权限。授予访问权限的规则如下所示:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: <role name> rules: - apiGroups: ['policy'] resources: ['podsecuritypolicies'] verbs: ['use'] resourceNames: - <list of policies to authorize>
然后(Cluster)Role绑定到授权用户:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: <binding name> roleRef: kind: ClusterRole name: <role name> apiGroup: rbac.authorization.k8s.io subjects: # Authorize specific service accounts: - kind: ServiceAccount name: <authorized service account name> namespace: <authorized pod namespace> # Authorize specific users (not recommended): - kind: User apiGroup: rbac.authorization.k8s.io name: <authorized user name>
如果使用 a RoleBinding(不是 a ClusterRoleBinding),它只会授予在与绑定相同的命名空间中运行的 pod 的使用权。这可以与系统组配对以授予对在命名空间中运行的所有 pod 的访问权限: