자습서: Ansible을 사용하여 Azure 경로 테이블 구성
Important
이 문서의 샘플 플레이북을 실행하려면 Ansible 2.8 이상이 필요합니다.
Azure는 Azure 서브넷, 가상 네트워크 및 온-프레미스 네트워크 간에 트래픽을 자동으로 라우트합니다. 환경의 라우팅을 보다 강력하게 제어해야 할 경우 경로 테이블을 만들 수 있습니다.
이 문서에서는 다음 방법을 설명합니다.
경로 테이블 만들기 가상 네트워크 및 서브넷 만들기 경로 테이블을 서브넷에 연결 서브넷에서 경로 테이블 분리 경로 삭제 경로 테이블 쿼리 경로 테이블 삭제
필수 조건
- Azure 구독: Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.
Ansible 설치: 다음 옵션 중 하나를 수행합니다.
- Linux 가상 머신에서 Ansible 설치 및 구성
- Azure Cloud Shell 구성 - Linux 가상 머신에 액세스할 수 없는 경우 Ansible을 사용하여 가상 머신 만들기
경로 테이블 만들기
이 섹션의 플레이북 코드는 경로 테이블을 만듭니다. 경로 테이블 제한에 대한 자세한 내용은 Azure 제한을 참조 하세요.
다음 플레이북을 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 }}"
ansible-playbook을 사용하여 플레이북 실행
ansible-playbook route_table_create.yml
서브넷에 경로 테이블 연결
이 섹션의 플레이북 코드:
- 가상 네트워크를 만듭니다.
- 가상 네트워크 내에 서브넷을 만듭니다.
- 경로 테이블을 서브넷에 연결
경로 테이블은 가상 네트워크에 연결되지 않습니다. 대신, 경로 테이블은 가상 네트워크의 서브넷에 연결됩니다.
가상 네트워크 및 라우팅 테이블은 동일한 Azure 위치 및 구독에 공존해야 합니다.
서브넷과 경로 테이블은 일대다 관계가 있습니다. 연결된 경로 테이블이나 하나의 경로 테이블 없이 서브넷을 정의할 수 있습니다. 경로 테이블은 하나 또는 여러 개의 서브넷에 연결되거나 서브넷에 연결되지 않을 수 있습니다.
서브넷의 트래픽은 다음을 기반으로 라우팅됩니다.
- 경로 테이블 내에 정의된 경로
- 기본 경로
- 온-프레미스 네트워크에서 전파된 경로
가상 네트워크는 Azure 가상 네트워크 게이트웨이에 연결되어야 합니다. 게이트웨이는 ExpressRoute이거나 VPN 게이트웨이와 함께 BGP를 사용하는 경우 VPN일 수 있습니다.
다음 플레이북을 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 }}"
ansible-playbook을 사용하여 플레이북 실행
ansible-playbook route_table_associate.yml
서브넷에서 경로 테이블 분리
이 섹션의 플레이북 코드는 서브넷에서 경로 테이블을 분리합니다.
서브넷에서 경로 테이블을 분리하는 경우 서브None
넷에 route_table
대한 값을 .로 설정합니다.
다음 플레이북을 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"
ansible-playbook을 사용하여 플레이북 실행
ansible-playbook route_table_dissociate.yml
경로 만들기
이 섹션의 플레이북 코드는 경로 테이블 내의 경로입니다.
다음 플레이북을 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 }}"
플레이북을 실행하기 전에 다음 정보를 참조하세요.
virtual_network_gateway
는next_hop_type
으로 정의됩니다. Azure에서 경로를 선택하는 방법에 대한 자세한 내용은 라우팅 개요를 참조하세요.address_prefix
는10.1.0.0/16
으로 정의됩니다. 경로 테이블 내에서는 접두사를 복제할 수 없습니다.
ansible-playbook을 사용하여 플레이북 실행
ansible-playbook route_create.yml
경로 삭제
이 섹션의 플레이북 코드는 경로 테이블에서 경로를 삭제합니다.
다음 플레이북을 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
ansible-playbook을 사용하여 플레이북 실행
ansible-playbook route_delete.yml
경로 테이블 정보 가져오기
이 섹션의 플레이북 코드는 Ansible 모듈 azure_rm_routetable_facts
을 사용하여 경로 테이블 정보를 검색합니다.
다음 플레이북을 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]
ansible-playbook을 사용하여 플레이북 실행
ansible-playbook route_table_facts.yml
경로 테이블 삭제
이 섹션의 플레이북 코드는 경로 테이블을 삭제합니다.
경로 테이블을 삭제하면 해당 경로도 모두 삭제됩니다.
경로 테이블이 서브넷과 연결된 경우 삭제할 수 없습니다. 경로 테이블을 삭제하기 전에 서브넷에서 경로 테이블을 분리합니다 .
다음 플레이북을 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
ansible-playbook을 사용하여 플레이북 실행
ansible-playbook route_table_delete.yml