연습 - Application Gateway 만들기 및 구성
Application Gateway는 엔드포인트에서 들어오는 요청을 수신 대기한 다음, 이러한 요청을 백 엔드 풀의 웹 서버 중 하나에 전달합니다. Application Gateway에서 트래픽을 전달하는 방법과 웹 서버 간에 요청의 부하를 분산시키는 방법을 설명하는 구성을 제공합니다.
차량 부서 시스템에서 차량 등록 웹앱을 호스팅하는 웹 서버 간에 들어오는 요청의 부하를 분산하도록 Application Gateway를 구성해야 합니다. 웹 서버 중 하나가 실패한 경우도 감지하여 트래픽을 작업 서버로 리디렉션할 수 있도록 Application Gateway를 구성해야 합니다. 또한 차량 등록 및 라이선스 갱신 사이트에 대한 요청을 적절한 백 엔드 웹 서비스로 보내도록 경로 기반 라우팅을 구성해야 합니다.
이 연습에서는 웹 서버의 백 엔드 풀을 사용하여 Application Gateway 인스턴스를 만듭니다. Application Gateway가 올바른 수신기로 구성되어 들어오는 HTTP 요청을 처리하고 이러한 요청을 작동하는 웹 서버로 라우팅하는지 확인합니다.
Application Gateway에 대한 네트워크 구성
Application Gateway에 필요한 프라이빗 서브넷을 만들려면 다음 명령을 실행합니다. 이전 연습에서 만든
vehicleAppVnet
가상 네트워크에서 이 서브넷의 이름은appGatewaySubnet
입니다.az network vnet subnet create \ --resource-group $RG \ --vnet-name vehicleAppVnet \ --name appGatewaySubnet \ --address-prefixes 10.0.0.0/24
Application Gateway의 공용 IP 주소와 DNS 레이블을 만들려면 다음 명령을 실행합니다. DNS 레이블은 글로벌로 고유해야 합니다. 레이블을 생성하기 위해 다음 코드는
$RANDOM
함수를 사용합니다.az network public-ip create \ --resource-group $RG \ --name appGatewayPublicIp \ --sku Standard \ --dns-name vehicleapp${RANDOM}
애플리케이션 게이트웨이 만들기
먼저 다음 명령을 사용하여 WAF 정책을 만듭니다.
az network application-gateway waf-policy create \ --name waf-pol \ --resource-group $RG \ --type OWASP \ --version 3.2
다음 명령을 사용하여 다음 구성으로
vehicleAppGateway
라는 애플리케이션 게이트웨이를 만듭니다.- 웹 서버 가상 머신의 IP 주소가 포함된 백 엔드 풀
- SQL 삽입 및 교차 사이트 스크립팅 공격에서 사용되는 것과 같은 악성 요청을 차단하는 방화벽
- 8080 포트를 수신 대기하는 임시 수신기입니다. 이 수신기는 이후 단계에서 대체 되지만 Application Gateway를 만드는 데 필요합니다.
- 해당 요청을 백 엔드 풀의 웹 서버로 라우팅(및 부하 분산)하는 규칙
az network application-gateway create \ --resource-group $RG \ --name vehicleAppGateway \ --sku WAF_v2 \ --capacity 2 \ --vnet-name vehicleAppVnet \ --subnet appGatewaySubnet \ --public-ip-address appGatewayPublicIp \ --http-settings-protocol Http \ --http-settings-port 8080 \ --private-ip-address 10.0.0.4 \ --frontend-port 8080 \ --waf-policy waf-pol \ --priority 100
참고
이 명령을 완료하는 데 몇 분 정도 걸릴 수 있습니다.
webServer1
및webServer2
의 개인 IP 주소를 찾으려면 다음 명령을 실행합니다.az vm list-ip-addresses \ --resource-group $RG \ --name webServer1 \ --query [0].virtualMachine.network.privateIpAddresses[0] \ --output tsv
az vm list-ip-addresses \ --resource-group $RG \ --name webserver2 \ --query [0].virtualMachine.network.privateIpAddresses[0] \ --output tsv
다음으로, 각 웹 사이트에 대한 백 엔드 풀을 추가합니다. 먼저 가상 머신에서 실행되는 차량 등록 사이트에 대한 백 엔드 풀을 만듭니다. 아래 명령의 IP 주소가 이전 명령의 출력인 IP 주소와 일치하는지 확인합니다.
az network application-gateway address-pool create \ --gateway-name vehicleAppGateway \ --resource-group $RG \ --name vmPool \ --servers 10.0.1.4 10.0.1.5
App Service에서 실행되는 라이선스 갱신 사이트의 백 엔드 풀을 만들려면 다음 명령을 실행합니다.
az network application-gateway address-pool create \ --resource-group $RG \ --gateway-name vehicleAppGateway \ --name appServicePool \ --servers $APPSERVICE.azurewebsites.net
포트 80의 경우 프런트 엔드 포트를 만듭니다.
az network application-gateway frontend-port create \ --resource-group $RG \ --gateway-name vehicleAppGateway \ --name port80 \ --port 80
포트 80에서 요청을 처리하려면 수신기를 만듭니다.
az network application-gateway http-listener create \ --resource-group $RG \ --name vehicleListener \ --frontend-port port80 \ --frontend-ip appGatewayFrontendIP \ --gateway-name vehicleAppGateway
상태 프로브 추가
웹 서버의 가용성을 테스트하는 상태 프로브를 만듭니다. 상태 프로브는 15초마다(
--interval 15
) 실행되고 HTTP GET 요청을 웹앱의 루트 경로에 보냅니다. 웹앱에서 10초(--timeout 10
) 내에 응답하지 않으면 프로브 시간이 초과됩니다. 프로브가 연속으로 세 번 실패하면(--threshold 3
) 웹 서버가 비정상으로 표시됩니다.App Service를 백 엔드 중 하나로 사용하고 있으므로 호스트 헤더를 App Service 이름으로 설정합니다. 이 설정이 없으면 App Service가 응답하지 않고 정상으로 표시되지 않습니다.
az network application-gateway probe create \ --resource-group $RG \ --gateway-name vehicleAppGateway \ --name customProbe \ --path / \ --interval 15 \ --threshold 3 \ --timeout 10 \ --protocol Http \ --host-name-from-http-settings true
다음으로 직접 만든 상태 프로브를 사용하려면 게이트웨이의 HTTP 설정을 만듭니다.
az network application-gateway http-settings create \ --resource-group $RG \ --gateway-name vehicleAppGateway \ --name appGatewayBackendHttpSettings \ --host-name-from-backend-pool true \ --port 80 \ --probe customProbe
경로 기반 라우팅 구성
이제 애플리케이션 게이트웨이에 대한 경로 기반 라우팅을 구성해야 합니다. /VehicleRegistration/에 대한 요청은 vmPool로 라우팅하고, /LicenseRenewal/에 대한 요청은 appServicePool로 라우팅합니다. URL 컨텍스트가 없는 모든 요청은 기본값인 vmPool로 라우팅됩니다.
vmPool의 경로 맵을 만들려면 다음 명령을 실행합니다.
az network application-gateway url-path-map create \ --resource-group $RG \ --gateway-name vehicleAppGateway \ --name urlPathMap \ --paths /VehicleRegistration/* \ --http-settings appGatewayBackendHttpSettings \ --default-http-settings appGatewayBackendHttpSettings \ --address-pool vmPool \ --default-address-pool vmPool
appServicePool의 경로 맵 규칙을 만들려면 다음 명령을 실행합니다.
az network application-gateway url-path-map rule create \ --resource-group $RG \ --gateway-name vehicleAppGateway \ --name appServiceUrlPathMap \ --paths /LicenseRenewal/* \ --http-settings appGatewayBackendHttpSettings \ --address-pool appServicePool \ --path-map-name urlPathMap
이제 직접 만든 경로 맵을 사용하여 새 라우팅 규칙을 만듭니다.
az network application-gateway rule create \ --resource-group $RG \ --gateway-name vehicleAppGateway \ --name appServiceRule \ --priority 200 \ --http-listener vehicleListener \ --rule-type PathBasedRouting \ --address-pool appServicePool \ --url-path-map urlPathMap
마지막으로 Application Gateway를 처음 배포할 때 만든 규칙을 삭제하도록 구성합니다. 사용자 지정 규칙이 있으므로 해당 규칙은 더 이상 필요하지 않습니다.
az network application-gateway rule delete \ --resource-group $RG \ --gateway-name vehicleAppGateway \ --name rule1
모든 설정이 완료되면 테스트해야 합니다.