|
Este documento ha sido traducido utilizando tecnología de traducción automática. Si bien nos esforzamos por proporcionar traducciones precisas, no ofrecemos garantías sobre la integridad, precisión o confiabilidad del contenido traducido. En caso de discrepancia, la versión original en inglés prevalecerá y constituirá el texto autorizado. |
|
Esta es documentación inédita para Admission Controller 1.34-dev. |
Inicio rápido
El SUSE Security Admission Controller stack se compone de:
-
Uno o más recursos de ClusterAdmissionPolicy: esto define políticas para los clusters de Kubernetes.
-
Uno o más recursos de PolicyServer: representando una ampliación de un Admission Controller
PolicyServer. El Admission ControllerPolicyServercarga y evalúa las políticas de tu administrador. -
Uno o más recursos de AdmissionPolicy: políticas para un espacio de nombres definido.
-
Una ampliación de un
kubewarden-controller: este controlador monitoriza los recursos de ClusterAdmissionPolicy e interactúa con los componentes Admission Controller PolicyServer.
|
Admission Controller describe sus definiciones de recursos personalizadas (CRDs) de Kubernetes aquí. Los CRDs de Admission Controller mencionados en este tutorial y en el resto de la documentación tienen nombres cortos, que son más fáciles de usar. Estos son los nombres cortos para los CRDs:
|
Instalación
|
Autenticación
Puedes recuperar políticas de Admission Controller del registro de contenedores de GitHub en https://ghcr.io.. Necesitas autenticación para usar el repositorio con la CLI Admission Controller, un token de acceso personal de GitHub (PAT). Su documentación te guía a través de la creación de uno si aún no lo has hecho. Luego te autenticas con un comando como:
|
Despliega la pila Admission Controller utilizando los gráficos helm de la siguiente manera:
helm repo add kubewarden https://charts.kubewarden.io
helm repo update kubewarden
Instala los siguientes gráficos de Helm en el espacio de nombres kubewarden en tu clúster de Kubernetes:
-
kubewarden-crds, que registra las definiciones de recursos personalizadas ClusterAdmissionPolicy, AdmissionPolicy y PolicyServer. Además, las definiciones de recursos personalizadas {report} utilizadas por el escáner de auditoría. -
kubewarden-controller, que instala el controlador Admission Controller y el escáner de auditoría.Si necesitas deshabilitar el componente del escáner de auditoría, consulta la página de documentación de instalación del escáner de auditoría.
-
kubewarden-defaults, que crea un recursoPolicyServerllamadodefault. También puede instalar un conjunto de políticas recomendadas para asegurar tu clúster aplicando buenas prácticas bien conocidas.
helm install --wait -n kubewarden --create-namespace kubewarden-crds kubewarden/kubewarden-crds
helm install --wait -n kubewarden kubewarden-controller kubewarden/kubewarden-controller
helm install --wait -n kubewarden kubewarden-defaults kubewarden/kubewarden-defaults
|
Dado que Esto significa que si no utilizas la última versión del |
Los valores de configuración predeterminados son suficientes para la mayoría de las ampliaciones. La documentación describe todas las opciones.
Componentes principales
Admission Controller tiene tres componentes principales con los que interactúas:
-
La variable PolicyServer
-
La variable ClusterAdmissionPolicy
-
La variable AdmissionPolicy
PolicyServer
El kubewarden-controller gestiona un Admission Controller PolicyServer. Puedes desplegar múltiples PolicyServers en el mismo clúster de Kubernetes.
Un PolicyServer valida las solicitudes entrantes ejecutando Admission Controller políticas contra ellas.
Esta es la configuración por defecto del PolicyServer:
apiVersion: policies.kubewarden.io/v1
kind: PolicyServer
metadata:
name: reserved-instance-for-tenant-a
spec:
image: ghcr.io/kubewarden/policy-server:v1.3.0
replicas: 2
serviceAccountName: ~
env:
- name: KUBEWARDEN_LOG_LEVEL
value: debug
|
Consulta el última versión |
Resumen de los atributos del recurso PolicyServer:
| required | Espacio reservado | Descripción |
|---|---|---|
S |
|
El nombre de la imagen del contenedor |
S |
|
El número de instancias deseadas |
D |
|
El nombre del |
D |
|
La lista de variables de entorno |
D |
|
La lista de anotaciones |
Cambiar cualquiera de estos atributos provoca una ampliación de PolicyServer con la nueva configuración.
ClusterAdmissionPolicy
El recurso ClusterAdmissionPolicy es el núcleo de la pila Admission Controller. Define cómo las políticas evalúan las solicitudes.
Hacer cumplir políticas es la operación más común que realiza un administrador de Kubernetes. Puedes declarar tantas políticas como desees, cada una de las cuales apunta a uno o más recursos de Kubernetes (es decir, pods, Custom Resource y otros). También especificas el tipo de operaciones aplicadas a los recursos objetivo. Las operaciones disponibles son CREATE, UPDATE, DELETE y CONNECT.
Configuración por defecto ClusterAdmissionPolicy:
apiVersion: policies.kubewarden.io/v1
kind: ClusterAdmissionPolicy
metadata:
name: psp-capabilities
spec:
policyServer: reserved-instance-for-tenant-a
module: registry://ghcr.io/kubewarden/policies/psp-capabilities:v0.1.9
rules:
- apiGroups: [""]
apiVersions: ["v1"]
resources: ["pods"]
operations:
- CREATE
- UPDATE
mutating: true
settings:
allowed_capabilities:
- CHOWN
required_drop_capabilities:
- NET_ADMIN
Resumen de los atributos del recurso ClusterAdmissionPolicy:
| required | Espacio reservado | Descripción |
|---|---|---|
D |
|
Identifica un objeto |
S |
|
La ubicación de la política Admission Controller. Se permiten los siguientes esquemas: |
D |
- |
|
D |
- |
|
D |
- |
|
S |
|
Los recursos de Kubernetes evaluados por la política |
S |
|
Qué operaciones para los tipos dados anteriormente deben ser reenviadas a esta política de admisión por el servidor API para su evaluación. |
S |
|
Establece este valor booleano |
D |
|
Un objeto de forma libre que contiene los valores de configuración de la política |
D |
|
La acción a tomar si la solicitud evaluada por una política resulta en un error. Se permiten las siguientes opciones: |
D |
- |
|
D |
- |
|
El controlador registra el webhook de recursos ClusterAdmissionPolicy |
AdmissionPolicy
AdmissionPolicy es un recurso a nivel de espacio de nombres. La política procesa solo las solicitudes que están dirigidas al espacio de nombres con el AdmissionPolicy definido. Aparte de eso, no hay diferencias funcionales entre los recursos AdmissionPolicy y ClusterAdmissionPolicy.
|
AdmissionPolicy requiere Kubernetes 1.21.0 o superior. Esto se debe a que Admission Controller utiliza la etiqueta |
La documentación completa de estos Recursos Personalizados está aquí o en docs.crds.dev.
Ejemplo: Aplica tu primera política
Usaremos la política pod-privileged.
Queremos prevenir la creación de contenedores privilegiados dentro de nuestro clúster de Kubernetes aplicando esta política.
Definamos un ClusterAdmissionPolicy para hacer eso:
kubectl apply -f - <<EOF
apiVersion: policies.kubewarden.io/v1
kind: ClusterAdmissionPolicy
metadata:
name: privileged-pods
spec:
module: registry://ghcr.io/kubewarden/policies/pod-privileged:v0.2.2
rules:
- apiGroups: [""]
apiVersions: ["v1"]
resources: ["pods"]
operations:
- CREATE
- UPDATE
mutating: false
EOF
Esto produce la siguiente salida:
clusteradmissionpolicy.policies.kubewarden.io/privileged-pods created
Después de instanciar un ClusterAdmissionPolicy, el estado se convierte en pending, y fuerza una ampliación del PolicyServer objetivo. En el ejemplo, es el PolicyServer llamado default. Puedes monitorear la ampliación ejecutando el siguiente comando:
kubectl get clusteradmissionpolicy.policies.kubewarden.io/privileged-pods
Deberías ver la siguiente salida:
NAME POLICY SERVER MUTATING STATUS
privileged-pods default false pending
Una vez que la nueva política esté lista, el kubewarden-controller registra un objeto ValidatingWebhookConfiguration para servirlo.
El estado ClusterAdmissionPolicy se convierte en active una vez que se completa la ampliación para cada instancia PolicyServer. Muestra ValidatingWebhookConfigurations con el siguiente comando:
kubectl get validatingwebhookconfigurations.admissionregistration.k8s.io -l kubewarden
Deberías ver la siguiente salida:
NAME WEBHOOKS AGE
clusterwide-privileged-pods 1 9s
Una vez que el ClusterAdmissionPolicy está activo y el ValidatingWebhookConfiguration se registra, puedes probar la política.
Primero, puedes crear un Pod con un Contenedor no en modo privileged:
kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
name: unprivileged-pod
spec:
containers:
- name: nginx
image: nginx:latest
EOF
Esto produce la siguiente salida:
pod/unprivileged-pod created
El Pod se ha creado con éxito.
Ahora, puedes crear un Pod con al menos una bandera de Contenedor privileged:
kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
name: privileged-pod
spec:
containers:
- name: nginx
image: nginx:latest
securityContext:
privileged: true
EOF
La política niega la creación del Pod y deberías ver el siguiente mensaje:
Error from server: error when creating "STDIN": admission webhook "clusterwide-privileged-pods.kubewarden.admission" denied the request: Privileged container is not allowed
|
Ambos ejemplos no definieron un |
Desinstalación
Puedes eliminar los recursos creados desinstalando los gráficos de helm de la siguiente manera:
helm uninstall --namespace kubewarden kubewarden-defaults
helm uninstall --namespace kubewarden kubewarden-controller
helm uninstall --namespace kubewarden kubewarden-crds
Después de la eliminación de los charts de helm, elimina el espacio de nombres de Kubernetes utilizado para desplegar la pila Admission Controller:
kubectl delete namespace kubewarden
|
Admission Controller contiene un gancho pre-eliminación de helm que elimina todos los |
Admission Controller elimina ValidatingWebhookConfigurations y MutatingWebhookConfigurations. Verifica esto con:
kubectl get validatingwebhookconfigurations.admissionregistration.k8s.io -l "kubewarden"
kubectl get mutatingwebhookconfigurations.admissionregistration.k8s.io -l "kubewarden"
Si estos recursos no se eliminan automáticamente, elimínalos manualmente utilizando el siguiente comando:
kubectl delete -l "kubewarden" validatingwebhookconfigurations.admissionregistration.k8s.io
kubectl delete -l "kubewarden" mutatingwebhookconfigurations.admissionregistration.k8s.io
Concluyendo
ClusterAdmissionPolicy es el recurso kernel que un operador de clúster tiene que gestionar. El módulo kubewarden-controller se encarga automáticamente de la configuración para el resto de los recursos necesarios para ejecutar las políticas.
Pasos siguientes
¡Ahora estáis listos para desplegar Admission Controller! Echad un vistazo a las políticas en artifacthub.io, en GitHub, o reutilizad políticas Rego existentes como se muestra en los capítulos siguientes.