Tutorial: Mengonfigurasikan tabel rute Azure menggunakan Ansible

Penting

Ansible 2.8 (atau yang lebih baru) diperlukan untuk menjalankan sampel playbook dalam artikel ini.

Azure secara otomatis merutekan traffic antara subnet Azure, jaringan virtual, dan jaringan lokal. Jika Anda memerlukan kontrol lebih besar atas perutean lingkungan Anda, Anda dapat membuat tabel rute.

Dalam artikel ini, Anda akan mempelajari cara:

Membuat tabel rute Buat jaringan virtual dan subnet Kaitkan tabel rute dengan subnet Memisahkan tabel rute dari subnet Buat dan hapus rute Kueri tabel rute Hapus tabel rute

Prasyarat

  • Langganan Azure: Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum memulai.

Membuat tabel rute

Kode playbook di bagian ini membuat tabel rute. Untuk informasi tentang batas tabel rute, lihat Azure limits.

Simpan playbook berikut sebagai 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 }}"

Jalankan playbook menggunakan ansible-playbook.

ansible-playbook route_table_create.yml

Mengaitkan tabel rute ke subnet

Kode playbook di bagian ini:

  • Membuat jaringan virtual
  • Membuat subnet dalam jaringan virtual
  • Kaitkan tabel rute ke subnet

Tabel rute tidak terkait dengan jaringan virtual. Sebaliknya, tabel rute dikaitkan dengan subnet jaringan virtual.

Jaringan virtual dan tabel rute harus hidup berdampingan di lokasi dan langganan Azure yang sama.

Subnet dan tabel rute memiliki satu-ke-banyak hubungan. Subnet dapat didefinisikan tanpa tabel rute terkait atau satu tabel rute. Tabel rute dapat dikaitkan dengan tanpa, satu, atau banyak subnet.

Lalu lintas dari subnet dirutekan berdasarkan:

  • rute yang ditentukan dalam tabel rute
  • Rute bawaan
  • rute yang disebarkan dari jaringan lokal

Jaringan virtual harus terhubung ke Azure virtual network gateway. Gateway dapat berupa ExpressRoute, atau VPN jika menggunakan BGP dengan gateway VPN.

Simpan playbook berikut sebagai 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 }}"

Jalankan playbook menggunakan ansible-playbook.

ansible-playbook route_table_associate.yml

Pisahkan tabel rute dari subnet

Kode playbook di bagian ini memisahkan tabel rute dari subnet.

Saat memisahkan tabel rute dari subnet, atur route_table untuk subnet ke None.

Simpan playbook berikut sebagai 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"

Jalankan playbook menggunakan ansible-playbook.

ansible-playbook route_table_dissociate.yml

Membuat rute

Kode playbook di bagian ini adalah rute dalam tabel rute.

Simpan playbook berikut sebagai 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 }}"

Sebelum menjalankan playbook, lihat catatan berikut:

  • virtual_network_gateway didefinisikan sebagai next_hop_type. Untuk informasi selengkapnya tentang perutean di Azure, lihat Routing overview.
  • address_prefix didefinisikan sebagai 10.1.0.0/16. Awalan tidak dapat diduplikasi dalam tabel rute.

Jalankan playbook menggunakan ansible-playbook.

ansible-playbook route_create.yml

Menghapus rute

Kode playbook di bagian ini menghapus rute dari tabel rute.

Simpan playbook berikut sebagai 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

Jalankan playbook menggunakan ansible-playbook.

ansible-playbook route_delete.yml

Mendapatkan informasi tabel rute

Kode playbook di bagian ini menggunakan modul Ansible azure_rm_routetable_facts untuk mengambil informasi tabel rute.

Simpan playbook berikut sebagai 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]

Jalankan playbook menggunakan ansible-playbook.

ansible-playbook route_table_facts.yml

Hapus tabel rute

Kode playbook di bagian ini adalah tabel rute.

Ketika tabel rute dihapus, semua rutenya juga dihapus.

Tabel rute tidak dapat dihapus jika dikaitkan dengan subnet. Pisahkan tabel rute dari subnet apa pun sebelum mencoba menghapus tabel rute.

Simpan playbook berikut sebagai 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

Jalankan playbook menggunakan ansible-playbook.

ansible-playbook route_table_delete.yml

Langkah berikutnya