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>.yamlCopy 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 createdCopy 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-defaultpour 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: defaultdé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
ingressn'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.yamlCopy 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 createdCopy 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.yamlCopy 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 createdCopy 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.yamlCopy 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 createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
Vérification
Démarrez un service web dans l'espace de noms
defaulten 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=80Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exécutez la commande suivante pour déployer une image
alpinedans l'espace de nomssecondaryet 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 -- shCopy 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.defaultCopy 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.yamlCopy 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 createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
Vérification
Démarrez un service web dans l'espace de noms
defaulten 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=80Copy 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 prodCopy 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=productionCopy 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 devCopy 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=testingCopy to Clipboard Copied! Toggle word wrap Toggle overflow Exécutez la commande suivante pour déployer une image
alpinedans l'espace de nomsdevet 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 -- shCopy 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.defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow Résultats attendus
wget: download timed out
wget: download timed outCopy to Clipboard Copied! Toggle word wrap Toggle overflow Exécutez la commande suivante pour déployer une image
alpinedans l'espace de nomsprodet 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 -- shCopy 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.defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow Résultats attendus
Copy to Clipboard Copied! Toggle word wrap Toggle overflow