Pod Security Admission و Admission Policies
الهدف من الدرس
Section titled “الهدف من الدرس”ستتعلم كيف يعمل admission control، وكيف تستخدم Pod Security Admission و ValidatingAdmissionPolicy لفرض قواعد أساسية.
الفكرة ببساطة
Section titled “الفكرة ببساطة”Admission هو البوابة التي يمر منها أي request بعد authentication و authorization وقبل حفظه في etcd. هنا تستطيع منع Pod privileged أو image من registry غير مسموح.
Pod Security Admission
Section titled “Pod Security Admission”apiVersion: v1kind: Namespacemetadata: name: restricted-apps labels: pod-security.kubernetes.io/enforce: restricted pod-security.kubernetes.io/audit: restricted pod-security.kubernetes.io/warn: restrictedPod آمن نسبيا
Section titled “Pod آمن نسبيا”apiVersion: v1kind: Podmetadata: name: secure-nginx namespace: restricted-appsspec: securityContext: runAsNonRoot: true seccompProfile: type: RuntimeDefault containers: - name: nginx image: nginxinc/nginx-unprivileged:1.27 ports: - containerPort: 8080 securityContext: allowPrivilegeEscalation: false capabilities: drop: ["ALL"] resources: requests: cpu: "50m" memory: "64Mi" limits: cpu: "250m" memory: "128Mi"ValidatingAdmissionPolicy مثال
Section titled “ValidatingAdmissionPolicy مثال”apiVersion: admissionregistration.k8s.io/v1kind: ValidatingAdmissionPolicymetadata: name: require-team-labelspec: failurePolicy: Fail matchConstraints: resourceRules: - apiGroups: [""] apiVersions: ["v1"] operations: ["CREATE", "UPDATE"] resources: ["pods"] validations: - expression: "has(object.metadata.labels) && has(object.metadata.labels.team)" message: "Pods must have a team label"مقارنة سريعة
Section titled “مقارنة سريعة”| الأداة | الاستخدام |
|---|---|
| Pod Security Admission | مستويات جاهزة لأمان Pods |
| ValidatingAdmissionPolicy | قواعد CEL مخصصة بدون webhook خارجي |
| Policy engines مثل Kyverno/Gatekeeper | سياسات أعمق وتقارير وتجارب مؤسسة |
Lab: تفعيل restricted namespace
الهدف: إنشاء namespace بسياسة restricted وتشغيل Pod متوافق.
Prerequisites
Section titled “Prerequisites”- Cluster يدعم Pod Security Admission.
kubectl apply -f namespace.yamlkubectl apply -f secure-pod.yamlkubectl get pod -n restricted-appsExpected output
Section titled “Expected output”NAME READY STATUS RESTARTSsecure-nginx 1/1 Running 0Cleanup
Section titled “Cleanup”kubectl delete namespace restricted-appsأخطاء شائعة
Section titled “أخطاء شائعة”| الخطأ | النتيجة |
|---|---|
تفعيل restricted فجأة على namespace قديم | workloads قد تفشل عند أول update |
عدم استخدام warn و audit أولا | تفاجأ الفريق بالرفض |
| الاعتماد على admission فقط | لا يغني عن RBAC و image security |