使用 TKR 1.24 及更低版本的 TKG Service 集群包括可绑定到的默认 Pod 安全策略,以进行特权和受限工作负载部署。
使用 Role 和 ClusterRole 绑定应用默认 Pod 安全策略
RoleBinding 授予特定命名空间内的权限。ClusterRoleBinding 授予集群范围内的权限。决定使用 RoleBindings 还是 ClusterRoleBinding 取决于您的用例。例如,如果使用 ClusterRoleBinding 并配置主体使用 system:serviceaccounts:<namespace>
,则可以在创建命名空间之前绑定到 PSP。有关详细信息,请参见 Kubernetes 文档中的 RoleBinding 和 ClusterRoleBinding。
以下几节提供了用于创建 RoleBinding 和 ClusterRoleBinding 对象的 YAML 和 CLI 命令,这些对象授权使用默认 Pod 安全策略。
示例 1:用于运行特权工作负载集的 ClusterRoleBinding
vmware-system-privileged
运行特权工作负载集。
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
kubectl
命令。
kubectl create clusterrolebinding default-tkg-admin-privileged-binding --clusterrole=psp:vmware-system-privileged --group=system:authenticated
示例 2:用于运行特权工作负载集的 RoleBinding
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
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
kubectl create rolebinding psp:serviceaccounts --clusterrole=psp:vmware-system-restricted --group=system:serviceaccounts -n some-namespace
Pod 安全策略的示例角色
如果您定义自己的 Pod 安全策略 (PSP) 以部署工作负载,请参阅此示例以创建引用自定义 PSP 的 Role 或 ClusterRole。
该示例展示了绑定到 PodSecurityPolicy 的角色。在角色定义中,将 example-role
和 use
动词授予您定义的自定义 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