Tanzu v1.29.7+ y Pod Security Admission
Kubernetes v1.26 comenzó a forzar la "seguridad de los pods" haciendo que Pod Security Admission, de forma predeterminada, esté activo en su forma más restrictiva. Para poder desactivar estas restricciones, se deben implementar Labels en los namespaces requeridos para enforce, audit y warn.
Siempre me pareció un poco arbitrario este cambio. Está bien intentar impulsar las mejores prácticas pero hacía falta tener una forma de modificar el comportamiento en forma global.
Estoy probando Tanzu Supervisor Cluster v1.29.7 (luego de actualizar vSphere a v8U3) y encuentro, con mucho agrado, que ahora podemos configurar Pod Security Admission a nivel global en un cluster de kubernetes directamente en el YAML que usamos para crearlo.
Nuevo objeto Cluster
Venía usando el objeto TanzuKubernetesCluster para crear nuevos clusters en Tanzu. Ahora se deja de usar en favor del objeto Cluster nativo de Kubernetes. El siguiente es un ejemplo básico de YAML:
apiVersion: cluster.x-k8s.io/v1beta1
kind: Cluster
metadata:
name: cluster-01
namespace: mi-namespace
spec:
clusterNetwork:
services:
cidrBlocks: ["10.96.0.0/12"]
pods:
cidrBlocks: ["192.168.0.0/16"]
serviceDomain: "cluster.local"
topology:
class: tanzukubernetescluster
version: v1.30.1---vmware.1-fips-tkg.5
controlPlane:
replicas: 3
workers:
machineDeployments:
- class: node-pool
name: node-pool-1
replicas: 3
variables:
- name: vmClass
value: guaranteed-medium
- name: storageClass
value: tanzu-storage-policy
- name: defaultStorageClass
value: tanzu-storage-policy
El valor de spec.topology.version es el nombre del Tanzu Kubernetes Release y obtenemos ejecutando el siguiente comando en el namespace correspondiente del Supervisor Cluster
kubectl get tkr
El valor de spec.topology.variables - vmClass lo obtenemos ejecutando:
kubectl get vmclass
Ya tenemos listo el YAML básico para desplegar un cluster. Sin embargo, la gran novedad para mí es la capacidad de configurar PSA a nivel de cluster al momento del despliegue. Entonces, a las "variables" del YAML podemos agregar el siguiente bloque, por ejemplo, para un cluster de laboratorio:
- name: podSecurityStandard
value:
audit: restricted
auditVersion: latest
enforce: privileged
enforceVersion: latest
warn: privileged
warnVersion: latestDe modo que levanta las restricciones aunque las audita. El yaml completo quedaría así:
apiVersion: cluster.x-k8s.io/v1beta1
kind: Cluster
metadata:
name: cluster-01
namespace: mi-namespace
spec:
clusterNetwork:
services:
cidrBlocks: ["10.96.0.0/12"]
pods:
cidrBlocks: ["192.168.0.0/16"]
serviceDomain: "cluster.local"
topology:
class: tanzukubernetescluster
version: v1.30.1---vmware.1-fips-tkg.5
controlPlane:
replicas: 3
workers:
machineDeployments:
- class: node-pool
name: node-pool-1
replicas: 3
variables:
- name: vmClass
value: guaranteed-medium
- name: storageClass
value: tanzu-storage-policy
- name: defaultStorageClass
value: tanzu-storage-policy
- name: podSecurityStandard
value:
audit: restricted
auditVersion: latest
enforce: privileged
enforceVersion: latest
warn: privileged
warnVersion: latestDesplegamos nuestro cluster y ya podemos crear, por ejemplo, pods con una imagen "latest" sin necesidad de agregar labels a los namespaces:
kubectl run nginx --image nginx
Bravo!
Comentarios
Publicar un comentario