Los clústeres de servicio TKG que utilizan TKR 1.24 y versiones anteriores incluyen la directiva de seguridad de pods predeterminada a la que se puede enlazar para la implementación de cargas de trabajo con privilegios y restringidas.

Aplicar la directiva de seguridad de pods predeterminada mediante enlaces de función y ClusterRole

vSphere IaaS control plane proporciona una directiva de seguridad de pods predeterminada que se puede aplicar a los clústeres de TKG en Supervisor y que funcionan en TKR 1.24 y versiones anteriores. Para ello, cree los objetos RoleBinding y ClusterRoleBinding que hagan referencia a la directiva de seguridad de pods predeterminada.
Nota: Consulte la documentación de Kubernetes para crear su propia directiva de seguridad de pods.

Un objeto RoleBinding concede permisos dentro de un espacio de nombres específico. Un objeto ClusterRoleBinding concede permisos en todo el clúster. La decisión de utilizar RoleBindings o ClusterRoleBinding depende de cada caso práctico. Por ejemplo, si usa ClusterRoleBinding y configura los asuntos para que usen system:serviceaccounts:<namespace>, puede enlazar a una PSP antes de que se cree el espacio de nombres. Para obtener más información, consulte RoleBinding y ClusterRoleBinding en la documentación de Kubernetes.

En las siguientes secciones, se brindan comandos de YAML y CLI para crear objetos RoleBinding y ClusterRoleBinding que autorizan el uso de la directiva de seguridad de pods predeterminada.

Ejemplo 1: ClusterRoleBinding para ejecutar un conjunto privilegiado de cargas de trabajo

El siguiente comando kubectl crea un ClusterRoleBinding que otorga acceso a los usuarios autenticados para que ejecuten un conjunto de cargas de trabajo con privilegios mediante la PSP predeterminada vmware-system-privileged.
Advertencia: La aplicación del Ejemplo 1, de forma declarativa o imperativa, permite la implementación de cargas de trabajo con privilegios en todo el clúster. En efecto, el Ejemplo 1 deshabilita los controles de seguridad nativos y debe utilizarse con precaución y con total conocimiento de las implicaciones. Para una seguridad más estricta, considere los Ejemplos 2, 3 y 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
Como alternativa a la aplicación de YAML, puede ejecutar el siguiente de comando de kubectl:
kubectl create clusterrolebinding default-tkg-admin-privileged-binding --clusterrole=psp:vmware-system-privileged --group=system:authenticated

Ejemplo 2: RoleBinding para ejecutar un conjunto de cargas de trabajo con privilegios

El siguiente comando kubectl crea un RoleBinding que otorga acceso a todas las cuentas de servicio dentro del espacio de nombres predeterminado para ejecutar un conjunto de cargas de trabajo con privilegios mediante la PSP predeterminada 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
Como alternativa a la aplicación de YAML, puede ejecutar el siguiente de comando de kubectl:
kubectl create rolebinding rolebinding-default-privileged-sa-ns_default --namespace=default --clusterrole=psp:vmware-system-privileged --group=system:serviceaccounts

Ejemplo 3: ClusterRoleBinding para ejecutar un conjunto restringido de cargas de trabajo

El siguiente YAML crea un ClusterRoleBinding que otorga a los usuarios autenticados acceso en todo el clúster para ejecutar un conjunto restringido de cargas de trabajo mediante la PSP predeterminada 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

Como alternativa a la aplicación de YAML, puede ejecutar el siguiente de comando de kubectl:

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

Ejemplo 4: RoleBinding para ejecutar un conjunto restringido de cargas de trabajo

El siguiente YAML crea un RoleBinding que otorga acceso a todas las cuentas de servicio dentro de un espacio de nombres específico para ejecutar un conjunto restringido de cargas de trabajo mediante la PSP predeterminada 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
Como alternativa a la aplicación de YAML, puede ejecutar el siguiente de comando de kubectl:
Nota: Cambie "some-namespace" al espacio de nombres de destino.
kubectl create rolebinding psp:serviceaccounts --clusterrole=psp:vmware-system-restricted --group=system:serviceaccounts -n some-namespace

Función de ejemplo para la directiva de seguridad de pods

Si define su propia directiva de seguridad de pods (Pod Security Policy, PSP) para implementar cargas de trabajo, consulte este ejemplo para crear una función o ClusterRole que haga referencia a la PSP personalizada.

El siguiente ejemplo demuestra una función enlazada a PodSecurityPolicy. En la definición de la función, la función example-role otorgada al verbo use para un recurso de PSP personalizado que usted defina. De forma alternativa, utilice una de las PSP predeterminadas. A continuación, cree un enlace.

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