Project 4: Ingress + TLS + NetworkPolicy
تحويل مشروع full-stack إلى شكل أقرب لـ Production: دخول خارجي من Ingress، TLS، ومنع الاتصالات غير المطلوبة باستخدام NetworkPolicy.
المطلوب
Section titled “المطلوب”- Ingress للـ frontend أو API.
- TLS Secret أو cert-manager annotation.
- NetworkPolicy تسمح للـ backend بالاتصال بقاعدة البيانات فقط.
- منع traffic غير معروف إلى PostgreSQL.
NetworkPolicy مثال
Section titled “NetworkPolicy مثال”apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata: name: postgres-allow-backend-only namespace: project-fullstackspec: podSelector: matchLabels: app: postgres policyTypes: - Ingress ingress: - from: - podSelector: matchLabels: app: backend ports: - protocol: TCP port: 5432Ingress مثال
Section titled “Ingress مثال”apiVersion: networking.k8s.io/v1kind: Ingressmetadata: name: frontend namespace: project-fullstack annotations: cert-manager.io/cluster-issuer: letsencrypt-prodspec: ingressClassName: nginx tls: - hosts: - app.example.com secretName: frontend-tls rules: - host: app.example.com http: paths: - path: / pathType: Prefix backend: service: name: frontend port: name: httpLab: تأمين traffic بين الخدمات
الهدف: إضافة Ingress وNetworkPolicy ثم اختبار الاتصال.
kubectl apply -f networkpolicy.yamlkubectl get networkpolicy -n project-fullstackkubectl apply -f ingress.yamlkubectl get ingress -n project-fullstackاختبر الوصول للـ database من Pod لا يملك label app=backend، ثم من backend.
Expected output
Section titled “Expected output”الاتصال من Pod غير مسموح يجب أن يفشل أو يعلق، والاتصال من backend يجب أن يعمل.
Cleanup
Section titled “Cleanup”kubectl delete -f ingress.yamlkubectl delete -f networkpolicy.yamlAcceptance criteria
Section titled “Acceptance criteria”- لا يوجد وصول مباشر إلى PostgreSQL إلا من backend.
- Ingress يوجه traffic إلى Service الصحيح.
- TLS موثق حتى لو كان self-signed في البيئة المحلية.