Tutoriel : Configurer des tables de routage Azure à l’aide d’Ansible

Important

Ansible 2.8 (ou version ultérieure) est nécessaire pour exécuter les exemples de playbooks dans cet article.

Azure achemine automatiquement le trafic entre les sous-réseaux, les réseaux virtuels et les réseaux locaux Azure. Si vous avez besoin d’une maîtrise plus stricte du routage de votre environnement, vous pouvez créer une table de routage.

Dans cet article, vous apprendrez comment :

Créer une table de routage Créer un réseau virtuel et un sous-réseau Associer une table de routage à un sous-réseau Dissocier une table de routage d’un sous-réseau Créer et supprimer des itinéraires Interroger une table de routage Supprimer une table de routage

Prérequis

  • Abonnement Azure : Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.

Créer une table de routage

Le code du playbook de cette section crée une table de routage. Pour plus d’informations sur les limites des tables de routage, voir Limites Azure.

Enregistrez le playbook suivant en tant que route_table_create.yml :

- hosts: localhost
  vars:
    route_table_name: myRouteTable
    resource_group: myResourceGroup
  tasks:
    - name: Create a route table
      azure_rm_routetable:
        name: "{{ route_table_name }}"
        resource_group: "{{ resource_group }}"

Exécutez le playbook en utilisant ansible-playbook

ansible-playbook route_table_create.yml

Associer une table de routage à un sous-réseau

Le code du playbook de cette section :

  • Crée un réseau virtuel
  • Crée un sous-réseau au sein du réseau virtuel
  • Associe une table de routage au sous-réseau

Les tables de routage ne sont pas associées à des réseaux virtuels, mais au sous-réseau d’un réseau virtuel.

Le réseau virtuel et la table de routage doivent se trouver dans le même abonnement et au même emplacement Azure.

Les sous-réseaux et les tables de routage entretiennent une relation un-à-plusieurs. Il est possible de définir un sous-réseau en y associant zéro ou une seule table de routage. Les tables de routage peuvent être associés à zéro, un ou plusieurs sous-réseaux.

Le trafic provenant du sous-réseau est acheminé selon :

  • les itinéraires définis dans les tables de routage ;
  • les itinéraires par défaut ;
  • les itinéraires propagés à partir d’un réseau local.

Le réseau virtuel doit être connecté à une passerelle de réseau virtuel Azure, qui peut être ExpressRoute ou un VPN si vous utilisez BGP avec une passerelle VPN.

Enregistrez le playbook suivant en tant que route_table_associate.yml :

- hosts: localhost
  vars:
    subnet_name: mySubnet
    virtual_network_name: myVirtualNetwork 
    route_table_name: myRouteTable
    resource_group: myResourceGroup
  tasks:
    - name: Create virtual network
      azure_rm_virtualnetwork:
        name: "{{ virtual_network_name }}"
        resource_group: "{{ resource_group }}"
        address_prefixes_cidr:
        - 10.1.0.0/16
        - 172.100.0.0/16
        dns_servers:
        - 127.0.0.1
        - 127.0.0.3
    - name: Create a subnet with route table
      azure_rm_subnet:
        name: "{{ subnet_name }}"
        virtual_network_name: "{{ virtual_network_name }}"
        resource_group: "{{ resource_group }}"
        address_prefix_cidr: "10.1.0.0/24"
        route_table: "{{ route_table_name }}"

Exécutez le playbook en utilisant ansible-playbook

ansible-playbook route_table_associate.yml

Dissocier une table de routage d’un sous-réseau

Le code du playbook de cette section dissocie une table de routage d’un sous-réseau.

Pour dissocier une table de routage d’un sous-réseau, définissez route_table sur None.

Enregistrez le playbook suivant en tant que route_table_dissociate.yml :

- hosts: localhost
  vars:
    subnet_name: mySubnet
    virtual_network_name: myVirtualNetwork 
    resource_group: myResourceGroup
  tasks:
    - name: Dissociate a route table
      azure_rm_subnet:
        name: "{{ subnet_name }}"
        virtual_network_name: "{{ virtual_network_name }}"
        resource_group: "{{ resource_group }}"
        address_prefix_cidr: "10.1.0.0/24"

Exécutez le playbook en utilisant ansible-playbook

ansible-playbook route_table_dissociate.yml

Créer un itinéraire

Le code du playbook de cette section crée un itinéraire dans une table de routage.

Enregistrez le playbook suivant en tant que route_create.yml :

- hosts: localhost
  vars:
    route_name: myRoute
    route_table_name: myRouteTable
    resource_group: myResourceGroup
  tasks:
    - name: Create route
      azure_rm_route:
        name: "{{ route_name }}"
        resource_group: "{{ resource_group }}"
        next_hop_type: virtual_network_gateway
        address_prefix: "10.1.0.0/16"
        route_table_name: "{{ route_table_name }}"

Avant d’exécuter le playbook, consultez les notes suivantes :

  • virtual_network_gateway est défini comme next_hop_type. Pour plus d’informations sur la façon dont Azure sélectionne les itinéraires, voir Vue d’ensemble du routage.
  • address_prefix est défini comme 10.1.0.0/16. Le préfixe ne peut pas être dupliqué dans la table de routage.

Exécutez le playbook en utilisant ansible-playbook

ansible-playbook route_create.yml

Supprimer un itinéraire

Le code du playbook de cette section supprime un itinéraire d’une table de routage.

Enregistrez le playbook suivant en tant que route_delete.yml :

- hosts: localhost
  vars:
    route_name: myRoute
    route_table_name: myRouteTable
    resource_group: myResourceGroup
  tasks:
    - name: Remove route
      azure_rm_route:
        name: "{{ route_name }}"
        resource_group: "{{ resource_group }}"
        route_table_name: "{{ route_table_name }}"
        state: absent

Exécutez le playbook en utilisant ansible-playbook

ansible-playbook route_delete.yml

Récupérer les informations de la table de routage

Le code du playbook de cette section utilise le module Ansible azure_rm_routetable_facts pour récupérer les informations de la table de routage.

Enregistrez le playbook suivant en tant que route_table_facts.yml :

- hosts: localhost
  vars:
    route_table_name: myRouteTable
    resource_group: myResourceGroup
  tasks: 
    - name: Get route table information
      azure_rm_routetable_facts:
         resource_group: "{{ resource_group }}"
         name: "{{ route_table_name }}"
      register: query
    
    - debug:
         var: query.route_tables[0]

Exécutez le playbook en utilisant ansible-playbook

ansible-playbook route_table_facts.yml

Supprimer une table de routage

Le code du playbook de cette section supprime une table de routage.

Lorsqu’une table de routage est supprimée, tous ses itinéraires le sont également.

Il n’est pas possible de supprimer une table de routage associée à un sous-réseau. Dissociez la table de routage de tous les sous-réseaux avant de tenter de la supprimer.

Enregistrez le playbook suivant en tant que route_table_delete.yml :

- hosts: localhost
  vars:
    route_table_name: myRouteTable
    resource_group: myResourceGroup
  tasks:
    - name: Create a route table
      azure_rm_routetable:
        name: "{{ route_table_name }}"
        resource_group: "{{ resource_group }}"
        state: absent

Exécutez le playbook en utilisant ansible-playbook

ansible-playbook route_table_delete.yml

Étapes suivantes