Tutorial: Configuración de tablas de rutas de Azure con AnsibleTutorial: Configure Azure route tables using Ansible

Importante

Para ejecutar los cuadernos de estrategias de ejemplo de este tutorial, se requiere Ansible 2.8 (o cualquier versión posterior).Ansible 2.8 (or later) is required to run the sample playbooks in this article.

Azure enruta automáticamente el tráfico entre redes locales, las redes virtuales y las subredes de Azure.Azure automatically routes traffic between Azure subnets, virtual networks, and on-premises networks. Si necesita más control sobre el enrutamiento de su entorno, puede crear una tabla de rutas.If you need more control over your environment's routing, you can create a route table.

En este tutorial, se usa Ansible para:In this tutorial, Ansible is used to:

Creación de una tabla de rutas Creación de una red virtual y una subred Asociación de una tabla de rutas con una subred Desasociación de una tabla de rutas de una subred Creación y eliminación de rutas Consulta de una tabla de rutas Eliminación de una tabla de rutasCreate a route table Create a virtual network and subnet Associate a route table with a subnet Disassociate a route table from a subnet Create and delete routes Query a route table Delete a route table

PrerequisitesPrerequisites

  • Suscripción de Azure: Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.Azure subscription: If you don't have an Azure subscription, create a free account before you begin.

Creación de una tabla de rutasCreate a route table

El código del cuaderno de estrategias de esta sección crea una tabla de rutas.The playbook code in this section creates a route table. Para más información sobre los límites de la tabla de rutas, consulte límites de Azure.For information on route-table limits, see Azure limits.

Guarde el siguiente cuaderno de estrategias como route_table_create.yml:Save the following playbook as 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 }}"

Use el comando ansible-playbook para ejecutar el cuaderno de estrategias:Run the playbook using the ansible-playbook command:

ansible-playbook route_table_create.yml

Asociación de una tabla de rutas a una subredAssociate a route table to a subnet

El código del cuaderno de estrategias de esta sección:The playbook code in this section:

  • Crea una red virtualCreates a virtual network
  • Crea una subred dentro de la red virtualCreates a subnet within the virtual network
  • Asocia una tabla de rutas a la subredAssociates a route table to the subnet

Las tablas de rutas no se asocian a las redes virtuales.Route tables aren't associated to virtual networks. En su lugar, las tablas de rutas se asocian a la subred de una red virtual.Rather, route tables are associated with the subnet of a virtual network.

La red virtual y la tabla de rutas deben coexistir en la misma suscripción y ubicación de Azure.The virtual network and route table must coexist in the same Azure location and subscription.

Las subredes y las tablas de rutas tienen una relación de uno a varios.Subnets and route tables have a one-to-many relationship. Se puede definir una subred sin ninguna tabla de rutas asociada o con una tabla de rutas.A subnet can be defined with no associated route table or one route table. Las tablas de rutas se pueden asociar con una subred, con muchas o con ninguna.Route tables can be associated with none, one, or many subnets.

El tráfico de la subred se enruta según:Traffic from the subnet is routed based on:

  • las rutas definidas dentro de las tablas de rutasroutes defined within route tables
  • las rutas predeterminadasdefault routes
  • las rutas propagadas desde una red localroutes propagated from an on-premises network

La red virtual debe estar conectada a una puerta de enlace de red virtual de Azure.The virtual network must be connected to an Azure virtual network gateway. La puerta de enlace puede ser ExpressRoute, o VPN si se usa BGP con una puerta de enlace de VPN.The gateway can be ExpressRoute, or VPN if using BGP with a VPN gateway.

Guarde el siguiente cuaderno de estrategias como route_table_associate.yml:Save the following playbook as 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 }"

Use el comando ansible-playbook para ejecutar el cuaderno de estrategias:Run the playbook using the ansible-playbook command:

ansible-playbook route_table_associate.yml

Desasociación de una tabla de rutas de una subredDissociate a route table from a subnet

El código del cuaderno de estrategias de esta sección permite desasociar una tabla de rutas de una subred.The playbook code in this section dissociates a route table from a subnet.

Al desasociar una tabla de rutas de una subred, establezca la route_table de la subred en None.When dissociating a route table from a subnet, set the route_table for the subnet to None.

Guarde el siguiente cuaderno de estrategias como route_table_dissociate.yml:Save the following playbook as 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"

Use el comando ansible-playbook para ejecutar el cuaderno de estrategias:Run the playbook using the ansible-playbook command:

ansible-playbook route_table_dissociate.yml

Creación de una rutaCreate a route

El código del cuaderno de estrategias de esta sección crea una ruta en la tabla de rutas.The playbook code in this section a route within a route table.

Guarde el siguiente cuaderno de estrategias como route_create.yml:Save the following playbook as 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 ejecutar el cuaderno de estrategias, consulte las notas siguientes:Before running the playbook, see the following notes:

  • virtual_network_gateway se define como next_hop_type.virtual_network_gateway is defined as next_hop_type. Para más información sobre cómo Azure selecciona las rutas, consulte Introducción al enrutamiento.For more information about how Azure selects routes, see Routing overview.
  • address_prefix se define como 10.1.0.0/16.address_prefix is defined as 10.1.0.0/16. No se puede duplicar el prefijo dentro de la tabla de rutas.The prefix can't be duplicated within the route table.

Use el comando ansible-playbook para ejecutar el cuaderno de estrategias:Run the playbook using the ansible-playbook command:

ansible-playbook route_create.yml

Eliminación de una rutaDelete a route

El código del cuaderno de estrategias de esta sección permite eliminar una ruta de una tabla de rutas.The playbook code in this section deletes a route from a route table.

Guarde el siguiente cuaderno de estrategias como route_delete.yml:Save the following playbook as 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

Use el comando ansible-playbook para ejecutar el cuaderno de estrategias:Run the playbook using the ansible-playbook command:

ansible-playbook route_delete.yml

Obtención de información de la tabla de rutasGet route table information

El código del cuaderno de estrategias de esta sección usa el módulo de Ansible azure_rm_routetable_facts para recuperar la información de la tabla de rutas.The playbook code in this section uses the Ansible module azure_rm_routetable_facts to retrieve route table information.

Guarde el siguiente cuaderno de estrategias como route_table_facts.yml:Save the following playbook as 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]

Use el comando ansible-playbook para ejecutar el cuaderno de estrategias:Run the playbook using the ansible-playbook command:

ansible-playbook route_table_facts.yml

Eliminación de una tabla de rutasDelete a route table

El código del cuaderno de estrategias de esta sección elimina una tabla de rutas.The playbook code in this section a route table.

Cuando se elimina una tabla de rutas, se eliminan también todas sus rutas.When a route table is deleted, all of its routes are also deleted.

Una tabla de rutas no se puede eliminar si está asociada con una subred.A route table can't be deleted if it's associated with a subnet. Desasocie la tabla de rutas de todas las subredes antes de intentar eliminarla.Dissociate the route table from any subnets before attempting to delete the route table.

Guarde el siguiente cuaderno de estrategias como route_table_delete.yml:Save the following playbook as 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

Use el comando ansible-playbook para ejecutar el cuaderno de estrategias:Run the playbook using the ansible-playbook command:

ansible-playbook route_table_delete.yml

Pasos siguientesNext steps