20.2. Création d'une politique de réseau
En tant qu'utilisateur ayant le rôle admin
, vous pouvez créer une stratégie de réseau pour un espace de noms.
20.2.1. Exemple d'objet NetworkPolicy Copier lienLien copié sur presse-papiers!
Un exemple d'objet NetworkPolicy est annoté ci-dessous :
- 1
- Le nom de l'objet NetworkPolicy.
- 2
- Un sélecteur qui décrit les pods auxquels la politique s'applique. L'objet de politique ne peut sélectionner que des pods dans le projet qui définit l'objet NetworkPolicy.
- 3
- Un sélecteur qui correspond aux pods à partir desquels l'objet de politique autorise le trafic entrant. Le sélecteur correspond aux pods situés dans le même espace de noms que la NetworkPolicy.
- 4
- Liste d'un ou plusieurs ports de destination sur lesquels le trafic doit être accepté.
20.2.2. Création d'une politique de réseau à l'aide de l'interface de ligne de commande Copier lienLien copié sur presse-papiers!
Pour définir des règles granulaires décrivant le trafic réseau entrant ou sortant autorisé pour les espaces de noms de votre cluster, vous pouvez créer une stratégie réseau.
Si vous vous connectez avec un utilisateur ayant le rôle cluster-admin
, vous pouvez créer une stratégie de réseau dans n'importe quel espace de noms du cluster.
Conditions préalables
-
Votre cluster utilise un plugin réseau qui prend en charge les objets
NetworkPolicy
, tel que le fournisseur de réseau OpenShift SDN avecmode: NetworkPolicy
. Ce mode est le mode par défaut pour OpenShift SDN. -
Vous avez installé l'OpenShift CLI (
oc
). -
Vous êtes connecté au cluster avec un utilisateur disposant des privilèges
admin
. - Vous travaillez dans l'espace de noms auquel s'applique la politique de réseau.
Procédure
Créer une règle de politique :
Créer un fichier
<policy_name>.yaml
:touch <policy_name>.yaml
$ touch <policy_name>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow où :
<policy_name>
- Spécifie le nom du fichier de stratégie réseau.
Définissez une politique de réseau dans le fichier que vous venez de créer, comme dans les exemples suivants :
Refuser l'entrée de tous les pods dans tous les espaces de noms
Il s'agit d'une politique fondamentale, qui bloque tout réseau inter-pods autre que le trafic inter-pods autorisé par la configuration d'autres politiques de réseau.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Autoriser l'entrée de tous les pods dans le même espace de noms
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Autoriser le trafic entrant vers un pod à partir d'un espace de noms particulier
Cette politique autorise le trafic vers les pods étiquetés
pod-a
à partir des pods fonctionnant surnamespace-y
.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Pour créer l'objet de stratégie de réseau, entrez la commande suivante :
oc apply -f <policy_name>.yaml -n <namespace>
oc apply -f <policy_name>.yaml -n <namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow où :
<policy_name>
- Spécifie le nom du fichier de stratégie réseau.
<namespace>
- Facultatif : Spécifie l'espace de noms si l'objet est défini dans un espace de noms différent de l'espace de noms actuel.
Exemple de sortie
networkpolicy.networking.k8s.io/deny-by-default created
networkpolicy.networking.k8s.io/deny-by-default created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Si vous vous connectez à la console web avec les privilèges cluster-admin
, vous avez le choix de créer une politique de réseau dans n'importe quel espace de noms du cluster directement dans YAML ou à partir d'un formulaire dans la console web.
20.2.3. Création d'une stratégie réseau de refus de tout par défaut Copier lienLien copié sur presse-papiers!
Il s'agit d'une politique fondamentale, qui bloque tout réseau inter-pods autre que le trafic réseau autorisé par la configuration d'autres politiques de réseau déployées. Cette procédure applique une politique par défaut : deny-by-default
.
Si vous vous connectez avec un utilisateur ayant le rôle cluster-admin
, vous pouvez créer une stratégie de réseau dans n'importe quel espace de noms du cluster.
Conditions préalables
-
Votre cluster utilise un plugin réseau qui prend en charge les objets
NetworkPolicy
, tel que le fournisseur de réseau OpenShift SDN avecmode: NetworkPolicy
. Ce mode est le mode par défaut pour OpenShift SDN. -
Vous avez installé l'OpenShift CLI (
oc
). -
Vous êtes connecté au cluster avec un utilisateur disposant des privilèges
admin
. - Vous travaillez dans l'espace de noms auquel s'applique la politique de réseau.
Procédure
Créez le fichier YAML suivant qui définit une politique
deny-by-default
pour refuser l'entrée de tous les pods dans tous les espaces de noms. Enregistrez le YAML dans le fichierdeny-by-default.yaml
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
namespace: default
déploie cette politique dans l'espace de nomsdefault
.- 2
podSelector:
est vide, cela signifie qu'elle correspond à tous les pods. Par conséquent, la politique s'applique à tous les modules de l'espace de noms par défaut.- 3
- Aucune règle
ingress
n'est spécifiée. Le trafic entrant est donc supprimé pour tous les pods.
Appliquez la politique en entrant la commande suivante :
oc apply -f deny-by-default.yaml
$ oc apply -f deny-by-default.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
networkpolicy.networking.k8s.io/deny-by-default created
networkpolicy.networking.k8s.io/deny-by-default created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
20.2.4. Création d'une politique de réseau pour autoriser le trafic en provenance de clients externes Copier lienLien copié sur presse-papiers!
La politique deny-by-default
étant en place, vous pouvez configurer une politique qui autorise le trafic des clients externes vers un pod portant l'étiquette app=web
.
Si vous vous connectez avec un utilisateur ayant le rôle cluster-admin
, vous pouvez créer une stratégie de réseau dans n'importe quel espace de noms du cluster.
Suivez cette procédure pour configurer une politique qui autorise un service externe à partir de l'Internet public directement ou en utilisant un équilibreur de charge pour accéder au module. Le trafic n'est autorisé que vers un pod portant l'étiquette app=web
.
Conditions préalables
-
Votre cluster utilise un plugin réseau qui prend en charge les objets
NetworkPolicy
, tel que le fournisseur de réseau OpenShift SDN avecmode: NetworkPolicy
. Ce mode est le mode par défaut pour OpenShift SDN. -
Vous avez installé l'OpenShift CLI (
oc
). -
Vous êtes connecté au cluster avec un utilisateur disposant des privilèges
admin
. - Vous travaillez dans l'espace de noms auquel s'applique la politique de réseau.
Procédure
Créez une politique qui autorise le trafic provenant de l'Internet public directement ou en utilisant un équilibreur de charge pour accéder au pod. Enregistrez le YAML dans le fichier
web-allow-external.yaml
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Appliquez la politique en entrant la commande suivante :
oc apply -f web-allow-external.yaml
$ oc apply -f web-allow-external.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
networkpolicy.networking.k8s.io/web-allow-external created
networkpolicy.networking.k8s.io/web-allow-external created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Cette politique autorise le trafic en provenance de toutes les ressources, y compris le trafic externe, comme l'illustre le diagramme suivant :
20.2.5. Création d'une politique de réseau autorisant le trafic vers une application à partir de tous les espaces de noms Copier lienLien copié sur presse-papiers!
Si vous vous connectez avec un utilisateur ayant le rôle cluster-admin
, vous pouvez créer une stratégie de réseau dans n'importe quel espace de noms du cluster.
Suivez cette procédure pour configurer une stratégie qui autorise le trafic de tous les pods de tous les espaces de noms vers une application particulière.
Conditions préalables
-
Votre cluster utilise un plugin réseau qui prend en charge les objets
NetworkPolicy
, tel que le fournisseur de réseau OpenShift SDN avecmode: NetworkPolicy
. Ce mode est le mode par défaut pour OpenShift SDN. -
Vous avez installé l'OpenShift CLI (
oc
). -
Vous êtes connecté au cluster avec un utilisateur disposant des privilèges
admin
. - Vous travaillez dans l'espace de noms auquel s'applique la politique de réseau.
Procédure
Créez une politique qui autorise le trafic de tous les pods dans tous les espaces de noms vers une application particulière. Enregistrez le YAML dans le fichier
web-allow-all-namespaces.yaml
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow NotePar défaut, si vous ne précisez pas
namespaceSelector
, aucun espace de noms n'est sélectionné, ce qui signifie que la stratégie n'autorise que le trafic provenant de l'espace de noms dans lequel la stratégie de réseau est déployée.Appliquez la politique en entrant la commande suivante :
oc apply -f web-allow-all-namespaces.yaml
$ oc apply -f web-allow-all-namespaces.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
networkpolicy.networking.k8s.io/web-allow-all-namespaces created
networkpolicy.networking.k8s.io/web-allow-all-namespaces created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Vérification
Démarrez un service web dans l'espace de noms
default
en entrant la commande suivante :oc run web --namespace=default --image=nginx --labels="app=web" --expose --port=80
$ oc run web --namespace=default --image=nginx --labels="app=web" --expose --port=80
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exécutez la commande suivante pour déployer une image
alpine
dans l'espace de nomssecondary
et pour démarrer un shell :oc run test-$RANDOM --namespace=secondary --rm -i -t --image=alpine -- sh
$ oc run test-$RANDOM --namespace=secondary --rm -i -t --image=alpine -- sh
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exécutez la commande suivante dans l'interpréteur de commandes et observez que la demande est autorisée :
wget -qO- --timeout=2 http://web.default
# wget -qO- --timeout=2 http://web.default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Résultats attendus
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
20.2.6. Création d'une politique de réseau autorisant le trafic vers une application à partir d'un espace de noms Copier lienLien copié sur presse-papiers!
Si vous vous connectez avec un utilisateur ayant le rôle cluster-admin
, vous pouvez créer une stratégie de réseau dans n'importe quel espace de noms du cluster.
Suivez cette procédure pour configurer une politique qui autorise le trafic vers un pod avec l'étiquette app=web
à partir d'un espace de noms particulier. Vous pourriez vouloir faire ceci pour :
- Restreindre le trafic vers une base de données de production aux seuls espaces de noms dans lesquels des charges de travail de production sont déployées.
- Permet aux outils de surveillance déployés dans un espace de noms particulier de récupérer les mesures de l'espace de noms actuel.
Conditions préalables
-
Votre cluster utilise un plugin réseau qui prend en charge les objets
NetworkPolicy
, tel que le fournisseur de réseau OpenShift SDN avecmode: NetworkPolicy
. Ce mode est le mode par défaut pour OpenShift SDN. -
Vous avez installé l'OpenShift CLI (
oc
). -
Vous êtes connecté au cluster avec un utilisateur disposant des privilèges
admin
. - Vous travaillez dans l'espace de noms auquel s'applique la politique de réseau.
Procédure
Créez une politique qui autorise le trafic de tous les pods dans un espace de noms particulier avec un label
purpose=production
. Sauvegardez le YAML dans le fichierweb-allow-prod.yaml
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Appliquez la politique en entrant la commande suivante :
oc apply -f web-allow-prod.yaml
$ oc apply -f web-allow-prod.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
networkpolicy.networking.k8s.io/web-allow-prod created
networkpolicy.networking.k8s.io/web-allow-prod created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Vérification
Démarrez un service web dans l'espace de noms
default
en entrant la commande suivante :oc run web --namespace=default --image=nginx --labels="app=web" --expose --port=80
$ oc run web --namespace=default --image=nginx --labels="app=web" --expose --port=80
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exécutez la commande suivante pour créer l'espace de noms
prod
:oc create namespace prod
$ oc create namespace prod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exécutez la commande suivante pour étiqueter l'espace de noms
prod
:oc label namespace/prod purpose=production
$ oc label namespace/prod purpose=production
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exécutez la commande suivante pour créer l'espace de noms
dev
:oc create namespace dev
$ oc create namespace dev
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exécutez la commande suivante pour étiqueter l'espace de noms
dev
:oc label namespace/dev purpose=testing
$ oc label namespace/dev purpose=testing
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exécutez la commande suivante pour déployer une image
alpine
dans l'espace de nomsdev
et pour démarrer un shell :oc run test-$RANDOM --namespace=dev --rm -i -t --image=alpine -- sh
$ oc run test-$RANDOM --namespace=dev --rm -i -t --image=alpine -- sh
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exécutez la commande suivante dans l'interpréteur de commandes et observez que la demande est bloquée :
wget -qO- --timeout=2 http://web.default
# wget -qO- --timeout=2 http://web.default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Résultats attendus
wget: download timed out
wget: download timed out
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exécutez la commande suivante pour déployer une image
alpine
dans l'espace de nomsprod
et démarrer un shell :oc run test-$RANDOM --namespace=prod --rm -i -t --image=alpine -- sh
$ oc run test-$RANDOM --namespace=prod --rm -i -t --image=alpine -- sh
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exécutez la commande suivante dans l'interpréteur de commandes et observez que la demande est autorisée :
wget -qO- --timeout=2 http://web.default
# wget -qO- --timeout=2 http://web.default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Résultats attendus
Copy to Clipboard Copied! Toggle word wrap Toggle overflow