Les politiques réseau de Container Service for Kubernetes (ACK) offrent un contrôle du réseau basé sur des règles. Si vous utilisez le plug-in de réseau conteneurisé Terway, vous pouvez exploiter ces politiques pour gérer le trafic réseau au niveau des adresses IP ou des ports pour des applications spécifiques de votre cluster. Cette rubrique explique comment utiliser les politiques réseau dans les clusters ACK et présente des exemples de scénarios courants.
Prérequis
Vous avez créé un cluster managé ACK ou un cluster dédié ACK utilisant Terway comme plug-in réseau. Pour plus d'informations, consultez les rubriques Créer un cluster managé ACK et Créer un cluster dédié ACK (obsolète).
Vous avez obtenu le fichier kubeconfig du cluster et utilisé kubectl pour vous y connecter.
Remarques
Pour utiliser les politiques réseau via la console, vous devez soumettre une demande dans la console Quota Center.
Aucune demande n'est nécessaire si vous gérez les politiques réseau en ligne de commande.
Les règles NetworkPolicy utilisent des sélecteurs de libellés (LabelSelectors) pour cibler des namespaces ou des pods. Toutefois, un nombre élevé de NetworkPolicies dans un cluster peut allonger le délai d'application des règles et complexifier la gestion ainsi que le dépannage du cluster. Nous vous recommandons de créer moins de 100 NetworkPolicies dans votre cluster.
-
Cette fonctionnalité s'applique uniquement aux nœuds utilisant le plug-in CNI Terway configuré en mode ENI partagé. Elle n'est pas prise en charge pour les nœuds d'un pool de nœuds configuré en mode ENI exclusif.
Ce document ne couvre pas les configurations et limitations spécifiques aux différents scénarios de calcul. Pour utiliser cette fonctionnalité dans des environnements de calcul spécifiques, tels que le cloud hybride ou les instances élastiques, reportez-vous à la documentation du produit de calcul correspondant.
ACK prend uniquement en charge les politiques réseau Kubernetes standard. Il ne prend pas en charge les politiques réseau personnalisées de tiers telles que Calico ou Cilium.
Éléments pris en charge
Lors de la création d'un cluster, l'implémentation de NetworkPolicy dépend de la version initiale de Terway.
1.9.0 et versions ultérieures
|
Composant |
Implémentation de NetworkPolicy |
|
terway-eniip |
eBPF |
Pour cibler les pods au sein du cluster, utilisez
podSelectorounamespaceSelector. Le sélecteuripBlockne peut correspondre qu'à des adresses externes au cluster.Si vous créez un cluster avec une version de Terway antérieure à la 1.9.0, l'implémentation de NetworkPolicy reste inchangée même après la mise à niveau de Terway vers la version 1.9.0 ou ultérieure.
L'implémentation de NetworkPolicy basée sur eBPF nécessite une version du noyau 4.19 ou ultérieure. Si la version du noyau de votre nœud est antérieure à la 4,19, la fonctionnalité NetworkPolicy ne fonctionne pas.
Les remarques précédentes s'appliquent uniquement aux nœuds ECS standards exécutant le composant Terway. Pour activer NetworkPolicy sur les nœuds virtuels, consultez la rubrique Utiliser une politique réseau.
Antérieur à 1.9.0
|
Composant |
Implémentation de NetworkPolicy |
|
terway-eniip et IPvlan ou DataPath V2 n'est pas activé |
iptables |
|
terway-eniip et IPvlan ou DataPath V2 est activé |
eBPF |
Pour cibler les pods au sein du cluster, utilisez
podSelectorounamespaceSelector. Dans l'implémentation eBPF, le sélecteuripBlockne peut correspondre qu'à des adresses externes au cluster.Si vous créez un cluster avec une version initiale de Terway antérieure à la 1.9.0, l'implémentation de NetworkPolicy reste inchangée même après la mise à niveau de Terway vers la version 1.9.0 ou ultérieure.
L'implémentation de NetworkPolicy basée sur eBPF nécessite une version du noyau 4.19 ou ultérieure. Si la version du noyau de votre nœud est antérieure à la 4,19, la fonctionnalité NetworkPolicy revient au mode iptables. Notez que les règles NetworkPolicy peuvent ne pas fonctionner comme prévu.
Les remarques précédentes s'appliquent uniquement aux nœuds ECS standards exécutant le composant Terway. Pour activer NetworkPolicy sur les nœuds virtuels, consultez la rubrique Utiliser une politique réseau.
Activer les politiques réseau
Vous pouvez activer les politiques réseau lors de la création d'un cluster ou sur un cluster existant.
Nouveaux clusters
Lors de la création d'un cluster, sélectionnez Support for NetworkPolicies pour activer la fonctionnalité de politique réseau. Pour plus d'informations, consultez la rubrique Créer un cluster ACK Pro.
Clusters existants
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur Components and Add-ons .
-
Sous l'onglet Networking, localisez le module complémentaire terway-eniip et cliquez sur Configuration en bas à droite. Sélectionnez Enables NetworkPolicy puis cliquez sur OK.
ImportantPour les clusters dont DataPath V2 n'est pas activé, l'activation de la fonctionnalité NetworkPolicy ne prend pas effet immédiatement sur les nœuds existants. Vous devez redémarrer les nœuds pour que les modifications soient appliquées.
Exemples d'utilisation des politiques réseau
Préparer une application exemple
Suivez les étapes ci-dessous pour créer une application de test Nginx accessible par d'autres pods.
Utiliser la console
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom du cluster cible et, dans le volet de navigation de gauche, choisissez .
-
Sur la page Deployments, cliquez sur Create from Image. Dans l'assistant Create, créez une application nommée nginx et exposez-la à l'aide d'un service. Une fois l'application configurée, cliquez sur Create.
Pour cet exemple, configurez uniquement les éléments suivants pour l'application Nginx et conservez les paramètres par défaut pour les autres options. Pour plus d'informations sur les configurations, consultez la rubrique Créer une charge de travail sans état (Deployment).
Élément de configuration
Description
Valeur d'exemple
Basic Information
Name
Un nom personnalisé.
nginx
Replicas
Sélectionnez selon vos besoins.
1
Container
Image Name
Le nom de l'image utilisée pour démarrer le conteneur.
nginx:latest
Advanced
Services
À droite de Services, cliquez sur Create pour définir les éléments de configuration du service.
Name : nginx
Service Type :
Cluster IP
SLB
Node Port
Port Mapping :
Name : nginx
Service Port : 80
Container Port : 80
Protocol : TCP
-
Sur la page Deployments, cliquez sur Create from Image. Dans l'assistant Create qui s'affiche, créez une application cliente nommée busybox pour tester l'accès au service nginx créé à l'étape précédente.
Pour cet exemple, configurez uniquement les éléments suivants pour l'application cliente busybox et conservez les paramètres par défaut pour les autres options. Pour plus d'informations sur les configurations, consultez la rubrique Créer une charge de travail sans état (Deployment).
Élément de configuration
Description
Valeur d'exemple
Basic Information
Name
Un nom personnalisé.
busybox
Replicas
Définissez une valeur selon vos besoins.
1
Container
Image Name
Le nom de l'image utilisée pour démarrer le conteneur.
busybox:latest
Container Start Parameter
Aucun
Sélectionnez stdin et tty
-
Vérifiez que l'application cliente busybox peut accéder au service Nginx.
Sur la page Deployments, cliquez sur le nom de l'application busybox.
-
Sous l'onglet Pods, localisez le pod busybox-{valeur de hachage} et cliquez sur Terminal dans la colonne Actions.

-
Dans le terminal en ligne de commande de busybox, exécutez la commande
wget nginxpour tester l'accès à Nginx.
La sortie indique que busybox peut accéder au service Nginx.
Utiliser la CLI
-
Exécutez les commandes suivantes pour créer une application Nginx et l'exposer à l'aide d'un service nommé nginx.
Créez une application Nginx :
kubectl run nginx --image=nginxSortie attendue :
pod/nginx createdVérifiez si le pod a démarré :
kubectl get podSortie attendue :
NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 45sCréez un service nommé nginx :
kubectl expose pod nginx --port=80Sortie attendue :
service/nginx exposedAffichez le service :
kubectl get serviceSortie attendue :
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 172.XX.XX.1 <none> 443/TCP 30m nginx ClusterIP 172.XX.XX.48 <none> 80/TCP 12s -
Exécutez la commande suivante pour créer un pod nommé busybox et accéder au service nommé nginx.
kubectl run busybox --rm -ti --image=busybox /bin/shSortie attendue :
If you don't see a command prompt, try pressing enter. / # / #Accédez à nginx :
If you don't see a command prompt, try pressing enter. / # / # wget nginx # Enter wget nginx here.Sortie attendue :
Connecting to nginx (172.XX.XX.48:80) saving to 'index.html' index.html 100% |****************************************************************************************************************************************************| 612 0:00:00 ETA 'index.html' saved
Scénario 1 : Restreindre l'accès au service aux applications portant des libellés spécifiques à l'aide d'une politique réseau
Utiliser la console
Pour utiliser les politiques réseau dans la console, vous devez soumettre une demande d'ajout à la liste blanche. Pour plus d'informations, consultez la section Notes d'utilisation.
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur .
-
Sur la page Network Policies, sélectionnez un namespace en haut de la page. Cet exemple utilise le namespace default. Dans le coin supérieur gauche, cliquez sur Create. Dans le panneau Create, configurez la politique.
Paramètre
Description
Valeur d'exemple
Name
Nom personnalisé pour la politique réseau.
access-nginx
Pod Selectors
Cliquez sur + Specify workload type and labels pour définir les pods auxquels s'applique la politique réseau.
RemarqueSi le sélecteur de pod est vide, la politique réseau s'applique à tous les pods du namespace.
Cet exemple utilise les paramètres suivants :
Définissez Type sur Deployments
Définissez Workloads sur nginx
Définissez Labels sur app=nginx
Source
Chaque politique réseau peut contenir une liste blanche de règles source (ingress). Chaque règle autorise le trafic correspondant à la fois à la règle source et à la section de port spécifiée.
Rule :
podSelector : ce sélecteur choisit des pods spécifiques dans le même namespace que la politique réseau et les autorise comme sources pour le trafic entrant.
namespaceSelector : ce sélecteur choisit des namespaces spécifiques et utilise tous leurs pods comme sources pour le trafic entrant.
ipBlock : ce sélecteur choisit des plages CIDR IP spécifiques à utiliser comme sources pour le trafic entrant.
Port : prend en charge les protocoles TCP et UDP.
RemarqueSi vous n'ajoutez aucune règle, aucun pod ne pourra accéder aux pods sélectionnés.
Si DataPathv2 ou IPvlan est activé pour le cluster, vous ne pouvez pas utiliser ipBlock pour restreindre le trafic provenant des blocs CIDR de pod. Vous devez utiliser podSelector.
Cet exemple n'ajoute aucune règle source.
Destination
Chaque politique réseau peut contenir une liste blanche de règles egress. Chaque règle autorise le trafic correspondant à la règle de destination et à la section de port spécifiée.
Rule :
podSelector : ce sélecteur choisit des pods spécifiques dans le même namespace que la politique réseau et les autorise comme destinations pour le trafic sortant.
namespaceSelector : ce sélecteur choisit des namespaces spécifiques et utilise tous leurs pods comme destinations pour le trafic sortant.
ipBlock : ce sélecteur choisit des plages CIDR IP spécifiques comme destinations pour le trafic sortant.
Port : prend en charge les protocoles TCP et UDP.
RemarqueSi DataPathv2 ou IPvlan est activé pour le cluster, vous ne pouvez pas utiliser ipBlock pour restreindre le trafic provenant des blocs CIDR de pod. Vous devez utiliser podSelector.
Cet exemple n'ajoute aucune règle de destination.
Cliquez sur Next, puis sur OK.
-
Dans le terminal de ligne de commande busybox, exécutez la commande
wget nginxpour tester l'accès au service nginx. Pour plus d'informations, consultez l'Étape 5.L'accès expire car la politique réseau n'autorise pas l'accès depuis busybox.

-
Modifiez la politique réseau pour autoriser l'accès depuis l'application busybox.
Recherchez la politique réseau access-nginx dans la liste des politiques réseau et cliquez sur Edit dans la colonne Actions.
-
Ajoutez une règle source.
À droite de Source, cliquez sur + Add et effectuez les étapes suivantes :
-
À droite de Rule, cliquez sur + Add. Configurez une règle d'accès pour le podSelector comme suit :
Paramètre
Exemple
Sélecteur
podSelector
Type
Stateless
Charge de travail
busybox
Libellé
app=busybox
-
À droite de Port, cliquez sur + Add et configurez le port comme suit :
Paramètre
Exemple
Protocole
TCP
Port
80
-
Cliquez sur Next, puis sur OK.
-
Exécutez la commande
wget -O /dev/null nginxpour tester l'accès de busybox à nginx après avoir modifié la politique réseau.Une fois la règle pour l'application busybox ajoutée à la politique réseau, busybox peut accéder à nginx.

Utiliser la CLI
-
Exécutez la commande
vim policy.yamlpour créer un fichier nommé policy.yaml et remplissez-le avec le modèle YAML suivant.vim policy.yamlVoici le contenu du fichier YAML.
kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: name: access-nginx spec: podSelector: matchLabels: run: nginx ingress: - from: - podSelector: matchLabels: access: "true" -
Exécutez la commande suivante pour créer une politique réseau à partir du fichier policy.yaml.
kubectl apply -f policy.yamlSortie attendue :
networkpolicy.networking.k8s.io/access-nginx created -
Exécutez les commandes suivantes pour tester l'accès au service nginx. Comme aucun libellé d'accès n'est défini, la requête expire.
kubectl run busybox --rm -ti --image=busybox /bin/shTestez l'accès au service nginx :
wget nginxSortie attendue :
Connecting to nginx (172.19.XX.XX:80) wget: can't connect to remote host (172.19.XX.XX): Connection timed out -
Exécutez les commandes suivantes pour définir le libellé d'accès.
kubectl run busybox --rm -ti --labels="access=true" --image=busybox /bin/shTestez l'accès au service Nginx :
wget nginxSortie attendue :
Connecting to nginx (172.21.XX.XX:80) saving to 'index.html' index.html 100% |****************************************************************************************************************************************************| 612 0:00:00 ETA 'index.html' savedLa sortie indique que la progression de la connexion est de 100 %. Cela signifie que la requête a abouti et que le service Nginx est accessible.
Scénario 2 : Restreindre les blocs CIDR source pouvant accéder à un service exposé sur Internet à l'aide d'une politique réseau
Utiliser la console
Créez une politique réseau pour le service Nginx. Pour plus d'informations sur les configurations, consultez la section Restreindre l'accès au service aux applications portant des libellés spécifiques à l'aide d'une politique réseau.
-
Dans la colonne External Endpoint de la liste des services, repérez l'adresse d'accès public (47.xxx.xx.x) pour le service de l'application exemple Nginx et accédez-y via un navigateur.

L'accès échoue car la politique réseau refuse l'accès par défaut.
-
Ajoutez un bloc CIDR autorisé à la politique réseau pour permettre l'accès client.
Visitez myip.ipip.net dans un navigateur pour obtenir l'adresse IP publique de votre machine.
-
Dans la liste des politiques réseau, recherchez la politique réseau access-nginx, cliquez sur Edit dans la colonne Actions, et modifiez la règle dans le panneau Edit.
À droite de Source, cliquez sur + Add et procédez comme suit :
-
À droite de Rule, cliquez sur + Add. Configurez la nouvelle règle pour autoriser l'accès depuis l'adresse IP de votre machine :
Paramètre
Exemple
Sélecteur
ipBlock
cidr
<Adresse IP de votre machine>/32
Par exemple, 42.xx.xx.xx/32
-
À droite de Rule, cliquez sur + Add. Configurez la règle pour autoriser l'accès depuis le bloc CIDR de vérification d'état (health check) d'Alibaba Cloud SLB :
Paramètre
Exemple
Sélecteur
ipBlock
cidr
100.0.0.0/8
-
À droite de Port, cliquez sur + Add et configurez le port comme suit :
Paramètre
Exemple
Protocole
TCP
Port
80

-
Cliquez sur Next puis sur OK.
-
Dans la colonne External Endpoint de la liste des services, cliquez sur l'adresse IP du point de terminaison externe (47.xxx.xx.x:80) pour accéder au service Nginx.

Après modification de la politique réseau, le client peut accéder au service Nginx via le SLB exposé sur Internet.
Utiliser la CLI
-
Exécutez la commande suivante pour créer une instance Alibaba Cloud SLB pour l'application nginx. Spécifiez
type=LoadBalancerpour exposer le service nginx sur Internet.vim nginx-service.yamlVoici le modèle pour le fichier nginx-service.yaml.
# Paste the following YAML content into nginx-service.yaml. apiVersion: v1 kind: Service metadata: labels: run: nginx name: nginx-slb spec: externalTrafficPolicy: Local ports: - port: 80 protocol: TCP targetPort: 80 selector: run: nginx type: LoadBalancerExécutez la commande suivante pour créer une politique réseau à partir du fichier nginx-service.yaml.
kubectl apply -f nginx-service.yamlSortie attendue :
service/nginx-slb createdVérifiez si l'application expose le service Nginx :
kubectl get service nginx-slbSortie attendue :
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-slb LoadBalancer 172.19.xx.xxx 47.110.xxx.xxx 80:32240/TCP 8m -
Exécutez la commande suivante pour accéder à l'adresse IP de l'instance SLB nouvellement créée, 47 110.xxx.xxx. L'accès échoue.
wget 47.110.xxx.xxxSortie attendue :
--2018-11-21 11:46:05-- http://47.110.xx.xxx/ Connecting to 47.110.XX.XX:80... failed: Connection refused.RemarqueL'accès échoue pour les raisons suivantes :
Le service nginx configuré ne peut être accédé que par les applications portant le libellé spécifique
access=true.L'accès à l'adresse IP de l'instance SLB est considéré comme un accès externe à Kubernetes. Cela diffère du scénario de restriction d'accès au service aux applications portant des libellés spécifiques.
Solution : Modifiez la politique réseau pour ajouter le bloc CIDR source autorisé.
-
Exécutez la commande suivante pour afficher votre adresse IP locale.
curl myip.ipip.netSortie attendue :
Current IP: 10.0.x.x From: China Beijing Beijing # This is an example. Use the actual device information. -
Exécutez la commande suivante pour modifier le fichier policy.yaml.
vim policy.yamlModifiez le fichier policy.yaml pour inclure le contenu suivant :
# The following is the content of the YAML file. kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: name: access-nginx spec: podSelector: matchLabels: run: nginx ingress: - from: - podSelector: matchLabels: access: "true" - ipBlock: cidr: 100.64.0.0/10 - ipBlock: cidr: 10.0.0.1/24 # Local IP address. This is an example. Use the actual device information.Exécutez la commande suivante pour créer une politique réseau à partir du fichier policy.yaml.
kubectl apply -f policy.yamlSortie attendue :
networkpolicy.networking.k8s.io/access-nginx unchangedRemarqueCertains réseaux possèdent plusieurs adresses IP de sortie. Nous vous recommandons d'utiliser une plage d'adresses /24.
Les adresses de vérification d'état (health check) du SLB se trouvent dans le bloc CIDR
100.64.0.0/10. Par conséquent, vous devez ajouter100.64.0.0/10à la liste des autorisations.
-
Exécutez la commande suivante pour accéder au service Nginx.
kubectl run busybox --rm -ti --labels="access=true" --image=busybox /bin/shAccédez au service nginx :
wget 47.110.XX.XXSortie attendue :
Connecting to 47.110.XX.XX (47.110.XX.XX:80) index.html 100% |***********************************************************| 612 0:00:00 ETALa sortie indique que la progression de la connexion est de 100 %. Cela signifie que vous avez accédé avec succès au service Nginx.
Scénario 3 : Restreindre l'accès d'un pod à une adresse spécifique à l'aide d'une politique réseau
Utiliser la console
Cette section utilise www.aliyun.com et registry.aliyuncs.com comme exemples pour illustrer la configuration d'une politique réseau autorisant un pod à accéder uniquement à registry.aliyuncs.com.
-
Exécutez la commande
pingpour obtenir l'adresse IP (120.55.XXX.XXX) vers laquelle registry.aliyuncs.com se résout. -
Créez une règle de politique réseau limitant l'accès de l'application busybox à registry.aliyuncs.com uniquement.
Dans le coin supérieur gauche de la page Network Policies, cliquez sur Create et configurez la règle de politique réseau dans le panneau Create.
Définissez Type sur Deployments
Définissez Workloads sur busybox
Définissez Labels sur app=busybox
Selector : ipBlock
cidr : 120,55.XXX.XXX/32
À droite de Rule, cliquez sur + Add. Ajoutez une règle sélectionnant tous les namespaces.
À droite de Port, cliquez sur + Add. Ajoutez une règle pour UDP 53 afin de permettre la résolution DNS par l'application.
Rule :
Selector : namespaceSelector
Namespace : All
Port :
Protocol : UDP
Port : 53
Cliquez sur Next puis sur OK.
-
Dans le terminal busybox, exécutez les commandes suivantes pour accéder à www.aliyun.com et à registry.aliyuncs.com.
nc -vz -w 1 www.aliyunc.com 443nc -vz -w 1 registry.aliyuncs.com 443La sortie indique qu'après l'ajout de la politique réseau, l'application busybox peut accéder uniquement à registry.aliyuncs.com et ne peut pas atteindre d'autres adresses.

Pour plus d'informations sur les paramètres, consultez la rubrique Restreindre l'accès aux services des applications portant des libellés spécifiques à l'aide d'une politique réseau. Voici un exemple de configuration.
Paramètre
Description
Exemple
Name
Nom personnalisé de la politique réseau.
busybox-policy
Pod Selectors
Cliquez sur + Specify workload type and labels pour définir les pods auxquels s'applique la politique réseau.
RemarqueSi le sélecteur de pod est vide, la politique réseau s'applique à tous les pods du namespace.
Cet exemple utilise les paramètres suivants :
Destination
À droite de Destination, cliquez sur + Add, puis à droite de Rule, cliquez sur + Add.
Ajoutez une règle pour ipBlock avec l'adresse IP résolue (120.55.XXX.XXX)/32 de registry.aliyuncs.com obtenue précédemment.

À droite de Destination, cliquez sur + Add. Ajoutez une règle autorisant l'accès au port UDP 53 pour tous les namespaces afin de garantir la résolution DNS de l'application.

Utiliser la CLI
-
Exécutez la commande suivante pour obtenir la liste des adresses IP vers lesquelles le nom de domaine www.aliyun.com se résout.
dig +short www.aliyun.comSortie attendue :
www-jp-de-intl-adns.aliyun.com. www-jp-de-intl-adns.aliyun.com.gds.alibabadns.com. v6wagbridge.aliyun.com. v6wagbridge.aliyun.com.gds.alibabadns.com. 106.XX.XX.21 140.XX.XX.4 140.XX.XX.13 140.XX.XX.3 -
Créez un fichier nommé busybox-policy.yaml.
vim busybox-policy.yamlUtilisez le modèle suivant pour le fichier busybox-policy.yaml :
# The following is the content of the YAML file. kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: name: busybox-policy spec: podSelector: matchLabels: run: busybox egress: - to: - ipBlock: cidr: 106.XX.XX.21/32 - ipBlock: cidr: 140.XX.XX.4/32 - ipBlock: cidr: 140.XX.XX.13/32 - ipBlock: cidr: 140.XX.XX.3/32 - to: - ipBlock: cidr: 0.0.0.0/0 - namespaceSelector: {} ports: - protocol: UDP port: 53RemarqueDans le fichier busybox-policy.yaml, les règles egress restreignent l'accès sortant de l'application. Vous devez configurer les règles pour autoriser les requêtes UDP, faute de quoi la résolution DNS échouera.
-
Exécutez la commande suivante pour créer une politique réseau à partir du fichier busybox-policy.yaml.
kubectl apply -f busybox-policy.yamlSortie attendue :
networkpolicy.networking.k8s.io/busybox-policy created -
Exécutez la commande suivante pour créer un pod busybox et tester l'accès.
kubectl run busybox --rm -ti --image=busybox /bin/shAccédez à un site web autre que www.aliyun.com, par exemple www.taobao.com :
wget www.taobao.comSortie attendue :
Connecting to www.taobao.com (64.13.XX.XX:80) wget: can't connect to remote host (64.13.XX.XX): Connection timed outLe message can't connect to remote host indique un échec de connexion.
-
Exécutez la commande suivante pour accéder à www.aliyun.com.
wget www.aliyun.comSortie attendue :
Connecting to www.aliyun.com (140.205.XX.XX:80) Connecting to www.aliyun.com (140.205.XX.XX:443) wget: note: TLS certificate validation not implemented index.html 100% |***********************************************************| 462k 0:00:00 ETALa sortie indique une progression de la connexion à 100 %, ce qui signifie que l'accès au service a réussi.
Scénario 4 : Contrôler l'accès au réseau public des pods d'un namespace à l'aide d'une politique réseau
Cette opération peut affecter les services en ligne accédant au réseau public. Nous vous recommandons d'effectuer les opérations suivantes dans un namespace vide.
Utiliser la console
-
Dans le coin supérieur gauche de la page Network Policies, cliquez sur Create et configurez la règle de politique réseau dans le panneau Create.
Pour plus d'informations sur les paramètres et les opérations, consultez la rubrique Restreindre l'accès aux services des applications portant des libellés spécifiques à l'aide d'une politique réseau. Voici un exemple de configuration.
Paramètre
Exemple
Name
deny-public-net
Pod Selectors
Définissez Type sur All.
Source
Ajoutez les deux règles suivantes :
Définissez une règle autorisant tout pour namespaceSelector.
Définissez une règle autorisant tout pour ipBlock.

Destination
Ajoutez une règle n'autorisant l'accès qu'au réseau interne :
Définissez une règle autorisant All pour namespaceSelector afin de permettre au pod d'accéder à tous les pods du réseau interne.
Définissez trois règles pour ipBlock correspondant aux trois blocs CIDR du réseau interne suivants :
10.0.0.0/8
172.16.0.0/12
192.168.0.0/16
RemarqueVous ne pouvez pas ajouter plusieurs blocs CIDR dans une seule règle ipBlock.

Cliquez sur Next puis sur OK.
-
Sur l'onglet Basic Information de la page des détails du cluster, obtenez l'adresse IP interne et le port du serveur API.

-
Dans le terminal busybox, exécutez les commandes suivantes pour tester l'accès du pod aux réseaux public et interne.
nc -vz -w 1 www.aliyunc.com 443nc -vz -w 1 10.xx.xx.xx:<IP port> # This is your internal IP address.La sortie montre que le pod peut accéder uniquement aux adresses internes et non aux adresses publiques.

Utiliser la CLI
-
Exécutez la commande suivante pour créer un namespace de test.
Créez un namespace nommé test-np.
kubectl create ns test-npSortie attendue :
namespace/test-np created -
Exécutez la commande suivante pour créer une politique réseau par défaut pour le namespace, n'autorisant que l'accès sortant vers les réseaux privés.
vim default-deny.yamlVoici un exemple de modèle pour le fichier default-deny.yaml :
# The following is the content of the YAML file. kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: namespace: test-np name: deny-public-net spec: podSelector: {} ingress: - from: - ipBlock: cidr: 0.0.0.0/0 egress: - to: - ipBlock: cidr: 192.168.0.0/16 - ipBlock: cidr: 172.16.0.0/12 - ipBlock: cidr: 10.0.0.0/8Vérifiez que le fichier default-deny.yaml a été créé.
kubectl apply -f default-deny.yamlSortie attendue :
networkpolicy.networking.k8s.io/deny-public-net createdAffichez la politique réseau :
kubectl get networkpolicy -n test-npSortie attendue :
NAME POD-SELECTOR AGE deny-public-net <none> 1m -
Exécutez la commande suivante pour créer une politique réseau permettant aux pods portant un libellé spécifique d'accéder au réseau public.
vim allow-specify-label.yamlDans cet exemple, le libellé est
public-network=true.# The following is the content of the YAML file. kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: name: allow-public-network-for-labels namespace: test-np spec: podSelector: matchLabels: public-network: "true" ingress: - from: - ipBlock: cidr: 0.0.0.0/0 egress: - to: - ipBlock: cidr: 0.0.0.0/0 - namespaceSelector: matchLabels: ns: kube-system # Allows pods to access key services in kube-system (such as CoreDNS). This is an example. Configure as needed.Exécutez la commande suivante pour créer la politique réseau :
kubectl apply -f allow-specify-label.yamlSortie attendue :
networkpolicy.networking.k8s.io/allow-public-network-for-labels createdAffichez la politique réseau :
kubectl get networkpolicy -n test-npSortie attendue :
NAME POD-SELECTOR AGE allow-public-network-for-labels public-network=true 1m deny-public-net <none> 3m -
Exécutez les commandes suivantes pour vérifier qu'un pod sans le libellé spécial ne peut pas accéder au réseau public.
kubectl run -it --namespace test-np --rm --image registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/busybox:1.28 busybox-intranetping aliyun.comSortie attendue :
PING aliyun.com (106.11.2xx.xxx): 56 data bytes ^C --- aliyun.com ping statistics --- 9 packets transmitted, 0 packets received, 100% packet lossLe message 0 packets received indique un échec de connexion.
RemarqueL'échec de connexion s'explique par la politique réseau deny-public-net qui restreint par défaut l'accès au réseau public pour les pods du namespace test-np. Par conséquent, les pods démarrés dans ce namespace avec des libellés par défaut ne peuvent pas accéder au réseau public.
-
Exécutez la commande suivante pour vérifier qu'un pod portant le libellé public-network=true peut accéder au réseau public.
kubectl run -it --namespace test-np --labels public-network=true --rm --image registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/busybox:1.28 busybox-internetping aliyun.comSortie attendue :
PING aliyun.com (106.11.1xx.xx): 56 data bytes 64 bytes from 106.11.1xx.xx: seq=0 ttl=47 time=4.235 ms 64 bytes from 106.11.1xx.xx: seq=1 ttl=47 time=4.200 ms 64 bytes from 106.11.1xx.xx: seq=2 ttl=47 time=4.182 ms ^C --- aliyun.com ping statistics --- 3 packets transmitted, 3 packets received, 0% packet loss round-trip min/avg/max = 4.182/4.205/4.235 msLe message 0 % packet loss indique que l'accès au service a réussi.
RemarqueL'accès réussit car la politique réseau allow-public-network-for-labels autorise l'accès au réseau public pour les pods portant le libellé public-network=true. Ainsi, le pod busybox-internet, qui possède ce libellé, peut accéder au réseau public.