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.
Instal Ansible: Lakukan salah satu opsi berikut:
- Menginstal dan mengonfigurasi Ansibel pada mesin virtual Linux
- Konfigurasikan Azure Cloud Shell dan - jika Anda tidak memiliki akses ke mesin virtual Linux - buat mesin virtual dengan Ansible.
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 sebagainext_hop_type
. Untuk informasi selengkapnya tentang perutean di Azure, lihat Routing overview.address_prefix
didefinisikan sebagai10.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