website/content/fr/docs/tasks/administer-cluster/declare-network-policy.md

4.6 KiB

title min-kubernetes-server-version content_type weight
Déclarer une politique réseau (NetworkPolicy) v1.8 task 180

Ce document vous aide à utiliser l'API NetworkPolicy de Kubernetes pour déclarer des politiques réseau qui gouvernent la communication entre les pods.

{{% thirdparty-content %}}

{{% heading "prerequisites" %}}

{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}

Assurez-vous d'avoir configuré un fournisseur de réseau qui supporte les politiques réseau. De nombreux fournisseurs de réseau prennent en charge les NetworkPolicy, notamment :

Créer un Deployment nginx et l'exposer via un Service

Pour comprendre comment fonctionne les politiques réseau dans Kubernetes, commencez par créer un déploiement nginx.

kubectl create deployment nginx --image=nginx
deployment.apps/nginx created

Exposez le déploiement via un service appelé nginx.

kubectl expose deployment nginx --port=80
service/nginx exposed

Les commandes ci-dessus créent un déploiement avec un Pod nginx et exposent le déploiement via un service nommé nginx. Le Pod et le Deployment nginx se trouvent dans le namespace default.

kubectl get svc,pod
NAME                        CLUSTER-IP    EXTERNAL-IP   PORT(S)    AGE
service/kubernetes          10.100.0.1    <none>        443/TCP    46m
service/nginx               10.100.0.16   <none>        80/TCP     33s

NAME                        READY         STATUS        RESTARTS   AGE
pod/nginx-701339712-e0qfq   1/1           Running       0          35s

Tester le Service en y accédant depuis un autre Pod

Vous devriez pouvoir accéder au nouveau service nginx depuis d'autres pods. Pour accéder au service nginx depuis un autre pod dans le namespace default, démarrez un conteneur busybox :

kubectl run busybox --rm -ti --image=busybox -- /bin/sh

Dans votre shell, exécutez la commande suivante :

wget --spider --timeout=1 nginx
Connecting to nginx (10.100.0.16:80)
remote file exists

Limiter l'accès au Service nginx

Pour limiter l'accès au service nginx afin que seuls les pods avec le label access: true puissent le consulter, créez un objet NetworkPolicy comme suit :

{{% code_sample file="service/networking/nginx-policy.yaml" %}}

Le nom d'un objet NetworkPolicy doit être un nom de sous-domaine DNS valide.

{{< note >}} Les NetworkPolicy incluent un podSelector qui sélectionne le regroupement de pods auxquels la politique s'applique. Vous pouvez voir que cette politique sélectionne les pods avec le label app=nginx. Ce label a été ajouté automatiquement au pod dans le déploiement nginx. Un podSelector vide sélectionne tous les pods dans le namespace. {{< /note >}}

Affecter la politique au Service

Utilisez kubectl pour créer une NetworkPolicy à partir du fichier nginx-policy.yaml ci-dessus :

kubectl apply -f https://k8s.io/examples/service/networking/nginx-policy.yaml
networkpolicy.networking.k8s.io/access-nginx created

Tester l'accès au Service lorsque le label d'accès n'est pas défini

Lorsque vous tentez d'accéder au service nginx depuis un pod sans les bons labels, la requête échoue :

kubectl run busybox --rm -ti --image=busybox -- /bin/sh

Dans votre shell, exécutez la commande :

wget --spider --timeout=1 nginx
Connecting to nginx (10.100.0.16:80)
wget: download timed out

Définir le label d'accès et tester à nouveau

Vous pouvez créer un pod avec le bon label pour voir que la requête est autorisée :

kubectl run busybox --rm -ti --labels="access=true" --image=busybox -- /bin/sh

Dans votre shell, exécutez la commande :

wget --spider --timeout=1 nginx
Connecting to nginx (10.100.0.16:80)
remote file exists