Aller au contenu

Lab 02 : Network Policies dans OKS

  • Apprendre à tester et implémenter les Network Policies sur un cluster OKS
  1. Un cluster Kubernetes opérationnel fourni par OKS.
  2. Accès à la CLI kubectl.
  3. Droits administrateurs sur le cluster.
Terminal window
oks-cli cluster kubeconfig --cluster-name my-cluster --project-name my-project > kubeconfig.yaml
export KUBECONFIG=./kubeconfig.yaml
Terminal window
kubectl get nodes

Créer un namespace dédié

Terminal window
kubectl create namespace test-network-policy

Crée un fichier deployments.yaml :

---
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontend
namespace: test-network-policy
labels:
app: frontend
spec:
replicas: 1
selector:
matchLabels:
app: frontend
template:
metadata:
labels:
app: frontend
spec:
containers:
- name: frontend
image: nginx
ports:
- containerPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: backend
namespace: test-network-policy
labels:
app: backend
spec:
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: 80

Applique le déploiement :

Terminal window
kubectl apply -f deployments.yaml

Crée un fichier backend-svc.yaml :

---
apiVersion: v1
kind: Service
metadata:
name: backend
namespace: test-network-policy
spec:
selector:
app: backend
ports:
- protocol: TCP
port: 80
targetPort: 80 # chercher le bon port a partir de kubect log pods

Applique le service :

Terminal window
kubectl apply -f backend-svc.yaml

Vérifie les ressources créées :

Terminal window
kubectl get pods,svc -n test-network-policy

Exécute cette commande depuis frontend :

Terminal window
kubectl exec -it deployment/frontend -n test-network-policy -- curl -m 5 backend.test-network-policy.svc.cluster.local:80

Crée un fichier deny-all.yaml :

---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all
namespace: test-network-policy
spec:
podSelector:
matchLabels:
app: backend
policyTypes:
- Ingress
ingress: []

Applique la règle :

Terminal window
kubectl apply -f deny-all.yaml

Teste à nouveau la connexion :

Terminal window
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/v1
kind: NetworkPolicy
metadata:
name: allow-frontend
namespace: test-network-policy
spec:
podSelector:
matchLabels:
app: backend
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
ports:
- protocol: TCP
port: 80

Applique la règle :

Terminal window
kubectl apply -f allow-frontend.yaml

Teste à nouveau :

Terminal window
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é) :

Terminal window
kubectl run busybox --rm -it --image=busybox --restart=Never -- /bin/sh
wget backend.test-network-policy.svc.cluster.local:80

❌ Attendu : Connexion refusée.

Supprime les Network Policies :

Terminal window
kubectl delete networkpolicy deny-all allow-frontend -n test-network-policy

Supprime les ressources créées :

Terminal window
kubectl delete namespace test-network-policy
  • 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.