Руководство по настройке таблиц маршрутов Azure с помощью Ansible
Важно!
Для выполнения примеров сборников схем из этой статьи требуется Ansible 2.8 (или последующей версии).
Azure автоматически направляет трафик между подсетями Azure, виртуальными и локальными сетями. При необходимости большего контроля над маршрутизацией среды можно создать таблицу маршрутов.
Вы узнаете, как выполнять следующие задачи:
Создание таблицы маршрутов. Создание виртуальной сети и подсети. Связывание таблицы маршрутов с подсетью. Отмена связывания таблицы маршрутов с подсетью. Создание и удаление маршрутов. Запрос таблицы маршрутов. Удаление таблицы маршрутов.
Необходимые компоненты
- Подписка Azure. Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем начинать работу.
Установите Ansible: выполните одно из указанных ниже действий.
- Установите и настройте Ansible на виртуальной машине Linux.
- Настройте Azure Cloud Shell и, если у вас нет доступа к виртуальной машине Linux, вы можете создать ее с помощью Ansible.
Создание таблицы маршрутов
Код сборника схем в этом разделе создает таблицу маршрутов. Дополнительные сведения об ограничениях таблицы маршрутов см. в разделе Ограничения 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