Поделиться через


Руководство по настройке таблиц маршрутов Azure с помощью Ansible

Важно!

Для выполнения примеров сборников схем из этой статьи требуется Ansible 2.8 (или последующей версии).

Azure автоматически направляет трафик между подсетями Azure, виртуальными и локальными сетями. При необходимости большего контроля над маршрутизацией среды можно создать таблицу маршрутов.

Вы узнаете, как выполнять следующие задачи:

Создание таблицы маршрутов. Создание виртуальной сети и подсети. Связывание таблицы маршрутов с подсетью. Отмена связывания таблицы маршрутов с подсетью. Создание и удаление маршрутов. Запрос таблицы маршрутов. Удаление таблицы маршрутов.

Необходимые компоненты

Создание таблицы маршрутов

Код сборника схем в этом разделе создает таблицу маршрутов. Дополнительные сведения об ограничениях таблицы маршрутов см. в разделе Ограничения Azure.

Сохраните следующий сборник схем как 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 }}"

Запустите сборник схем с помощью команды ansible-playbook.

ansible-playbook route_table_create.yml

Связывание таблицы маршрутов с подсетью

В этом разделе код сборника схем:

  • Создает виртуальную сеть.
  • Создает подсеть в виртуальной сети.
  • Связывает таблицы маршрутов с подсетью.

Таблицы маршрутов не связаны с виртуальными сетями. Таблицы маршрутов, скорее, связаны с подсетью виртуальной сети.

Виртуальная сеть и таблица маршрутов должны сосуществовать в одном расположении и подписке Azure.

Подсети и таблицы маршрутов имеют связь "один-ко-многим". Подсеть может быть определена без связанной таблицы маршрутов или только с одной таблицей маршрутов. Таблицы маршрутов могут быть связаны с одной, несколькими подсетями или ни с одной из них.

Трафик из подсети маршрутизируется на основе:

  • маршрутов, определенных в таблицах маршрутов
  • маршрутов по умолчанию
  • маршрутов, которые распространяются из локальной сети.

Виртуальная сеть должна быть подключена к шлюзу виртуальной сети Azure. Шлюз может быть ExpressRoute или VPN, если используется BGP с VPN-шлюзом.

Сохраните следующий сборник схем как 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 }}"

Запустите сборник схем с помощью команды ansible-playbook.

ansible-playbook route_table_associate.yml

Отмена связи таблицы маршрутов с подсетью

Код сборника схем в этом разделе отменяет связь таблицы маршрутов с подсетью.

При отмене связи таблицы маршрутов с подсетью установите route_table для подсети на None.

Сохраните следующий сборник схем как 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"

Запустите сборник схем с помощью команды ansible-playbook.

ansible-playbook route_table_dissociate.yml

Создание маршрута

Код сборника схем в этом разделе — маршрут в таблице маршрутов.

Сохраните следующий сборник схем как 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 }}"

Перед выполнением сборника схем ознакомьтесь со следующими указаниями.

  • virtual_network_gateway определяется как next_hop_type. Дополнительные сведения о том, как Azure выбирает маршруты, см. в разделе Как Azure выбирает маршрут.
  • address_prefix определяется как 10.1.0.0/16. Префикс не может быть продублирован в таблице маршрутов.

Запустите сборник схем с помощью команды ansible-playbook.

ansible-playbook route_create.yml

Удаление маршрута

Код сборника схем в этом разделе удаляет маршрут из таблицы маршрутов.

Сохраните следующий сборник схем как 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

Запустите сборник схем с помощью команды ansible-playbook.

ansible-playbook route_delete.yml

Получение информации о таблице маршрутов

Код сборника схем в этом разделе использует модуль Ansible azure_rm_routetable_facts для извлечения информации о таблице маршрутов.

Сохраните следующий сборник схем как 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]

Запустите сборник схем с помощью команды ansible-playbook.

ansible-playbook route_table_facts.yml

Удаление таблицы маршрутов

Код сборника схем в этом разделе таблицы маршрутов.

После удаления таблицы маршрутов все ее маршруты также удаляются.

Таблица маршрутов не может быть удалена, если она связана с подсетью. Перед удалением таблицы маршрутов отмените связь таблицы маршрутов с любой подсетью.

Сохраните следующий сборник схем как 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

Запустите сборник схем с помощью команды ansible-playbook.

ansible-playbook route_table_delete.yml

Следующие шаги