Esercitazione: Configurare il peering di rete virtuale di Azure con Ansible

Importante

Per eseguire i playbook di esempio contenuti in questo articolo, è necessario Ansible 2.8 (o versione successiva).

Il peering di rete virtuale (VNet) consente di connettere facilmente due reti virtuali di Azure. Dopo avere eseguito il peering, le due reti virtuali vengono visualizzate come una sola dal punto di vista della connettività.

Il traffico viene instradato tra le macchine virtuali nella stessa rete virtuale tramite indirizzi IP privati. Analogamente, il traffico tra macchine virtuali in una rete virtuale con peering viene instradato attraverso l'infrastruttura backbone Microsoft. Di conseguenza, le macchine virtuali in reti virtuali diverse possono comunicare tra loro.

In questo articolo vengono illustrate le operazioni seguenti:

  • Creare due reti virtuali
  • Eseguire il peering delle due reti virtuali
  • Eliminare il peering tra le due reti

Prerequisiti

  • Sottoscrizione di Azure: se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.

Creare due gruppi di risorse

Un gruppo di risorse è un contenitore logico in cui le risorse di Azure vengono distribuite e gestite.

Il codice del playbook di esempio in questa sezione viene usato per:

  • Creare due gruppi di risorse
  - 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 }}"

Creare la prima rete virtuale

Il codice del playbook di esempio in questa sezione viene usato per:

  • Creare una rete virtuale
  • Creare una subnet all'interno della rete virtuale
  - 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 }}"

Creare la seconda macchina virtuale

Il codice del playbook di esempio in questa sezione viene usato per:

  • Creare una rete virtuale
  • Creare una subnet all'interno della rete virtuale
  - 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 }}"

Eseguire il peering delle due reti virtuali

Il codice del playbook di esempio in questa sezione viene usato per:

  • Inizializzare il peering di rete virtuale
  • Eseguire il peering delle due reti virtuali create in precedenza
  - 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

Eliminare il peering di rete virtuale

Il codice del playbook di esempio in questa sezione viene usato per:

  • Eliminare il peering tra le due reti virtuali create in precedenza
  - name: Delete vnet peering
    azure_rm_virtualnetworkpeering:
      resource_group: "{{ resource_group }}"
      name: "{{ peering_name }}"
      virtual_network: "{{ vnet_name1 }}"
      state: absent

Ottenere il playbook di esempio

È possibile ottenere il playbook di esempio completo in due modi:

  • Scaricare il playbook e salvarlo in vnet_peering.yml.
  • Creare un nuovo file denominato vnet_peering.yml e copiarvi il contenuto seguente:
- 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

Eseguire il playbook di esempio

Il codice del playbook di esempio in questa sezione viene usato per testare varie funzionalità illustrate in questa esercitazione.

Quando si usa il playbook di esempio, è necessario tenere conto di alcuni concetti fondamentali:

  • Nella sezione vars sostituire il segnaposto {{ resource_group_name }} con il nome del proprio gruppo di risorse.

Eseguire il playbook usando il comando ansible-playbook:

ansible-playbook vnet_peering.yml

Dopo avere eseguito il playbook, viene visualizzato un output simile ai risultati seguenti:

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

Pulire le risorse

Quando non sono più necessarie, eliminare le risorse create in questo articolo.

Il codice del playbook di esempio in questa sezione viene usato per:

  • Eliminare i due gruppi di risorse creati in precedenza

Salvare il playbook seguente come 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	

Quando si usa il playbook di esempio, è necessario tenere conto di alcuni concetti fondamentali:

  • Sostituire il segnaposto {{ resource_group_name-1 }} con il nome del primo gruppo di risorse creato.
  • Sostituire il segnaposto {{ resource_group_name-2 }} con il nome del secondo gruppo di risorse creato.
  • Tutte le risorse nei due gruppi di risorse specificati verranno eliminate.

Eseguire il playbook usando il comando ansible-playbook:

ansible-playbook cleanup.yml	

Passaggi successivi