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.
Installare Ansible: eseguire una delle opzioni seguenti:
- Installare e configurare Ansible in una macchina virtuale Linux
- Configurare Azure Cloud Shell e, se non si ha accesso a una macchina virtuale Linux, creare una macchina virtuale con Ansible.
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 comenext_hop_type
. Per altre informazioni su come vengono selezionate le route in Azure, vedere Panoramica del routing.address_prefix
viene definito come10.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