Esercitazione: Configurare le tabelle di route di Azure con Ansible

Importante

Per eseguire i playbook di esempio contenuti in questo articolo, è necessario Ansible 2.8 (o versione successiva).

Azure effettua il routing automatico del traffico tra subnet di Azure, reti virtuali e reti locali. Se è necessario un maggiore controllo sul routing dell'ambiente in uso, è possibile creare un tabella di route.

In questo articolo vengono illustrate le operazioni seguenti:

Crea una tabella di route Create una rete virtuale e una subnet Associare una tabella di route a una subnet Annullare l'associazione di una tabella di route da una subnet Creare ed eliminare route Eseguire query in una tabella di route Eliminare una tabella di route

Prerequisiti

  • Sottoscrizione di Azure: se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.

Creare una tabella di route

Il codice del playbook in questa sezione crea una tabella di route. Per informazioni sui limiti delle tabelle di route, vedere i limiti di Azure.

Salvare il playbook seguente come 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 }}"

Eseguire il playbook con ansible-playbook

ansible-playbook route_table_create.yml

Associare una tabella di routing a una subnet

Il codice del playbook in questa sezione:

  • Crea una rete virtuale
  • Crea una subnet all'interno della rete virtuale
  • Associa una tabella di route alla subnet

Le tabelle di route non vengono associate alle reti virtuali, bensì alla subnet di una rete virtuale.

La rete virtuale e la tabella di route devono coesistere nella stessa località e sottoscrizione di Azure.

Le subnet e le tabelle di route hanno una relazione uno-a-molti. Una subnet può essere definita senza alcuna tabella di route associata o con una sola tabella di route associata. Le tabelle di route possono essere associate a nessuna, a una o a più subnet.

Il traffico dalla subnet viene instradato in base a:

  • route definite all'interno delle tabelle di route
  • route predefinite
  • route propagate da una rete locale

La rete virtuale deve essere connessa a un gateway di rete virtuale di Azure. Il gateway può essere ExpressRoute o VPN se si usa BGP con un gateway VPN.

Salvare il playbook seguente come 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 }}"

Eseguire il playbook con ansible-playbook

ansible-playbook route_table_associate.yml

Annullare l'associazione di una tabella di route da una subnet

Il codice del playbook in questa sezione annulla l'associazione di una tabella di route da una subnet.

Quando si annulla l'associazione di una tabella di route da una subnet, impostare route_table per la subnet su None.

Salvare il playbook seguente come 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"

Eseguire il playbook con ansible-playbook

ansible-playbook route_table_dissociate.yml

Creare una route

Il codice del playbook in questa sezione crea una route all'interno di una tabella di route.

Salvare il playbook seguente come 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 }}"

Prima di eseguire il playbook, vedere le note seguenti:

  • virtual_network_gateway viene definito come next_hop_type. Per altre informazioni su come vengono selezionate le route in Azure, vedere Panoramica del routing.
  • address_prefix viene definito come 10.1.0.0/16. Il prefisso non può essere duplicato all'interno della tabella di route.

Eseguire il playbook con ansible-playbook

ansible-playbook route_create.yml

Eliminare una route

Il codice del playbook in questa sezione consente di eliminare una route da una tabella di route.

Salvare il playbook seguente come 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

Eseguire il playbook con ansible-playbook

ansible-playbook route_delete.yml

Ottenere informazioni sulla tabella di route

Il codice del playbook in questa sezione usa il modulo Ansible azure_rm_routetable_facts per recuperare informazioni sulla tabella di route.

Salvare il playbook seguente come 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]

Eseguire il playbook con ansible-playbook

ansible-playbook route_table_facts.yml

Eliminare una tabella route

Il codice del playbook in questa sezione elimina una tabella di route.

Quando viene eliminata una tabella di route, vengono eliminate anche tutte le route corrispondenti.

Una tabella di route non può essere eliminata se è associata a una subnet. Annullare l'associazione della tabella di route da tutte le subnet prima di tentare di eliminarla.

Salvare il playbook seguente come 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

Eseguire il playbook con ansible-playbook

ansible-playbook route_table_delete.yml

Passaggi successivi