تخطَّ إلى المحتوى

Project 4: Ingress + TLS + NetworkPolicy

تحويل مشروع full-stack إلى شكل أقرب لـ Production: دخول خارجي من Ingress، TLS، ومنع الاتصالات غير المطلوبة باستخدام NetworkPolicy.

  • Ingress للـ frontend أو API.
  • TLS Secret أو cert-manager annotation.
  • NetworkPolicy تسمح للـ backend بالاتصال بقاعدة البيانات فقط.
  • منع traffic غير معروف إلى PostgreSQL.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: postgres-allow-backend-only
namespace: project-fullstack
spec:
podSelector:
matchLabels:
app: postgres
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: backend
ports:
- protocol: TCP
port: 5432
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: frontend
namespace: project-fullstack
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
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: http

Lab: تأمين traffic بين الخدمات

المستوى: مبتدئ الوقت: 50 دقيقة الأدوات: kubectl, curl

الهدف: إضافة Ingress وNetworkPolicy ثم اختبار الاتصال.

Terminal window
kubectl apply -f networkpolicy.yaml
kubectl get networkpolicy -n project-fullstack
kubectl apply -f ingress.yaml
kubectl get ingress -n project-fullstack

اختبر الوصول للـ database من Pod لا يملك label app=backend، ثم من backend.

الاتصال من Pod غير مسموح يجب أن يفشل أو يعلق، والاتصال من backend يجب أن يعمل.

Terminal window
kubectl delete -f ingress.yaml
kubectl delete -f networkpolicy.yaml
  • لا يوجد وصول مباشر إلى PostgreSQL إلا من backend.
  • Ingress يوجه traffic إلى Service الصحيح.
  • TLS موثق حتى لو كان self-signed في البيئة المحلية.