Il y a deux types de trafic:
Par défaut, k8s est configuré avec une politique “all allow”,
qui autorise le traffic que n’importe quel pod vers n’importe quel autre pod ou service au sein du cluster.
Pn peut vouloir n’autoriser le trafic qu’entre certains pods. Par exemple, que le serveur front ne puisse pas directement communiquer avec la base de données — uniquement le back. Pour ce faire, on définit une politique réseau: un objet Kubernetes de type NetworkPolicy.
Les politiques de réseau sont appliquées par la solution de réseau sur le cluster k8s.
Toutes les solutions de réseau ne les supportent pas.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: db-policy
spec:
podSelector:
matchLabels:
role: db
policyTypes:
- Ingress
- Egress
ingress:
- ports:
...
from:
...
egress:
- ports:
...
to:
...
On spécifie le trafic entrant autorisé dans la propriété ingress.
Exemple: bloquer tout trafic entrant sur le pod “db”, sauf sur le port 3306 venant de “api-pod”:
policyTypes:
- Ingress
ingress:
- ports:
- protocol: TCP
port: 3306
from:
- podSelector:
matchlabels:
name: api-pod
On spécifie le trafic entrant autorisé dans la propriété egress.
Exemple: bloquer tout trafic sortant du pod “db”, sauf sur le port 80 allant vers une adresse IP dans la plage 192.168.5.10/32:
policyTypes:
- Egress
egress:
- ports:
- protocol: TCP
port: 80
to:
- ipBlock:
cidr:
Chaque politique contient une liste de règles: un OU s’applique entre ces règles.
Et chaque règle peut contenir plusieurs conditions: un ET s’applique entre ces conditions.
Autoriser le traffic venant du pod api-pod du namespace prod (prod.api-prod), ou venant de 192.168.5.10/31 |
Autoriser le traffic venant
du pod api-pod, ou d'un pod venant du namespace prod, ou de 192.168.5.10/31 |
|
|
Conditions de filtrage:
sur un pod:
podSelector:
matchLabels:
name: api-pod
sur un namespace:
namespaceSelector:
matchLabels:
name: prod
sur une plage d’adresse IP:
ipBlock:
cidr: 192.168.5.10/32
Utiliser la commande get “networkpolicy” ou “netpol” pour faire court
$ kubectl get netpol
NAME POD-SELECTOR AGE
payroll-policy name=payroll 36s
$ k describe netpol payroll-policy
Name: payroll-policy
Namespace: default
Created on: 2024-01-30 06:04:47 -0500 EST
Labels: <none>
Annotations: <none>
Spec:
PodSelector: name=payroll
Allowing ingress traffic:
To Port: 8080/TCP
From:
PodSelector: name=internal
Not affecting egress traffic
Policy Types: Ingress