연습 - Application Gateway 만들기 및 구성

완료됨

Application Gateway는 엔드포인트에서 들어오는 요청을 수신 대기한 다음, 이러한 요청을 백 엔드 풀의 웹 서버 중 하나에 전달합니다. Application Gateway에서 트래픽을 전달하는 방법과 웹 서버 간에 요청의 부하를 분산시키는 방법을 설명하는 구성을 제공합니다.

차량 부서 시스템에서 차량 등록 웹앱을 호스팅하는 웹 서버 간에 들어오는 요청의 부하를 분산하도록 Application Gateway를 구성해야 합니다. 웹 서버 중 하나가 실패한 경우도 감지하여 트래픽을 작업 서버로 리디렉션할 수 있도록 Application Gateway를 구성해야 합니다. 또한 차량 등록 및 라이선스 갱신 사이트에 대한 요청을 적절한 백 엔드 웹 서비스로 보내도록 경로 기반 라우팅을 구성해야 합니다.

이 연습에서는 웹 서버의 백 엔드 풀을 사용하여 Application Gateway 인스턴스를 만듭니다. Application Gateway가 올바른 수신기로 구성되어 들어오는 HTTP 요청을 처리하고 이러한 요청을 작동하는 웹 서버로 라우팅하는지 확인합니다.

배포할 리소스를 보여 주는 다이어그램

Application Gateway에 대한 네트워크 구성

  1. Application Gateway에 필요한 프라이빗 서브넷을 만들려면 다음 명령을 실행합니다. 이전 연습에서 만든 vehicleAppVnet 가상 네트워크에서 이 서브넷의 이름은 appGatewaySubnet입니다.

    az network vnet subnet create \
      --resource-group $RG \
      --vnet-name vehicleAppVnet  \
      --name appGatewaySubnet \
      --address-prefixes 10.0.0.0/24
    
  2. Application Gateway의 공용 IP 주소와 DNS 레이블을 만들려면 다음 명령을 실행합니다. DNS 레이블은 글로벌로 고유해야 합니다. 레이블을 생성하기 위해 다음 코드는 $RANDOM 함수를 사용합니다.

    az network public-ip create \
      --resource-group $RG \
      --name appGatewayPublicIp \
      --sku Standard \
      --dns-name vehicleapp${RANDOM}
    

애플리케이션 게이트웨이 만들기

  1. 먼저 다음 명령을 사용하여 WAF 정책을 만듭니다.

    az network application-gateway waf-policy create \
      --name waf-pol \
      --resource-group $RG \
      --type OWASP \
      --version 3.2
    
  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
    

    참고

    이 명령을 완료하는 데 몇 분 정도 걸릴 수 있습니다.

  3. webServer1webServer2의 개인 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
    
  4. 다음으로, 각 웹 사이트에 대한 백 엔드 풀을 추가합니다. 먼저 가상 머신에서 실행되는 차량 등록 사이트에 대한 백 엔드 풀을 만듭니다. 아래 명령의 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
    
  5. App Service에서 실행되는 라이선스 갱신 사이트의 백 엔드 풀을 만들려면 다음 명령을 실행합니다.

    az network application-gateway address-pool create \
        --resource-group $RG \
        --gateway-name vehicleAppGateway \
        --name appServicePool \
        --servers $APPSERVICE.azurewebsites.net
    
  6. 포트 80의 경우 프런트 엔드 포트를 만듭니다.

    az network application-gateway frontend-port create \
        --resource-group $RG \
        --gateway-name vehicleAppGateway \
        --name port80 \
        --port 80
    
  7. 포트 80에서 요청을 처리하려면 수신기를 만듭니다.

    az network application-gateway http-listener create \
        --resource-group $RG \
        --name vehicleListener \
        --frontend-port port80 \
        --frontend-ip appGatewayFrontendIP \
        --gateway-name vehicleAppGateway
    

상태 프로브 추가

  1. 웹 서버의 가용성을 테스트하는 상태 프로브를 만듭니다. 상태 프로브는 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
    
  2. 다음으로 직접 만든 상태 프로브를 사용하려면 게이트웨이의 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로 라우팅됩니다.

  1. 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
    
  2. 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
    
  3. 이제 직접 만든 경로 맵을 사용하여 새 라우팅 규칙을 만듭니다.

    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
    
  4. 마지막으로 Application Gateway를 처음 배포할 때 만든 규칙을 삭제하도록 구성합니다. 사용자 지정 규칙이 있으므로 해당 규칙은 더 이상 필요하지 않습니다.

    az network application-gateway rule delete \
        --resource-group $RG \
        --gateway-name vehicleAppGateway \
        --name rule1
    

모든 설정이 완료되면 테스트해야 합니다.