-
[Azure] Application GatewayAWS 2023. 3. 16. 09:44
해당 게시글은 Microsoft Azure 설명서를 기반으로, 공부 차원에서 작성한 게시글입니다.
자세한 설명은 하단의 링크에서 확인할 수 있습니다.
** 참고문서 : https://learn.microsoft.com/ko-kr/azure/application-gateway/overview
Application Gateway
- 웹 애플리케이션에 대한 트래픽을 관리할 수 있도록 하는 웹 트래픽 부하 분산 장치
<차이점>
- Application gateway : 애플리케이션 계층(OSI 계층 7) 부하 분산, URL 기반 라우팅 및 기타 작업 수행
- 기존 부하 분산 장치 : 전송 계층(OSI 계층 4 - TCP 및 UDP)에서 작동, 원본 IP 주소와 포트를 기반으로 대상 IP 주소와 포트에 트래픽을 라우팅
실습 아키텍처
Azure CLI를 사용하여 애플리케이션 게이트웨이를 생성한다.
애플리케이션 게이트웨이는 애플리케이션 웹 트래픽을 백 엔드 풀의 특정 리소스로 보낸다.
수신기를 포트에 할당하고, 규칙을 만들고, 백 엔드 풀에 리소스를 추가한다.
해당 실습에서는 공용 프런트 엔드 IP 주소가 있는 간단한 설정, 애플리케이션 게이트웨이에서 단일 사이트를 호스트하는 기본 수신기, 기본 요청 라우팅 규칙 및 백 엔드 풀의 두 가상 머신을 사용한다.
0. AZ login
az login
azure cli를 사용할 것이기 때문에, 터미널에서 az login 명령어를 입력해주어 Azure 내 계정과 연동한다.
1. 리소스 그룹 생성
az group create --name myResourceGroupAG --location eastus
: eastus 위치에 myResourceGroupAG라는 리소스 그룹 생성
az group create를 사용하여 리소스 그룹을 만든다.
2. 네트워크 리소스 생성
az network vnet create --name myVNet --resource-group myResourceGroupAG --location eastus --address-prefix 10.21.0.0/16 --subnet-name myAGSubnet --subnet-prefix 10.21.0.0/24 az network vnet subnet create --name myBackendSubnet --resource-group myResourceGroupAG --vnet-name myVNet --address-prefix 10.21.1.0/24 az network public-ip create --resource-group myResourceGroupAG --name myAGPublicIPAddress --allocation-method Static --sku Standard
: 1. 가상 네트워크(myVnet), 서브넷1(애플리케이션 게이트웨이용 서브넷, myAGsubnet)
: 2. 서브넷2(백 엔드 서버용 서브넷, myBackendSubnet)
: 3. 공용 프런트 엔드 IP 주소를 생성
Azure가 사용자가 만든 리소스 간에 통신하려면 가상 네트워크가 필요하다.
또한, 애플리케이션 게이트웨이 서브넷은 애플리케이션 게이트웨이만 포함할 수 있다. 다른 리소스는 허용되지 않는다.
이 예제에서는 두 개의 서브넷을 만든다. 하나는 애플리케이션 게이트웨이용 서브넷(10.21.0.0/24)이고, 다른 하나는 백 엔드 서버용 서브넷(10.21.1.0/24)이다.
사용 사례에 따라 Application Gateway의 프런트 엔드 IP를 공용 또는 프라이빗 IP로 구성할 수 있다. 이 예제에서는 공용 프런트 엔드 IP 주소를 선택한다.
3. 백 엔드 서버 생성
이 예제에서는 애플리케이션 게이트웨이의 백 엔드 서버로 사용되는 두 개의 가상 머신을 만든다.
또한 가상 머신에 NGINX를 설치하여 애플리케이션 게이트웨이를 테스트한다.
[yaml 파일]
#cloud-config package_upgrade: true packages: - nginx - nodejs - npm write_files: - owner: www-data:www-data - path: /etc/nginx/sites-available/default content: | server { listen 80; location / { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } - owner: azureuser:azureuser - path: /home/azureuser/myapp/index.js content: | var express = require('express') var app = express() var os = require('os'); app.get('/', function (req, res) { res.send('Hello World from host ' + os.hostname() + '!') }) app.listen(3000, function () { console.log('Hello world app listening on port 3000!') }) runcmd: - service nginx restart - cd "/home/azureuser/myapp" - npm init - npm install express -y - nodejs index.js
: cloud-init 구성 파일을 사용하여 NGINX를 설치하고 Linux 가상 머신에서 "Hello World" Node.js 앱을 실행
애플리케이션 게이트웨이가 성공적으로 만들어졌는지 확인할 수 있도록 가상 머신에 NGINX 웹 서버를 설치한다.
먼저, Azure Cloud Shell에서 다음 구성을 복사하여 cloud-init.txt 파일에 붙여넣는다.
이후 editor cloud-init.txt를 입력하여 파일을 만든다.
[Azure CLI 파일]
for i in `seq 1 2`; do az network nic create \ --resource-group myResourceGroupAG \ --name myNic$i \ --vnet-name myVNet \ --subnet myBackendSubnet az vm create \ --resource-group myResourceGroupAG \ --name myVM$i \ --nics myNic$i \ --image UbuntuLTS \ --admin-username azureuser \ --generate-ssh-keys \ --custom-data cloud-init.txt done
: az network nic create를 사용하여 네트워크 인터페이스 생성, az vm create를 통해 가상머신 생성
4. Application gateway 생성
address1=$(az network nic show --name myNic1 --resource-group myResourceGroupAG | grep "\"privateIpAddress\":" | grep -oE '[^ ]+$' | tr -d '",') address2=$(az network nic show --name myNic2 --resource-group myResourceGroupAG | grep "\"privateIpAddress\":" | grep -oE '[^ ]+$' | tr -d '",') az network application-gateway create \ --name myAppGateway \ --location eastus \ --resource-group myResourceGroupAG \ --capacity 2 \ --sku Standard_v2 \ --public-ip-address myAGPublicIPAddress \ --vnet-name myVNet \ --subnet myAGSubnet \ --servers "$address1" "$address2" \ --priority 100
: az network application-gateway create를 사용하여 애플리케이션 게이트웨이를 생성한다.
Azure CLI를 사용하여 애플리케이션 게이트웨이를 만들 때 용량, SKU, HTTP 설정 등의 구성 정보를 지정한다.
그러면 Azure가 네트워크 인터페이스의 개인 IP 주소를 애플리케이션 게이트웨이의 백 엔드 풀에 서버로 추가한다.
만들어지면 애플리케이션 게이트웨이 페이지의 설정 섹션에서 다음 설정을 볼 수 있다.
- appGatewayBackendPool: 백 엔드 풀 페이지에 있습니다. 필요한 백 엔드 풀을 지정합니다.
- appGatewayBackendHttpSettings: HTTP 설정 페이지에 있습니다. 애플리케이션 게이트웨이가 통신에 포트 80 및 HTTP 프로토콜을 사용하도록 지정합니다.
- appGatewayHttpListener: 수신기 페이지에 있습니다. appGatewayBackendPool과 연결되는 기본 수신기를 지정합니다.
- appGatewayFrontendIP: 프런트 엔드 IP 구성 페이지에 있습니다. myAGPublicIPAddress를 appGatewayHttpListener에 할당합니다.
- rule1: 규칙 페이지에 있습니다. appGatewayHttpListener에 연결되는 기본 회람 규칙을 지정합니다.
5. Application gateway 테스트
az network public-ip show \ --resource-group myResourceGroupAG \ --name myAGPublicIPAddress \ --query [ipAddress] \ --output tsv
: az network public-ip show 새 애플리케이션 게이트웨이의 공용 IP 주소를 가져오기
Azure에서 애플리케이션 게이트웨이를 만들려면 반드시 NGINX 웹 서버가 필요한 것은 아니지만, Azure가 애플리케이션 게이트웨이를 성공적으로 만들었는지 확인하기 위해 설치하였다.
이후 공용 IP 주소를 복사하여, 웹 페이지에 띄워본다.
브라우저를 새로 고치면 보조 VM의 이름이 표시된다.
이는 애플리케이션 게이트웨이가 성공적으로 만들어졌으며 백 엔드에 연결할 수 있다는 의미이다.
6. 리소스 정리
az group delete --name myResourceGroupAG
: az group delete 리소스 그룹 삭제
애플리케이션 게이트웨이로 만든 리소스가 더 이상 필요 없으면 az group delete 명령을 사용하여 리소스 그룹을 삭제한다. 리소스 그룹을 삭제하면 애플리케이션 게이트웨이 및 모든 관련 리소스도 함께 삭제된다.
'AWS' 카테고리의 다른 글
[AWS] VPC 피어링 (0) 2023.01.14 [AWS] Global Accelerator (0) 2023.01.13 [AWS] CloudFront를 통한 CDN서비스 (0) 2023.01.12 [AWS] Route 53 (0) 2023.01.12 [AWS] 로드밸런싱 - NLB를 통한 로드밸런싱 (0) 2023.01.12