|
Dieses Dokument wurde mithilfe automatisierter maschineller Übersetzungstechnologie übersetzt. Wir bemühen uns um korrekte Übersetzungen, übernehmen jedoch keine Gewähr für die Vollständigkeit, Richtigkeit oder Zuverlässigkeit der übersetzten Inhalte. Im Falle von Abweichungen ist die englische Originalversion maßgebend und stellt den verbindlichen Text dar. |
|
Dies ist eine unveröffentlichte Dokumentation für Admission Controller 1.34-dev. |
Wiederverwendung von ValidatingAdmissionPolicies
Kubernetes Vanilla Validating Policies bestehen aus den folgenden Ressourcen:
-
ValidatingAdmissionPolicy: beschreibt die Logik in CEL. Es akzeptiert optional auch Parameter in
spec.paramKind. -
ValidatingAdmissionPolicyBinding: begrenzt die Richtlinie.
Lassen Sie uns ein konkretes Beispiel ansehen. Diese und andere können mit SUSE Security Admission Controller’s
cel-policy mit wenig Aufwand wiederverwendet werden.
ValidatingAdmissionPolicy
Die folgende ValidatingAdmissionPolicy wurde aus den Kubernetes‐Dokumenten abgeleitet.
Diese Richtlinie überprüft, ob die Anzahl der Replikate in Implementierungen kleiner oder gleich einem Standardwert maxreplicas von 5 ist. Benutzer können diesen Standard pro Namespace oder Implementierung überschreiben und eine kleinere Zahl über die Verwendung eines Parameters wählen.
Es ist mit einem ValidatingAdmissionPolicyBinding gebunden. Es betrifft also nur Namespaces, bei denen das Label environment auf test gesetzt ist.
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingAdmissionPolicy
metadata:
name: "replicalimit-policy.example.com"
spec:
failurePolicy: Fail # (1)
matchConstraints: # (2)
resourceRules:
- apiGroups: ["apps"]
apiVersions: ["v1"]
operations: ["CREATE", "UPDATE"]
resources: ["deployments"]
variables: # (3)
- name: maxReplicas # hardcoded global default
expression: int(5)
paramKind: # (4)
apiVersion: v1
kind: ConfigMap # user-provided override
validations: # (5)
- expression: |
object.spec.replicas <= (
has(params.data.overrideReplicas) && int(params.data.overrideReplicas) < variables.maxReplicas
? int(params.data.overrideReplicas)
: variables.maxReplicas
)
messageExpression: |
'The number of replicas must be less than or equal to ' +
string( has(params.data.overrideReplicas) && int(params.data.overrideReplicas) < variables.maxReplicas
? int(params.data.overrideReplicas)
: variables.maxReplicas)
---
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingAdmissionPolicyBinding
metadata:
name: "replicalimit-binding-test.example.com"
spec:
policyName: "replicalimit-policy.example.com"
validationActions: [Deny] # (7)
matchResources: # (8)
namespaceSelector:
matchLabels:
environment: test
paramRef: # (4)
name: "replica-limit-override"
namespace: "test"
parameterNotFoundAction: Deny
---
apiVersion: v1
kind: ConfigMap
metadata:
name: replica-limit-override
namespace: test
data:
overrideReplicas: "3"
Hier haben wir eine äquivalente Admission Controller Richtlinie:
Admission Controller’s cel-policy
apiVersion: policies.kubewarden.io/v1
kind: ClusterAdmissionPolicy
metadata:
annotations:
io.kubewarden.policy.category: Resource validation # (9)
io.kubewarden.policy.severity: low # (9)
name: "cel-policy-replica-example"
spec:
module: registry://ghcr.io/kubewarden/policies/cel-policy:v1.4.0
failurePolicy: Fail # (6). Webhook behavior. Defaults to "Fail"
mode: protect # (7). Defaults to "protect"
rules: # (2)
- apiGroups: ["apps"]
apiVersions: ["v1"]
operations: ["CREATE", "UPDATE"]
resources: ["deployments"]
contextAwareResources: # (10). Fine-grained perms for accessing resources
- apiVersion: v1
kind: ConfigMap
settings:
failurePolicy: Fail # (1). CEL behavior. Defaults to "Fail"
variables: # (3)
- name: "replicas"
expression: "object.spec.replicas"
- name: maxReplicas
expression: int(5)
paramKind: # (4)
apiVersion: v1
kind: ConfigMap # user-provided override
paramRef: # (4)
name: "replica-limit-override"
namespace: "test"
parameterNotFoundAction: Deny
validations: # (5)
- expression: |
object.spec.replicas <= (
has(params.data.overrideReplicas) && int(params.data.overrideReplicas) < variables.maxReplicas
? int(params.data.overrideReplicas)
: variables.maxReplicas
)
messageExpression: |
'The number of replicas must be less than or equal to ' +
string( has(params.data.overrideReplicas) && int(params.data.overrideReplicas) < variables.maxReplicas
? int(params.data.overrideReplicas)
: variables.maxReplicas)
backgroundAudit: true # (9). Defaults to "true"
namespaceSelector: # (8)
matchLabels:
environment: test
---
apiVersion: v1
kind: ConfigMap
metadata:
name: replica-limit-override
namespace: test
data:
overrideReplicas: "3"
Beachten Sie die kommentierten Zahlen in beiden YAML-Manifesten. Lassen Sie uns darauf eingehen:
| # | VAP-Feld | cel-policy Feld |
Beschreibung |
|---|---|---|---|
1 |
|
|
CEL-Verhalten, wenn der CEL-Ausdruck auf falsch ausgewertet wird, gibt es CEL-Laufzeitfehler oder es gibt ungültige oder falsch konfigurierte CEL. Zum Beispiel ein CEL-Ausdruck, der falsch zurückgibt, fehlende Parameter oder fehlende Variablen. Nicht zu verwechseln mit (6). |
2 |
|
|
Beide akzeptieren dasselbe RuleWithOperations, das darüber informiert, auf welche Art von Ressource die Richtlinie angewendet wird. |
3 |
|
|
In Admission Controller’s |
4 |
|
|
In Admission Controller’s |
5 |
|
|
In Admission Controller’s |
6 |
|
|
Webhook-Verhalten, bei Kubernetes API Webhook-Fehler oder Zeitüberschreitung oder bei der Auswertung von matchConditions. Nicht zu verwechseln mit (1). |
7 |
|
|
|
8 |
|
|
Definieren Sie Möglichkeiten zur Einschränkung mit Selektoren. Die Richtlinien von Admission Controller haben sie als |
9 |
|
|
Verwenden Sie Admission Controller Felder, um die Nutzung der Richtlinie in Audit Scanner sowie deren Kategorie und Schweregrad für OpenReports festzulegen. |
10 |
|
|
Die Richtlinien von Admission Controller haben feingranulare Berechtigungen zum Lesen der Cluster-Ressourcen. Hier wird es zum Lesen der Parameter verwendet. |
|
|
Die Richtlinien von Admission Controller haben |
|
|
Admission Controller-nur Funktionen |
Für andere Funktionen, siehe die restlichen Tutorial-CEL-Beispiele. |
|
Sie können das Dieses VAP-Migrationsanleitung beschreibt, wie man dies tut. |
Noch zu implementierende Entsprechungen
Es gibt einige VAP-Funktionen, die noch nicht implementiert sind. Wenn Sie sich darauf freuen, kontaktieren Sie uns bitte. Das sind folgende:
-
VAP Audit-Anmerkungen (ValidatingAdmissionPolicy
spec.auditAnnotations, wenn ValidatingAdmissionPolicyBindingspec.validationActionsauf "Audit" gesetzt ist). Dies wird von Admission Controller’s Audit Scanner und PolicyReports abgedeckt, die es ermöglichen, Ressourcen, die bereits im Cluster sind, zu auditieren. -
CEL Ressourcenschränkungen und geschätzte Kostenobergrenze. Dies wird durch Admission Controller’s allgemeine Richtlinien-Timeout-Schutz abgedeckt.
Anwenden der Richtlinie
Wie gewohnt können wir unsere Richtlinie bereitstellen, indem wir ihr Manifest instanziieren:
$ kubectl apply -f ./cel-policy-example.yaml
Und dann testen, indem wir eine Implementierung instanziieren:
$ kubectl apply -f - <<EOF
apiVersion: v1
kind: Namespace
metadata:
name: test
labels:
environment: test
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: test
spec:
replicas: 6
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
EOF
namespace/test created
Error from server: error when creating "STDIN":
admission webhook "clusterwide-cel-policy-replica-example.kubewarden.admission" denied the request:
The number of replicas must be less than or equal to 5