教學課程:使用 Ansible 設定 Azure 虛擬網路對等互連

重要

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

虛擬網路 (VNet) 對等互連 可讓您順暢地連線兩個 Azure 虛擬網路。 對等互連之後,這兩個虛擬網路會以一個虛擬網路的形式出現,以供連線之用。

流量會透過私人IP位址在相同虛擬網路中的VM之間路由傳送。 同樣地,對等互連虛擬網路中 VM 之間的流量會透過 Microsoft 骨幹基礎結構路由傳送。 因此,不同虛擬網路中的 VM 可以彼此通訊。

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

  • 建立兩個虛擬網路
  • 將兩個虛擬網路對等互連
  • 刪除兩個網路之間的對等互連

必要條件

  • Azure 訂用帳戶:如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶

建立兩個資源群組

資源群組是用來部署和管理 Azure 資源的邏輯容器。

本節中的範例劇本程式代碼可用來:

  • 建立兩個資源群組
  - name: Create a resource group
    azure_rm_resourcegroup:
      name: "{{ resource_group }}"
      location: "{{ location }}"
  - name: Create secondary resource group
    azure_rm_resourcegroup:
      name: "{{ resource_group_secondary }}"
      location: "{{ location }}"

建立第一個虛擬網路

本節中的範例劇本程式代碼可用來:

  • 建立虛擬網路
  • 在虛擬網路內建立子網
  - name: Create first virtual network
    azure_rm_virtualnetwork:
      resource_group: "{{ resource_group }}"
      name: "{{ vnet_name1 }}"
      address_prefixes: "10.0.0.0/16"
  - name: Add subnet
    azure_rm_subnet:
      resource_group: "{{ resource_group }}"
      name: "{{ vnet_name1 }}"
      address_prefix: "10.0.0.0/24"
      virtual_network: "{{ vnet_name1 }}"

建立第二個虛擬網路

本節中的範例劇本程式代碼可用來:

  • 建立虛擬網路
  • 在虛擬網路內建立子網
  - name: Create second virtual network
    azure_rm_virtualnetwork:
      resource_group: "{{ resource_group_secondary }}"
      name: "{{ vnet_name2 }}"
      address_prefixes: "10.1.0.0/16"
  - name: Add subnet
    azure_rm_subnet:
      resource_group: "{{ resource_group }}"
      name: "{{ vnet_name2 }}"
      address_prefix: "10.1.0.0/24"
      virtual_network: "{{ vnet_name2 }}"

將兩個虛擬網路對等互連

本節中的範例劇本程式代碼可用來:

  • 初始化虛擬網路對等互連
  • 將先前建立的兩個虛擬網路對等互連
  - name: Initial vnet peering
    azure_rm_virtualnetworkpeering:
      resource_group: "{{ resource_group }}"
      name: "{{ peering_name }}"
      virtual_network: "{{ vnet_name1 }}"
      remote_virtual_network:
        resource_group: "{{ resource_group_secondary }}"
        name: "{{ vnet_name2 }}"
      allow_virtual_network_access: true
      allow_forwarded_traffic: true

  - name: Connect vnet peering
    azure_rm_virtualnetworkpeering:
      resource_group: "{{ resource_group_secondary }}"
      name: "{{ peering_name }}"
      virtual_network: "{{ vnet_name2 }}"
      remote_virtual_network:
        resource_group: "{{ resource_group }}"
        name: "{{ vnet_name1 }}"
      allow_virtual_network_access: true
      allow_forwarded_traffic: true

刪除虛擬網路對等互連

本節中的範例劇本程式代碼可用來:

  • 刪除兩個先前建立的虛擬網路之間的對等互連
  - name: Delete vnet peering
    azure_rm_virtualnetworkpeering:
      resource_group: "{{ resource_group }}"
      name: "{{ peering_name }}"
      virtual_network: "{{ vnet_name1 }}"
      state: absent

取得範例劇本

有兩種方式可取得完整的範例劇本:

  • 下載劇本 ,並將它儲存至 vnet_peering.yml
  • 建立名為 vnet_peering.yml 的新檔案,並將下列內容複製到其中:
- hosts: localhost
  tasks:
    - name: Prepare random postfix
      set_fact:
        rpfx: "{{ 1000 | random }}"
      run_once: yes

- name: Connect virtual networks with virtual network peering
  hosts: localhost
  connection: local
  vars:
    resource_group: "{{ resource_group_name }}"
    resource_group_secondary: "{{ resource_group_name }}2"
    vnet_name1: "myVnet{{ rpfx }}"
    vnet_name2: "myVnet{{ rpfx }}2"
    peering_name: peer1
    location: eastus2
  tasks:
  - name: Create a resource group
    azure_rm_resourcegroup:
      name: "{{ resource_group }}"
      location: "{{ location }}"
  - name: Create secondary resource group
    azure_rm_resourcegroup:
      name: "{{ resource_group_secondary }}"
      location: "{{ location }}"
  - name: Create first virtual network
    azure_rm_virtualnetwork:
      resource_group: "{{ resource_group }}"
      name: "{{ vnet_name1 }}"
      address_prefixes: "10.0.0.0/16"
  - name: Add subnet
    azure_rm_subnet:
      resource_group: "{{ resource_group }}"
      name: "{{ vnet_name1 }}"
      address_prefix: "10.0.0.0/24"
      virtual_network: "{{ vnet_name1 }}"
  - name: Create second virtual network
    azure_rm_virtualnetwork:
      resource_group: "{{ resource_group_secondary }}"
      name: "{{ vnet_name2 }}"
      address_prefixes: "10.1.0.0/16"
  - name: Add subnet
    azure_rm_subnet:
      resource_group: "{{ resource_group }}"
      name: "{{ vnet_name2 }}"
      address_prefix: "10.1.0.0/24"
      virtual_network: "{{ vnet_name2 }}"
  - name: Initial vnet peering
    azure_rm_virtualnetworkpeering:
      resource_group: "{{ resource_group }}"
      name: "{{ peering_name }}"
      virtual_network: "{{ vnet_name1 }}"
      remote_virtual_network:
        resource_group: "{{ resource_group_secondary }}"
        name: "{{ vnet_name2 }}"
      allow_virtual_network_access: true
      allow_forwarded_traffic: true

  - name: Connect vnet peering
    azure_rm_virtualnetworkpeering:
      resource_group: "{{ resource_group_secondary }}"
      name: "{{ peering_name }}"
      virtual_network: "{{ vnet_name2 }}"
      remote_virtual_network:
        resource_group: "{{ resource_group }}"
        name: "{{ vnet_name1 }}"
      allow_virtual_network_access: true
      allow_forwarded_traffic: true

  - name: Delete vnet peering
    azure_rm_virtualnetworkpeering:
      resource_group: "{{ resource_group }}"
      name: "{{ peering_name }}"
      virtual_network: "{{ vnet_name1 }}"
      state: absent

執行範例劇本

本節中的範例劇本程式代碼可用來測試本教學課程中顯示的各種功能。

以下是使用範例劇本時要考慮的一些重要注意事項:

  • 在區 vars 段中,將 {{ resource_group_name }} 佔位元取代為您的資源群組名稱。

使用 ansible-playbook 命令執行劇本:

ansible-playbook vnet_peering.yml

執行劇本之後,您會看到類似下列結果的輸出:

PLAY [localhost] 

TASK [Gathering Facts] 
ok: [localhost]

TASK [Prepare random postfix] 
ok: [localhost]

PLAY [Connect virtual networks with virtual network peering] 

TASK [Gathering Facts] 
ok: [localhost]

TASK [Create a resource group] 
changed: [localhost]

TASK [Create secondary resource group] 
changed: [localhost]

TASK [Create first virtual network] 
changed: [localhost]

TASK [Add subnet] 
changed: [localhost]

TASK [Create second virtual network] 
changed: [localhost]

TASK [Add subnet] 
changed: [localhost]

TASK [Initial vnet peering] 
changed: [localhost]

TASK [Connect vnet peering] 
changed: [localhost]

TASK [Delete vnet peering] 
changed: [localhost]

PLAY RECAP 
localhost                  : ok=12   changed=9    unreachable=0    failed=0    skipped=0   rescued=0    ignored=0

清除資源

不再需要時,請刪除本文中建立的資源。

本節中的範例劇本程式代碼可用來:

  • 刪除稍早建立的兩個資源群組

將下列劇本儲存為 cleanup.yml

- hosts: localhost	
  vars:	
    resource_group: "{{ resource_group_name-1 }}"	
    resource_group_secondary: "{{ resource_group_name-2 }}"	
  tasks:	
    - name: Delete a resource group	
      azure_rm_resourcegroup:	
        name: "{{ resource_group }}"	
        force_delete_nonempty: yes	
        state: absent	
    - name: Delete a resource group	
      azure_rm_resourcegroup:	
        name: "{{ resource_group_secondary }}"	
        force_delete_nonempty: yes	
        state: absent	

以下是使用範例劇本時要考慮的一些重要注意事項:

  • {{ resource_group_name-1 }} 佔位元取代為第一個建立的資源群組名稱。
  • {{ resource_group_name-2 }} 佔位元取代為所建立的第二個資源群組名稱。
  • 將會刪除兩個指定資源群組內的所有資源。

使用 ansible-playbook 命令執行劇本:

ansible-playbook cleanup.yml	

下一步