Compartilhar via


Tutorial: Configurar tabelas de rotas do Azure usando o Ansible

Importante

O Ansible 2.8 (ou posterior) é necessário para executar os guias estratégicos de exemplo deste artigo.

O Azure roteia o tráfego automaticamente entre redes virtuais, redes locais e sub-redes do Azure. Se você precisar de mais controle sobre o roteamento do ambiente, crie uma tabela de rotas.

Neste artigo, você aprenderá como:

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

  • Assinatura do Azure: caso você não tenha uma assinatura do Azure, crie uma conta gratuita antes de começar.

Criar uma tabela de rotas

O código do guia estratégico nesta seção cria uma tabela de rotas. Para obter informações sobre os limites da tabela de rotas, confira limites do Azure.

Salve o guia estratégico a seguir 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 }}"

Executar o guia estratégico usando ansible-playbook

ansible-playbook route_table_create.yml

Associar uma tabela de rotas a uma sub-rede

O código do guia estratégico nesta seção:

  • Cria uma rede virtual
  • Cria uma sub-rede dentro da rede virtual
  • Associa uma tabela de rotas a uma sub-rede

As tabelas de rotas não estão associadas às redes virtuais. Em vez disso, as tabelas de rotas são associadas a sub-rede de uma rede virtual.

A rede virtual e a tabela de rotas devem coexistir na mesma assinatura e localização do Azure.

As sub-redes e as tabelas de rotas têm uma relação um-para-muitos. Uma sub-rede pode ser definida sem tabelas de rotas associadas ou com apenas uma tabela de rotas. As tabelas de rotas podem ser associadas a nenhuma, apenas uma ou várias sub-redes.

O tráfego da sub-rede é roteado com base em:

  • rotas definidas nas tabelas de rotas
  • rotas padrão
  • rotas propagadas de uma rede local

A rede virtual deve estar conectada ao gateway de rede virtual do Azure. O gateway pode ser o ExpressRoute, ou VPN se usar o BGP com um gateway de VPN.

Salve o guia estratégico a seguir 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 }}"

Executar o guia estratégico usando ansible-playbook

ansible-playbook route_table_associate.yml

Desassociar uma tabela de rotas de uma sub-rede

O código do guia estratégico nesta seção dissocia uma tabela de rotas de uma sub-rede.

Ao dissociar uma tabela de rotas de uma sub-rede, defina a route_table da sub-rede como None.

Salve o guia estratégico a seguir 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"

Executar o guia estratégico usando ansible-playbook

ansible-playbook route_table_dissociate.yml

Criar uma rota

O código do guia estratégico nesta seção cria uma rota dentro de uma tabela de rotas.

Salve o guia estratégico a seguir 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 guia estratégico, confira as observações a seguir:

  • virtual_network_gateway é definido como next_hop_type. Para saber mais sobre como o Azure escolhe as rotas, confira Visão geral de roteamento.
  • address_prefix é definido como 10.1.0.0/16. O prefixo não pode ser duplicado dentro da tabela de rotas.

Executar o guia estratégico usando ansible-playbook

ansible-playbook route_create.yml

Excluir uma rota

O código do guia estratégico nesta seção exclui uma rota de uma tabela de rotas.

Salve o guia estratégico a seguir 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

Executar o guia estratégico usando ansible-playbook

ansible-playbook route_delete.yml

Obter informações de uma tabela de rotas

O código do guia estratégico nesta seção usa o módulo do Ansible azure_rm_routetable_facts para recuperar informações da tabela de rotas.

Salve o guia estratégico a seguir 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]

Executar o guia estratégico usando ansible-playbook

ansible-playbook route_table_facts.yml

Excluir uma tabela de rotas

O código do guia estratégico nesta seção exclui 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 poderá ser excluída se estiver associada a uma sub-rede. Desassocie a tabela de rotas de todas as sub-redes antes de tentar excluí-la.

Salve o guia estratégico a seguir 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

Executar o guia estratégico usando ansible-playbook

ansible-playbook route_table_delete.yml

Próximas etapas