共用方式為


教學課程:使用 Ansible 設定 Azure 路由表

重要

本文中需要 Ansible 2.8 (或更新版本)才能執行範例劇本。

Azure 會自動路由傳送 Azure 子網路、虛擬網路及內部部署網路之間的流量。 如果您需要更充分掌控環境的路由,您可以建立 路由表

在本文中,您將學會如何:

建立路由表 建立虛擬網路和子網 建立路由表建立路由表與子網解除關聯子網 建立和刪除路由查詢路由表 刪除路由表

必要條件

  • 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 虛擬網路閘道。 如果搭配 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 執行劇本

ansible-playbook route_table_associate.yml

解除路由表與子網的關聯

本節中的劇本程式碼會解除路由表與子網的關聯。

將路由表與子網解除關聯時,請將子網的 設定 route_tableNone

將下列劇本儲存為 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 如何選取路由的詳細資訊,請參閱 路由概觀
  • 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

下一步