教學課程:使用 Ansible 設定 Azure 路由表
重要
本文中需要 Ansible 2.8 (或更新版本)才能執行範例劇本。
Azure 會自動路由傳送 Azure 子網路、虛擬網路及內部部署網路之間的流量。 如果您需要更充分掌控環境的路由,您可以建立 路由表 。
在本文中,您將學會如何:
建立路由表 建立虛擬網路和子網 建立路由表建立路由表與子網解除關聯子網 建立和刪除路由查詢路由表 刪除路由表
必要條件
- Azure 訂用帳戶:如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶。
安裝 Ansible :執行下列其中一個選項:
- 在 Linux 虛擬機器上安裝及 設定 Ansible
- 設定 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 route_table_create.yml
建立路由表與子網路的關聯
本節中的劇本程式碼:
- 建立虛擬網路
- 在虛擬網路內建立子網
- 將路由表與子網產生關聯
路由表未與虛擬網路相關聯。 相反地,路由表會與虛擬網路的子網相關聯。
虛擬網路和路由表必須共存于相同的 Azure 位置和訂用帳戶中。
子網和路由表具有一對多關聯性。 您可以使用沒有相關聯的路由表或一個路由表來定義子網。 路由表可以與無、一或多個子網相關聯。
來自子網的流量會根據下列專案路由傳送:
- 路由表內定義的路由
- 預設路由
- 從內部部署網路傳播的路由
虛擬網路必須連線到 Azure 虛擬網路閘道。 如果搭配 VPN 閘道使用 BGP,閘道可以是 ExpressRoute 或 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 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 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 如何選取路由的詳細資訊,請參閱 路由概觀 。address_prefix
定義為10.1.0.0/16
。 路由表內不能複製前置詞。
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 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 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 route_table_delete.yml