教學課程:使用 Ansible 設定 Azure 虛擬網路對等互連
重要
本文中需要 Ansible 2.8 (或更新版本)才能執行範例劇本。
虛擬網路 (VNet) 對等互連 可讓您順暢地連線兩個 Azure 虛擬網路。 對等互連之後,這兩個虛擬網路會以一個虛擬網路的形式出現,以供連線之用。
流量會透過私人IP位址在相同虛擬網路中的VM之間路由傳送。 同樣地,對等互連虛擬網路中 VM 之間的流量會透過 Microsoft 骨幹基礎結構路由傳送。 因此,不同虛擬網路中的 VM 可以彼此通訊。
在本文中,您將學會如何:
- 建立兩個虛擬網路
- 將兩個虛擬網路對等互連
- 刪除兩個網路之間的對等互連
必要條件
- Azure 訂用帳戶:如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶。
安裝 Ansible:執行下列其中一個選項:
- 在 Linux 虛擬機上安裝及 設定 Ansible
- 設定 Azure Cloud Shell ,如果您無法存取 Linux 虛擬機, 請使用 Ansible 建立虛擬機。
建立兩個資源群組
資源群組是用來部署和管理 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