Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Use network policies in ACK clusters

Dernière mise à jour :Aug 20, 2026

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

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

Important
  • Pour cibler les pods au sein du cluster, utilisez podSelector ou namespaceSelector. Le sélecteur ipBlock ne 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

Important
  • Pour cibler les pods au sein du cluster, utilisez podSelector ou namespaceSelector. Dans l'implémentation eBPF, le sélecteur ipBlock ne 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

  1. Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.

  2. Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur Components and Add-ons .

  3. 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.

    image

    Important

    Pour 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

  1. Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.

  2. Sur la page Clusters, cliquez sur le nom du cluster cible et, dans le volet de navigation de gauche, choisissez Workloads > Deployments.

  3. 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

  4. 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

  5. Vérifiez que l'application cliente busybox peut accéder au service Nginx.

    1. Sur la page Deployments, cliquez sur le nom de l'application busybox.

    2. Sous l'onglet Pods, localisez le pod busybox-{valeur de hachage} et cliquez sur Terminal dans la colonne Actions.

      image.png

    3. Dans le terminal en ligne de commande de busybox, exécutez la commande wget nginx pour tester l'accès à Nginx.

      connection

      La sortie indique que busybox peut accéder au service Nginx.

Utiliser la CLI

  1. 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=nginx

    Sortie attendue :

    pod/nginx created

    Vérifiez si le pod a démarré :

    kubectl get pod

    Sortie attendue :

    NAME                     READY   STATUS    RESTARTS   AGE
    nginx                    1/1     Running   0          45s

    Créez un service nommé nginx :

    kubectl expose pod nginx --port=80

    Sortie attendue :

    service/nginx exposed

    Affichez le service :

    kubectl get service

    Sortie 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
  2. 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/sh

    Sortie 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.

  1. Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.

  2. Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur Network > Network Policies.

  3. 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.

    Remarque

    Si 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.

    Remarque
    • Si 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.

    Remarque

    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 de destination.

  4. Cliquez sur Next, puis sur OK.

  5. Dans le terminal de ligne de commande busybox, exécutez la commande wget nginx pour 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.

    timeout

  6. Modifiez la politique réseau pour autoriser l'accès depuis l'application busybox.

    1. Recherchez la politique réseau access-nginx dans la liste des politiques réseau et cliquez sur Edit dans la colonne Actions.

    2. 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

    3. Cliquez sur Next, puis sur OK.

    4. Exécutez la commande wget -O /dev/null nginx pour 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.Accès normal

Utiliser la CLI

  1. Exécutez la commande vim policy.yaml pour créer un fichier nommé policy.yaml et remplissez-le avec le modèle YAML suivant.

    vim policy.yaml

    Voici 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"
  2. Exécutez la commande suivante pour créer une politique réseau à partir du fichier policy.yaml.

    kubectl apply -f policy.yaml 

    Sortie attendue :

    networkpolicy.networking.k8s.io/access-nginx created
  3. 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/sh

    Testez l'accès au service nginx :

    wget nginx

    Sortie attendue :

    Connecting to nginx (172.19.XX.XX:80)
    wget: can't connect to remote host (172.19.XX.XX): Connection timed out
  4. Exécutez les commandes suivantes pour définir le libellé d'accès.

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

    Testez l'accès au service Nginx :

    wget nginx

    Sortie attendue :

    Connecting to nginx (172.21.XX.XX:80)
    saving to 'index.html'
    index.html           100% |****************************************************************************************************************************************************|   612  0:00:00 ETA
    'index.html' saved

    La 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

  1. 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.

  2. 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.en

    L'accès échoue car la politique réseau refuse l'accès par défaut.

  3. Ajoutez un bloc CIDR autorisé à la politique réseau pour permettre l'accès client.

    1. Visitez myip.ipip.net dans un navigateur pour obtenir l'adresse IP publique de votre machine.

    2. 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

      ipblock

    3. Cliquez sur Next puis sur OK.

    4. 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.

      image.png

      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

  1. Exécutez la commande suivante pour créer une instance Alibaba Cloud SLB pour l'application nginx. Spécifiez type=LoadBalancer pour exposer le service nginx sur Internet.

    vim nginx-service.yaml

    Voici 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: LoadBalancer

    Exécutez la commande suivante pour créer une politique réseau à partir du fichier nginx-service.yaml.

    kubectl apply -f nginx-service.yaml 

    Sortie attendue :

    service/nginx-slb created

    Vérifiez si l'application expose le service Nginx :

    kubectl get service nginx-slb

    Sortie 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
  2. 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.xxx

    Sortie attendue :

    --2018-11-21 11:46:05--  http://47.110.xx.xxx/
    Connecting to 47.110.XX.XX:80... failed: Connection refused.
    Remarque

    L'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é.

  3. Exécutez la commande suivante pour afficher votre adresse IP locale.

    curl myip.ipip.net

    Sortie attendue :

    Current IP: 10.0.x.x From: China Beijing Beijing        # This is an example. Use the actual device information.
  4. Exécutez la commande suivante pour modifier le fichier policy.yaml.

    vim policy.yaml

    Modifiez 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.yaml 

    Sortie attendue :

    networkpolicy.networking.k8s.io/access-nginx unchanged
    Remarque
    • Certains 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 ajouter 100.64.0.0/10 à la liste des autorisations.

  5. Exécutez la commande suivante pour accéder au service Nginx.

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

    Accédez au service nginx :

    wget 47.110.XX.XX

    Sortie attendue :

    Connecting to 47.110.XX.XX (47.110.XX.XX:80)
    index.html           100% |***********************************************************|   612  0:00:00 ETA

    La 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.

  1. Exécutez la commande ping pour obtenir l'adresse IP (120.55.XXX.XXX) vers laquelle registry.aliyuncs.com se résout.

  2. Créez une règle de politique réseau limitant l'accès de l'application busybox à registry.aliyuncs.com uniquement.

    1. 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.

    2. 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.

      Remarque

      Si 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 busybox

      • Définissez Labels sur app=busybox

      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.

      • Selector : ipBlock

      • cidr : 120,55.XXX.XXX/32

      image.png

      À 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.

      • À 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

      image

    3. Cliquez sur Next puis sur OK.

    4. 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 443
      nc -vz -w 1 registry.aliyuncs.com 443

      La 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.dns

Utiliser la CLI

  1. 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.com

    Sortie 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
  2. Créez un fichier nommé busybox-policy.yaml.

    vim busybox-policy.yaml

    Utilisez 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: 53
    Remarque

    Dans 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.

  3. Exécutez la commande suivante pour créer une politique réseau à partir du fichier busybox-policy.yaml.

    kubectl apply -f busybox-policy.yaml 

    Sortie attendue :

    networkpolicy.networking.k8s.io/busybox-policy created
  4. Exécutez la commande suivante pour créer un pod busybox et tester l'accès.

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

    Accédez à un site web autre que www.aliyun.com, par exemple www.taobao.com :

    wget www.taobao.com

    Sortie attendue :

    Connecting to www.taobao.com (64.13.XX.XX:80)
    wget: can't connect to remote host (64.13.XX.XX): Connection timed out

    Le message can't connect to remote host indique un échec de connexion.

  5. Exécutez la commande suivante pour accéder à www.aliyun.com.

    wget www.aliyun.com

    Sortie 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 ETA

    La 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

Remarque

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

  1. 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

      Remarque

      Vous ne pouvez pas ajouter plusieurs blocs CIDR dans une seule règle ipBlock.

      公网 去向

  2. Cliquez sur Next puis sur OK.

  3. Sur l'onglet Basic Information de la page des détails du cluster, obtenez l'adresse IP interne et le port du serveur API.

    image.png

  4. 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 443
    nc -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.Pod公网访问

Utiliser la CLI

  1. Exécutez la commande suivante pour créer un namespace de test.

    Créez un namespace nommé test-np.

    kubectl create ns test-np

    Sortie attendue :

    namespace/test-np created
  2. 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.yaml

    Voici 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/8

    Vérifiez que le fichier default-deny.yaml a été créé.

    kubectl apply -f default-deny.yaml

    Sortie attendue :

    networkpolicy.networking.k8s.io/deny-public-net created

    Affichez la politique réseau :

    kubectl get networkpolicy -n test-np

    Sortie attendue :

    NAME                              POD-SELECTOR          AGE
    deny-public-net                   <none>                1m
  3. 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.yaml

    Dans 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.yaml

    Sortie attendue :

    networkpolicy.networking.k8s.io/allow-public-network-for-labels created

    Affichez la politique réseau :

    kubectl get networkpolicy -n test-np

    Sortie attendue :

    NAME                              POD-SELECTOR          AGE
    allow-public-network-for-labels   public-network=true    1m
    deny-public-net                   <none>                 3m
  4. 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-intranet
    ping aliyun.com

    Sortie attendue :

    PING aliyun.com (106.11.2xx.xxx): 56 data bytes
    ^C
    --- aliyun.com ping statistics ---
    9 packets transmitted, 0 packets received, 100% packet loss

    Le message 0 packets received indique un échec de connexion.

    Remarque

    L'é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.

  5. 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-internet
    ping aliyun.com

    Sortie 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 ms

    Le message 0 % packet loss indique que l'accès au service a réussi.

    Remarque

    L'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.