Tutorial: Konfigurieren von Azure-Routingtabellen mit AnsibleTutorial: Configure Azure route tables using Ansible

Wichtig

Für die Ausführung der Beispielplaybooks in diesem Artikel ist mindestens Ansible 2.8 erforderlich.Ansible 2.8 (or later) is required to run the sample playbooks in this article.

Azure führt für Datenverkehr automatisch das Routing zwischen Azure-Subnetzen, virtuellen Netzwerken und lokalen Netzwerken durch.Azure automatically routes traffic between Azure subnets, virtual networks, and on-premises networks. Falls Sie mehr Kontrolle über das Routing für Ihre Umgebung benötigen, können Sie eine Routingtabelle erstellen.If you need more control over your environment's routing, you can create a route table.

In diesem Tutorial wird Ansible für Folgendes verwendet:In this tutorial, Ansible is used to:

Erstellen einer Routingtabelle Erstellen eines virtuellen Netzwerks und Subnetzes Zuordnen einer Routingtabelle zu einem Subnetz Aufheben der Zuordnung einer Routingtabelle zu einem Subnetz Erstellen und Löschen von Routen Abfragen einer Routingtabelle Löschen einer RoutingtabelleCreate 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

VoraussetzungenPrerequisites

  • Azure-Abonnement: Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.Azure subscription: If you don't have an Azure subscription, create a free account before you begin.

Erstellen einer RoutingtabelleCreate a route table

Mit dem Playbookcode in diesem Abschnitt wird eine Routingtabelle erstellt.The playbook code in this section creates a route table. Weitere Informationen zu Einschränkungen für Routingtabellen finden Sie auf der Seite mit den Azure-Einschränkungen.For information on route-table limits, see Azure limits.

Speichern Sie das folgende Playbook als 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 }}"

Führen Sie das Playbook mit dem Befehl ansible-playbook aus:Run the playbook using the ansible-playbook command:

ansible-playbook route_table_create.yml

Zuordnen einer Routingtabelle zu einem SubnetzAssociate a route table to a subnet

Mit dem Playbookcode in diesem Abschnitt wird Folgendes durchgeführt:The playbook code in this section:

  • Erstellt ein virtuelles Netzwerk.Creates a virtual network
  • Erstellen eines Subnetzes innerhalb des virtuellen NetzwerksCreates a subnet within the virtual network
  • Zuordnen einer Routingtabelle zum SubnetzAssociates a route table to the subnet

Routingtabellen werden nicht virtuellen Netzwerken zugeordnet.Route tables aren't associated to virtual networks. Stattdessen werden Routingtabellen dem Subnetz eines virtuellen Netzwerks zugeordnet.Rather, route tables are associated with the subnet of a virtual network.

Das virtuelle Netzwerk und die Routingtabelle müssen sich an demselben Azure-Standort und unter demselben Abonnement befinden.The virtual network and route table must coexist in the same Azure location and subscription.

Subnetze und Routingtabellen verfügen über eine 1:n-Beziehung.Subnets and route tables have a one-to-many relationship. Ein Subnetz kann ohne zugeordnete Routingtabelle oder mit einer einzelnen Routingtabelle definiert werden.A subnet can be defined with no associated route table or one route table. Routingtabellen können keinem, einem oder vielen Subnetzen zugeordnet werden.Route tables can be associated with none, one, or many subnets.

Die Weiterleitung des Datenverkehrs aus dem Subnetz basiert auf:Traffic from the subnet is routed based on:

  • In Routingtabellen definierten Routenroutes defined within route tables
  • Standardroutendefault routes
  • Routen, die aus einem lokalen Netzwerk stammenroutes propagated from an on-premises network

Das virtuelle Netzwerk muss mit einem Gateway für virtuelle Azure-Netzwerke verbunden werden.The virtual network must be connected to an Azure virtual network gateway. Das Gateway kann vom Typ „ExpressRoute“ oder „VPN“ sein, wenn BGP mit einem VPN-Gateway verwendet wird.The gateway can be ExpressRoute, or VPN if using BGP with a VPN gateway.

Speichern Sie das folgende Playbook als 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 }"

Führen Sie das Playbook mit dem Befehl ansible-playbook aus:Run the playbook using the ansible-playbook command:

ansible-playbook route_table_associate.yml

Aufheben der Zuordnung einer Routingtabelle zu einem SubnetzDissociate a route table from a subnet

Mit dem Playbookcode in diesem Abschnitt wird die Zuordnung einer Routingtabelle zu einem Subnetz aufgehoben.The playbook code in this section dissociates a route table from a subnet.

Legen Sie beim Aufheben der Zuordnung einer Routingtabelle zu einem Subnetz das route_table-Element für das Subnetz auf None fest.When dissociating a route table from a subnet, set the route_table for the subnet to None.

Speichern Sie das folgende Playbook als 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"

Führen Sie das Playbook mit dem Befehl ansible-playbook aus:Run the playbook using the ansible-playbook command:

ansible-playbook route_table_dissociate.yml

Erstellen einer RouteCreate a route

Mit dem Playbookcode in diesem Abschnitt wird in einer Routingtabelle eine Route erstellt.The playbook code in this section a route within a route table.

Speichern Sie das folgende Playbook als 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 }}"

Beachten Sie vor dem Ausführen des Playbooks die folgenden Hinweise:Before running the playbook, see the following notes:

  • virtual_network_gateway ist als next_hop_type definiert.virtual_network_gateway is defined as next_hop_type. Weitere Informationen dazu, wie in Azure Routen ausgewählt werden, finden Sie in der Routingübersicht.For more information about how Azure selects routes, see Routing overview.
  • address_prefix ist als 10.1.0.0/16 definiert.address_prefix is defined as 10.1.0.0/16. Das Präfix kann in der Routingtabelle nicht dupliziert werden.The prefix can't be duplicated within the route table.

Führen Sie das Playbook mit dem Befehl ansible-playbook aus:Run the playbook using the ansible-playbook command:

ansible-playbook route_create.yml

Löschen einer RouteDelete a route

Mit dem Playbookcode in diesem Abschnitt wird eine Route aus einer Routingtabelle gelöscht.The playbook code in this section deletes a route from a route table.

Speichern Sie das folgende Playbook als 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

Führen Sie das Playbook mit dem Befehl ansible-playbook aus:Run the playbook using the ansible-playbook command:

ansible-playbook route_delete.yml

Abrufen von Informationen zur RoutingtabelleGet route table information

Für den Playbookcode in diesem Abschnitt wird das Ansible-Modul azure_rm_routetable_facts verwendet, um Informationen zur Routingtabelle abzurufen.The playbook code in this section uses the Ansible module azure_rm_routetable_facts to retrieve route table information.

Speichern Sie das folgende Playbook als 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]

Führen Sie das Playbook mit dem Befehl ansible-playbook aus:Run the playbook using the ansible-playbook command:

ansible-playbook route_table_facts.yml

Löschen einer RoutingtabelleDelete a route table

Mit dem Playbookcode in diesem Abschnitt wird eine Routingtabelle gelöscht.The playbook code in this section a route table.

Wenn eine Routingtabelle gelöscht wird, werden auch alle darin enthaltenen Routen gelöscht.When a route table is deleted, all of its routes are also deleted.

Das Löschen einer Routingtabelle ist nicht möglich, wenn sie einem Subnetz zugeordnet ist.A route table can't be deleted if it's associated with a subnet. Heben Sie die Zuordnung der Routingtabelle zu Subnetzen auf, bevor Sie versuchen, die Routingtabelle zu löschen.Dissociate the route table from any subnets before attempting to delete the route table.

Speichern Sie das folgende Playbook als 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

Führen Sie das Playbook mithilfe des Befehls ansible-playbook aus:Run the playbook using the ansible-playbook command:

ansible-playbook route_table_delete.yml

Nächste SchritteNext steps