Lab 02 : Network Policies dans OKS
Objectifs du Lab
Section intitulée « Objectifs du Lab »- Apprendre à tester et implémenter les Network Policies sur un cluster OKS
Pré-requis
Section intitulée « Pré-requis »- Un cluster Kubernetes opérationnel fourni par OKS.
- Accès à la CLI
kubectl. - Droits administrateurs sur le cluster.
Récupérer le fichier kubeconfig
Section intitulée « Récupérer le fichier kubeconfig »oks-cli cluster kubeconfig --cluster-name my-cluster --project-name my-project > kubeconfig.yamlexport KUBECONFIG=./kubeconfig.yamlTester le cluster
Section intitulée « Tester le cluster »kubectl get nodesDéployer un environnement de test
Section intitulée « Déployer un environnement de test »Créer un namespace dédié
kubectl create namespace test-network-policyDéployer les applications frontend et backend
Section intitulée « Déployer les applications frontend et backend »Crée un fichier deployments.yaml :
---apiVersion: apps/v1kind: Deploymentmetadata: name: frontend namespace: test-network-policy labels: app: frontendspec: replicas: 1 selector: matchLabels: app: frontend template: metadata: labels: app: frontend spec: containers: - name: frontend image: nginx ports: - containerPort: 80---apiVersion: apps/v1kind: Deploymentmetadata: name: backend namespace: test-network-policy labels: app: backendspec: replicas: 1 selector: matchLabels: app: backend template: metadata: labels: app: backend spec: containers: - name: backend image: hashicorp/http-echo args: - "-text=Hello from Backend" ports: - containerPort: 80Applique le déploiement :
kubectl apply -f deployments.yamlCréer un service pour exposer le backend
Section intitulée « Créer un service pour exposer le backend »Crée un fichier backend-svc.yaml :
---apiVersion: v1kind: Servicemetadata: name: backend namespace: test-network-policyspec: selector: app: backend ports: - protocol: TCP port: 80 targetPort: 80 # chercher le bon port a partir de kubect log podsApplique le service :
kubectl apply -f backend-svc.yamlVérifie les ressources créées :
kubectl get pods,svc -n test-network-policyTester la connectivité sans Network Policy
Section intitulée « Tester la connectivité sans Network Policy »Exécute cette commande depuis frontend :
kubectl exec -it deployment/frontend -n test-network-policy -- curl -m 5 backend.test-network-policy.svc.cluster.local:80Appliquer une Network Policy restrictive
Section intitulée « Appliquer une Network Policy restrictive »Crée un fichier deny-all.yaml :
---apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata: name: deny-all namespace: test-network-policyspec: podSelector: matchLabels: app: backend policyTypes: - Ingress ingress: []Applique la règle :
kubectl apply -f deny-all.yamlTeste à nouveau la connexion :
kubectl exec -it deployment/frontend -n test-network-policy -- curl -m 5 backend.test-network-policy.svc.cluster.local:80❌ Attendu : La connexion est bloquée (timeout ou erreur connection refused).
Autoriser uniquement frontend à accéder à backend
Section intitulée « Autoriser uniquement frontend à accéder à backend »Crée un fichier allow-frontend.yaml :
---apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata: name: allow-frontend namespace: test-network-policyspec: podSelector: matchLabels: app: backend policyTypes: - Ingress ingress: - from: - podSelector: matchLabels: app: frontend ports: - protocol: TCP port: 80Applique la règle :
kubectl apply -f allow-frontend.yamlTeste à nouveau :
kubectl exec -it deployment/frontend -n test-network-policy -- curl -m 5 backend.test-network-policy.svc.cluster.local:80✅ Attendu : connexion autorisée.
Teste avec un autre pod (doit être bloqué) :
kubectl run busybox --rm -it --image=busybox --restart=Never -- /bin/shwget backend.test-network-policy.svc.cluster.local:80❌ Attendu : Connexion refusée.
Nettoyage
Section intitulée « Nettoyage »Supprime les Network Policies :
kubectl delete networkpolicy deny-all allow-frontend -n test-network-policySupprime les ressources créées :
kubectl delete namespace test-network-policyConclusion
Section intitulée « Conclusion »- Sans Network Policy, tous les pods peuvent communiquer.
- Avec deny-all, tout est bloqué.
- Avec allow-frontend, seul frontend peut accéder à backend.
- Tester avec un autre pod montre bien que l’accès est restreint.