使用 TKR 1.24 及更低版本的 TKG Service 集群包括可绑定到的默认 Pod 安全策略,以进行特权和受限工作负载部署。

使用 Role 和 ClusterRole 绑定应用默认 Pod 安全策略

vSphere IaaS control plane 提供了 默认 Pod 安全策略,您可以将其应用于运行 TKR 1.24 及更低版本的 主管 上的 TKG 集群。为此,您可以创建引用 默认 Pod 安全策略的 RoleBinding 和 ClusterRoleBinding 对象。
注: 请参考 Kubernetes 文档编写您自己的 Pod 安全策略。

RoleBinding 授予特定命名空间内的权限。ClusterRoleBinding 授予集群范围内的权限。决定使用 RoleBindings 还是 ClusterRoleBinding 取决于您的用例。例如,如果使用 ClusterRoleBinding 并配置主体使用 system:serviceaccounts:<namespace>,则可以在创建命名空间之前绑定到 PSP。有关详细信息,请参见 Kubernetes 文档中的 RoleBinding 和 ClusterRoleBinding

以下几节提供了用于创建 RoleBinding 和 ClusterRoleBinding 对象的 YAML 和 CLI 命令,这些对象授权使用默认 Pod 安全策略

示例 1:用于运行特权工作负载集的 ClusterRoleBinding

下面的 kubectl 命令创建了一个 ClusterRoleBinding,用于向经过身份验证的用户授予访问权限,使其能够使用默认 PSP vmware-system-privileged 运行特权工作负载集。
警告: 以声明或强制性方式应用示例 1 允许在集群范围内部署特权工作负载。实际上,示例 1 禁用本机安全控制,因此应谨慎使用并完全了解影响。为了加强安全性,请考虑示例 2、3 和 4。
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: psp:privileged
rules:
- apiGroups: ['policy']
  resources: ['podsecuritypolicies']
  verbs:     ['use']
  resourceNames:
  - vmware-system-privileged
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: all:psp:privileged
roleRef:
  kind: ClusterRole
  name: psp:privileged
  apiGroup: rbac.authorization.k8s.io
subjects:
- kind: Group
  name: system:serviceaccounts
  apiGroup: rbac.authorization.k8s.io
作为应用 YAML 的替代方案,您可以运行以下 kubectl 命令。
kubectl create clusterrolebinding default-tkg-admin-privileged-binding --clusterrole=psp:vmware-system-privileged --group=system:authenticated

示例 2:用于运行特权工作负载集的 RoleBinding

下面的 kubectl 命令创建了一个 RoleBinding,用于向默认命名空间内的所有服务帐户授予访问权限,使其能够使用默认 PSP vmware-system-privileged 运行特权工作负载集。
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: rolebinding-default-privileged-sa-ns_default
  namespace: default
roleRef:
  kind: ClusterRole
  name: psp:vmware-system-privileged
  apiGroup: rbac.authorization.k8s.io
subjects:
- kind: Group
  apiGroup: rbac.authorization.k8s.io
  name: system:serviceaccounts
作为应用 YAML 的替代方案,您可以运行以下 kubectl 命令。
kubectl create rolebinding rolebinding-default-privileged-sa-ns_default --namespace=default --clusterrole=psp:vmware-system-privileged --group=system:serviceaccounts

示例3:用于运行受限工作负载集的 ClusterRoleBinding

下面的 YAML 创建了一个 ClusterRoleBinding,用于向经过身份验证的用户授予集群范围的访问权限,使其能够使用默认 PSP vmware-system-restricted 运行受限工作负载集。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: psp:authenticated
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: Group
  name: system:authenticated
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: psp:vmware-system-restricted

作为应用 YAML 的替代方案,您可以运行以下 kubectl 命令。

kubectl create clusterrolebinding psp:authenticated --clusterrole=psp:vmware-system-restricted --group=system:authenticated

示例 4:用于运行受限工作负载集的 RoleBinding

下面的 YAML 创建了一个 RoleBinding,用于向特定命名空间内的所有服务帐户授予访问权限,使其能够使用默认 PSP vmware-system-restricted 运行受限工作负载集。

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: psp:serviceaccounts
  namespace: some-namespace
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: Group
  name: system:serviceaccounts
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: psp:vmware-system-restricted
作为应用 YAML 的替代方案,您可以运行以下 kubectl 命令。
注: 将“some-namespace”更改为目标命名空间。
kubectl create rolebinding psp:serviceaccounts --clusterrole=psp:vmware-system-restricted --group=system:serviceaccounts -n some-namespace

Pod 安全策略的示例角色

如果您定义自己的 Pod 安全策略 (PSP) 以部署工作负载,请参阅此示例以创建引用自定义 PSP 的 Role 或 ClusterRole。

该示例展示了绑定到 PodSecurityPolicy 的角色。在角色定义中,将 example-roleuse 动词授予您定义的自定义 PSP 资源。或者,使用一个默认的 PSP。然后,创建绑定。

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: Role
metadata:
  name: example-role
  namespace: tkgs-cluster-ns
rules:
- apiGroups:
  - ""
  resources:
  - configmaps
  verbs:
  - create
  - get
  - list
  - watch
  - update
- apiGroups:
  - ""
  resources:
  - events
  verbs:
  - create
  - update
  - patch
- apiGroups: 
  - extensions
  resourceNames:
  - CUSTOM-OR-DEFAULT-PSP
  resources:
  - podsecuritypolicies
  verbs:
  - use