Tutorial: Configurar tabelas de rotas do Azure usando o Ansible
Importante
O Ansible 2.8 (ou posterior) é necessário para executar os playbooks de exemplo neste artigo.
O Azure roteia automaticamente o tráfego entre sub-redes do Azure, redes virtuais e redes locais. Se precisar de mais controle sobre o roteamento do seu ambiente, você pode criar uma tabela de rotas.
Neste artigo, vai aprender a:
Criar uma tabela de rotas Criar uma rede virtual e uma sub-rede Associar uma tabela de rotas a uma sub-rede Desassociar uma tabela de rotas de uma sub-rede Criar e excluir rotas Consultar uma tabela de rotas Excluir uma tabela de rotas
Pré-requisitos
- Subscrição do Azure: se não tem uma subscrição do Azure, crie uma conta gratuita antes de começar.
Instale o Ansible: execute uma das seguintes opções:
- Instalar e configurar o Ansible em uma máquina virtual Linux
- Configure o Azure Cloud Shell e, se você não tiver acesso a uma máquina virtual Linux, crie uma máquina virtual com o Ansible.
Criar uma tabela de rotas
O código do playbook nesta seção cria uma tabela de rotas. Para obter informações sobre limites de tabela de rotas, consulte Limites do Azure.
Guarde o manual de procedimentos seguinte como 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 }}"
Execute o playbook usando o ansible-playbook
ansible-playbook route_table_create.yml
Associar uma tabela de rotas a uma sub-rede
O código do playbook nesta seção:
- Cria uma rede virtual
- Cria uma sub-rede dentro da rede virtual
- Associa uma tabela de rotas à sub-rede
As tabelas de rotas não estão associadas a redes virtuais. Em vez disso, as tabelas de rotas estão associadas à sub-rede de uma rede virtual.
A rede virtual e a tabela de rotas devem coexistir no mesmo local e assinatura do Azure.
Sub-redes e tabelas de rotas têm uma relação um-para-muitos. Uma sub-rede pode ser definida sem nenhuma tabela de rotas associada ou uma tabela de rotas. As tabelas de rotas podem ser associadas a nenhuma, uma ou muitas sub-redes.
O tráfego da sub-rede é roteado com base em:
- rotas definidas em tabelas de rotas
- rotas padrão
- Rotas propagadas a partir de uma rede local
A rede virtual deve estar conectada a um gateway de rede virtual do Azure. O gateway pode ser ExpressRoute ou VPN se estiver usando BGP com um gateway VPN.
Guarde o manual de procedimentos seguinte como 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 }}"
Execute o playbook usando o ansible-playbook
ansible-playbook route_table_associate.yml
Dissociar uma tabela de rotas de uma sub-rede
O código do playbook nesta seção dissocia uma tabela de rotas de uma sub-rede.
Ao dissociar uma tabela de rotas de uma sub-rede, defina o route_table
para a sub-rede como None
.
Guarde o manual de procedimentos seguinte como 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"
Execute o playbook usando o ansible-playbook
ansible-playbook route_table_dissociate.yml
Criar uma rota
O código do playbook nesta seção é uma rota dentro de uma tabela de rotas.
Guarde o manual de procedimentos seguinte como 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 }}"
Antes de executar o playbook, consulte as seguintes notas:
virtual_network_gateway
é definida comonext_hop_type
. Para obter mais informações sobre como o Azure seleciona rotas, consulte Visão geral de roteamento.address_prefix
é definida como10.1.0.0/16
. O prefixo não pode ser duplicado dentro da tabela de rotas.
Execute o playbook usando o ansible-playbook
ansible-playbook route_create.yml
Excluir uma rota
O código do playbook nesta seção exclui uma rota de uma tabela de rotas.
Guarde o manual de procedimentos seguinte como 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
Execute o playbook usando o ansible-playbook
ansible-playbook route_delete.yml
Obter informações da tabela de rotas
O código do playbook nesta seção usa o módulo azure_rm_routetable_facts
Ansible para recuperar informações da tabela de rotas.
Guarde o manual de procedimentos seguinte como 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]
Execute o playbook usando o ansible-playbook
ansible-playbook route_table_facts.yml
Excluir uma tabela de rotas
O código do playbook nesta seção é uma tabela de rotas.
Quando uma tabela de rotas é excluída, todas as suas rotas também são excluídas.
Uma tabela de rotas não pode ser excluída se estiver associada a uma sub-rede. Dissocie a tabela de rotas de quaisquer sub-redes antes de tentar excluir a tabela de rotas.
Guarde o manual de procedimentos seguinte como 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
Execute o playbook usando o ansible-playbook
ansible-playbook route_table_delete.yml