I cluster TKG Service che utilizzano TKR 1.24 e versioni precedenti includono un criterio di sicurezza predefinito del pod a cui è possibile eseguire il binding per la distribuzione dei carichi di lavoro con privilegi e limitazioni.

Applicazione del criterio di sicurezza del pod predefinito mediante RoleBinding e ClusterRoleBinding

vSphere IaaS control plane fornisce il criterio di sicurezza del pod predefinito che è possibile applicare ai cluster TKG nel Supervisore che eseguono TKR 1.24 e versioni precedenti. È possibile eseguire questa operazione creando oggetti RoleBinding e ClusterRoleBinding che fanno riferimento al criterio di sicurezza del pod predefinito.
Nota: Fare riferimento alla documentazione di Kubernetes per creare il proprio criterio di sicurezza del pod.

Un RoleBinding concede le autorizzazioni all'interno di uno spazio dei nomi specifico. Un ClusterRoleBinding concede le autorizzazioni a livello di cluster. La decisione di utilizzare RoleBindings o ClusterRoleBinding dipende dal caso d'uso. Ad esempio, se si utilizza un ClusterRoleBinding e si configurano gli argomenti da utilizzare per l'utilizzo di system:serviceaccounts:<namespace>, è possibile eseguire il binding a un PSP prima che venga creato lo spazio dei nomi. Per ulteriori informazioni, vedere RoleBinding and ClusterRoleBinding nella documentazione di Kubernetes.

Nelle sezioni seguenti vengono forniti i comandi YAML e CLI per la creazione di oggetti RoleBinding e ClusterRoleBinding che autorizzano l'uso del criterio di sicurezza del pod predefinito.

Esempio 1: ClusterRoleBinding per eseguire un set di carichi di lavoro con privilegi

Il seguente comando kubectl crea un ClusterRoleBinding che concede l'accesso agli utenti autenticati eseguono un set con privilegi di carichi di lavoro utilizzando il PSP vmware-system-privileged predefinito.
Avviso: L'applicazione dell'esempio 1, in modo dichiarativo o imperativo, consente di distribuire carichi di lavoro privilegiati in tutto il cluster. In effetti, l'esempio 1 disabilita i controlli di sicurezza nativi e deve essere usato con cautela e con piena consapevolezza delle implicazioni. Per una maggiore sicurezza, si considerino gli esempi 2, 3 e 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
In alternativa all'applicazione del codice YAML, è possibile eseguire il comando kubectl seguente.
kubectl create clusterrolebinding default-tkg-admin-privileged-binding --clusterrole=psp:vmware-system-privileged --group=system:authenticated

Esempio 2: RoleBinding per l'esecuzione di un set con privilegi di carichi di lavoro

Il seguente comando kubectl crea un RoleBinding che concede l'accesso a tutti gli account di servizio all'interno dello spazio dei nomi predefinito per eseguire un set con privilegi di carichi di lavoro utilizzando il PSP vmware-system-privileged predefinito.
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
In alternativa all'applicazione del codice YAML, è possibile eseguire il comando kubectl seguente.
kubectl create rolebinding rolebinding-default-privileged-sa-ns_default --namespace=default --clusterrole=psp:vmware-system-privileged --group=system:serviceaccounts

Esempio 3: ClusterRoleBinding per l'esecuzione di un set di carichi di lavoro con restrizioni

Il seguente codice YAML crea un ClusterRoleBinding che concede agli utenti autenticati l'accesso a livello di cluster per eseguire un set di carichi di lavoro con restrizioni utilizzando il PSP vmware-system-restricted predefinito.

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

In alternativa all'applicazione del codice YAML, è possibile eseguire il comando kubectl seguente.

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

Esempio 4: RoleBinding per l'esecuzione di un set di carichi di lavoro con restrizioni

Il seguente codice YAML crea un RoleBinding che concede l'accesso a tutti gli account di servizio all'interno di uno spazio dei nomi specifico per eseguire una serie di carichi di lavoro con restrizioni utilizzando il PSP vmware-system-restricted predefinito.

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
In alternativa all'applicazione del codice YAML, è possibile eseguire il comando kubectl seguente.
Nota: Modificare "some-namespace" nello spazio dei nomi di destinazione.
kubectl create rolebinding psp:serviceaccounts --clusterrole=psp:vmware-system-restricted --group=system:serviceaccounts -n some-namespace

Ruolo di esempio per il criterio di sicurezza pod

Se si definisce il criterio di sicurezza del pod (PSP) per distribuire i carichi di lavoro, fare riferimento a questo esempio per creare un Role o ClusterRole che faccia riferimento al PSP personalizzato.

Nell'esempio viene illustrato un ruolo associato a PodSecurityPolicy. Nella definizione del ruolo, a example-role viene concesso il verbo use a una risorsa PSP personalizzata definita dall'utente. In alternativa, utilizzare uno dei PSP predefiniti. Creare quindi un binding.

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