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: latest
De 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: latest
Desplegamos 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