|
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. |
Configurando directivas
Omitiendo espacios de nombres para una directiva específica
Por defecto, las directivas se aplican a todos los espacios de nombres para los que está configurado el PolicyServer.
Si deseas que una directiva apunte solo a espacios de nombres específicos, puedes desplegar varios AdmissionPolicies en cada espacio de nombres.
Otra opción es configurar ClusterAdmissionPolicies estableciendo su spec.namespaceSelector (ver documentos CRD). El spec.namespaceSelector decide si ejecutar la directiva sobre un objeto, basado en si el espacio de nombres de ese objeto coincide con el selector.
Por ejemplo, aquí hay una directiva que solo apunta a los espacios de nombres kube-system y my-namespace:
---
apiVersion: policies.kubewarden.io/v1
kind: ClusterAdmissionPolicy
metadata:
name: psa-enforcer-privileged-namespaces
spec:
module: registry://ghcr.io/kubewarden/policies/psa-label-enforcer:v1.0.3
rules:
- apiGroups: [""]
apiVersions: ["v1"]
resources: ["namespaces"]
operations:
- CREATE
- UPDATE
mutating: true
namespaceSelector:
matchExpressions:
- key: "kubernetes.io/metadata.name"
operator: In
values: [kube-system, my-namespace]
settings:
modes:
enforce: "privileged"
Aquí hay una directiva que apunta a todos los espacios de nombres excepto los kube-system y my-namespace:
---
apiVersion: policies.kubewarden.io/v1
kind: ClusterAdmissionPolicy
metadata:
name: psa-enforcer-default-mode
spec:
module: registry://ghcr.io/kubewarden/policies/psa-label-enforcer:v1.0.3
rules:
- apiGroups: [""]
apiVersions: ["v1"]
resources: ["namespaces"]
operations:
- CREATE
- UPDATE
mutating: true
namespaceSelector:
matchExpressions:
- key: "kubernetes.io/metadata.name"
operator: NotIn
values: [kube-system, my-namespace]
settings:
modes:
enforce: "restricted"
Mensaje de rechazo personalizado
Cuando una directiva rechaza un recurso, el mensaje mostrado al usuario es el que escribió el autor de la directiva. A veces, los operadores de clúster pueden querer establecer un mensaje de rechazo personalizado. Por ejemplo, esto puede usarse para señalar a una wiki interna o para proporcionar un código de error más específico.
El campo message en los tipos ClusterAdmissionPolicy y AdmissionPolicy puede usarse para lograr esto.
|
|
El campo message permite a los operadores de clúster definir un mensaje de rechazo personalizado que anula el que devuelve la directiva. Al utilizar esta configuración, el mensaje de rechazo original se puede encontrar en el campo causes de la respuesta.
apiVersion: policies.kubewarden.io/v1
kind: ClusterAdmissionPolicy
metadata:
name: pod-privileged-with-message
spec:
module: registry://ghcr.io/kubewarden/policies/pod-privileged:1.0.2
policyServer: default
mode: protect
message: "Nops! You cannot do that"
settings: {}
rules:
- apiGroups:
- ""
apiVersions:
- v1
resources:
- "*"
operations:
- CREATE
mutating: false
Puedes obtener todos los detalles de una solicitud de admisión rechazada aumentando el nivel de verbosidad de kubectl:
$ kubectl -v4 run pod-privileged2 --image=registry.k8s.io/pause --privileged
I0612 16:32:43.647601 48424 cert_rotation.go:137] Starting client certificate rotation controller
I0612 16:32:43.662550 48424 helpers.go:246] server response object: [{
"metadata": {},
"status": "Failure",
"message": "admission webhook \"clusterwide-pod-privileged-with-message.kubewarden.admission\" denied the request: Nops! You cannot do that",
"details": {
"causes": [
{
"message": "Privileged container is not allowed"
}
]
},
"code": 400
}]
Negar un resultado de directiva envolviéndolo en un PolicyGroup
A veces, al utilizar una directiva, no implementa la lógica inversa de lo que necesitas aún.
Por ejemplo, quieres utilizar la priority-class directiva para rechazar un conjunto de clases de prioridad. Pero en el momento de escribir, la directiva priority-class solo admite permitido, no lista de bloqueo.
Un patrón común es envolver tu directiva en un AdmissionPolicyGroup o ClusterAdmissionPolicyGroup, y negar el resultado de la directiva en su spec.expression.
Por ejemplo, supongamos que queremos que los usuarios utilicen todas las clases de prioridad definidas dentro del clúster, excepto una de las siguientes: low-priority, med-priority y high-priority.
Actualmente, la configuración de la directiva permite expresar solo la lista de clases de prioridad permitidas. La siguiente directiva de grupo supera esta limitación.
apiVersion: policies.kubewarden.io/v1
kind: AdmissionPolicyGroup
metadata:
name: priority-class-denylist
namespace: your-namespace # or use a CLusterAdmissionPolicyGroup and set spec.namespaceSelector
spec:
rules:
- apiGroups: [""]
apiVersions: ["v1"]
resources: ["pods"]
operations: ["CREATE", "UPDATE"]
- apiGroups: [""]
apiVersions: ["v1"]
resources: ["replicationcontrollers"]
operations: ["CREATE", "UPDATE"]
- apiGroups: ["apps"]
apiVersions: ["v1"]
resources: ["deployments", "replicasets", "statefulsets", "daemonsets"]
operations: ["CREATE", "UPDATE"]
- apiGroups: ["batch"]
apiVersions: ["v1"]
resources: ["jobs", "cronjobs"]
operations: ["CREATE", "UPDATE"]
policies:
is_a_denied_priority_class:
module: ghcr.io/kubewarden/policies/priority-class-policy:v1.0.4
settings:
allowed_priority_classes:
- low-priority
- med-priority
- high-priority
expression: "!is_a_denied_priority_class()" # negated result
message: "the Pod is using a priorityClass that is not allowed"