연습 - Application Gateway 만들기 및 구성

완료됨

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

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

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

Diagram showing the resources that will be deployed.

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. 의 개인 IP 주소를 webServer1webServer2찾으려면 다음 명령을 실행합니다.

    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
    

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