Azure에서 제공하는 클라우드 서비스(Portal을 통해 접속)를 이용해 2대의 웹 서버 가상머신을 구축하여 웹 서비스를 진행한다.
이 서비스는 1대의 데이터베이스 서버에 연동되어 있다. 
데이터베이스 서버는 웹 서버와 다른 Region에 존재하며 VPN으로 연동되어 있다.
웹 서버 중 1대만 공인 IP를 기반으로 한 SSH 접속이 가능하며 다른 한 대는 SSH 연결이 NSG로 차단되어 있다.

 

https://azure.microsoft.com/ko-kr/

 

클라우드 컴퓨팅 서비스 | Microsoft Azure

Microsoft Azure의 유연한 개방형 클라우드 컴퓨팅 플랫폼을 통해 목적에 따라 투자하고 비용을 절감하며 조직을 더 효율적으로 만드세요.

azure.microsoft.com


<기본 구성 설정>

[그림 1] Virtual Machine(VM) 3개를 추가한다

 

[그림 2] 첫 번째 Virtual Machine

 

이름 : vm1-eastus-swucloudhw

리소스 그룹 : rg-swucloudhw

공인 IP :  40.117.128.66

Region : 미국 동부

가상 네트워크  : vnet-eastus-swucloudhw

서브넷 : snet01-vnet-eastus-swucloudhw

 

 

[그림 3] 두 번째 Virtual Machine

 

이름 : vm2-eastus-swucloudhw

리소스 그룹 : rg-swucloudhw

공인 IP :  52.149.217.157

Region : 미국 동부

가상 네트워크  : vnet-eastus-swucloudhw

서브넷 : snet02-vnet-eastus-swucloudhw

 

 

[그림 4] 세 번째 Virtual Machine (for DB Server)

 

이름 : vm3forDB-eastaust-swucloudhw

리소스 그룹 : rg-swucloudhw

공인 IP :  40.126.237.187

Region : 오스트레일리아 동부

가상 네트워크  : vnet-eastaust-swucloudhw

서브넷 : snet01-vnet-eastaust-swucloudhw

 

 

[그림 5] 세 번째 Virtual Machine (for DB Server)

 

사설 IP :  172.0.3.4

 


[그림 6] 가상 네트워크 게이트웨이 추가

서로 다른 Region (미국 동부와 오스트레일리아 동부)을 VPN으로 연결해주기 위해서 VGW를 추가한다.

 

 

[그림 7] 첫 번째 Virtual Gateway

 

이름 : vgw01-eastus-swucloudhw

리소스 그룹 : rg-swucloudhw

위치 : 미국 동부

공인 IP : 52.152.142.189

가상 네트워크  : vnet-eastus-swucloudhw

 

 

[그림 8] 두 번째 Virtual Gateway

 

이름 : vgw02-eastaust-swucloudhw

리소스 그룹 : rg-swucloudhw

위치 : 오스트레일리아 동부

공인 IP : 13.75.230.233

가상 네트워크 : vnet-eastaust-swucloudhw

 

 

[그림 9] VPN 구축을 위한 VGW끼리의 connect 설정

VPN(Virtual Private Network) 구축을 위해서 서로 다른 Region에 위치한 VGW(Virtual Gateway)를 서로 연결 시켜주었다.

 

[그림 10] 연결 상세 정보

VPN 구축을 위해 연결된 가상 네트워크의 상세 정보이다.

vnet-eastaust-swucloudhw, vnet-eastus-swucloudhw 끼리 잘 연결된 것을 확인할 수 있다.

 


[그림 11] vnet-eastus-swucloudhw 가상 네트워크 구성 상세 확인

미국 동부에 위치한 vnet-eastus-swucloudhw 의 주소 공간은 10.0.0.0/16 이며 이 가상네트워크에 속한 디바이스들을 확인할 수 있다.

 

[그림 12] vnet-eastaust-swucloudhw 가상 네트워크 구성 상세 확인

오스트레일리아 동부에 위치한 vnet-eastaust-swucloudhw 의 주소 공간은 172.0.0.0/16 이며 이 가상네트워크에 속한 디바이스들을 확인할 수 있다.

 


<DB 서버 설정>

[그림 13] vm3-forDB-eastaust-swucloudhw 에 접속

DB 서버를 위한 가상머신에 접속한 후 sudo apt install mysql-server 명령어를 통해 mysql server를 설치한다.

 

 

[그림 14] mysql 설치 완료한 후 mysql 실행

sudo /usr/bin/mysql -u -root -p 비밀번호 명령어를 입력하여 MYSQL을 실행한다.

 

 

[그림 15] MySQL 버전 확인

show variables like "%version%" 명령어를 통하여 MySQL의 버전을 확인했다.

 

 

[그림 16] 데이터베이스 목록 확인 후 데이터베이스, 테이블 생성

show databases 명령어로 현재 데이터베이스 목록을 확인했고, hw_for_cloud라는 이름의 데이터베이스를 생성했다.

그리고 vm1에 연결할 response1 테이블vm2에 연결할 response2 테이블을 생성했다.
각각은 id, firstname, lastname, email, submitdate 컬럼으로 구성되어 있다.

 

 

[그림 17] 생성 테이블 확인

show tables 명령어로 테이블이 문제 없이 생성된 것을 확인했다.

 

 

[그림 18] response1 테이블에 데이터 추가

response1 테이블에 레코드를 추가(insert)한다. 

lastname이 Lee 인 점을 기억한다.

 

 

[그림 19] response2 테이블에 데이터 추가

response2 테이블에 레코드를 추가(insert)한다.

lastname이 Kim 인 점을 기억한다.

 

 

[그림 20] MySQL 의 root 계정 관련 설정

처음 MySQL을 설치하면 root 계정을 통해 들어갈 때 비밀번호 검사를 하지 않는다.

이는 나중에 외부에서 DB로 연결할 때 root 계정을 인식하는데 문제가 있을 수 있으므로 root 계정의 비밀번호를 설정했다. (학생 본인은 root 계정의 비밀번호를 'root'로 설정했음)

 

 

[그림 21] 외부로부터 해당 DB 접속을 허용

모든 데이터베이스의 모든 테이블에 있어서 root에 대한 접근 권한을 모든 호스트로 지정한다.

 

 

[그림 22] 사용자들의 권한 확인


<2 대의 웹 서버 가상머신에서의 설정>

[그림 23] vm1-eastus 가상머신의 php 버전 확인

첫 번째 가상머신의 PHP 버전을 확인한다. (버전 확인이 안된다면 php 설치)

PHP 7.2.24 버전임을 알 수 있다.

 

 

[그림 24] vm2-eastus 가상머신의 php 버전 확인

두 번째 가상머신의 PHP 버전을 확인한다. (버전 확인이 안된다면 php 설치)

첫 번째 가상머신과 똑같이 PHP 7.2.24 버전임을 알 수 있다.

 

 

[그림 25] vm1-eastus의 IP 주소 확인

ifconfig를 통해 IP 주소를 확인한다.

vnet-eastus-swucloudhw(10.0.0.0/16)에 속하는 vm1은 10.0.3.4 라는 IP 주소를 가진다.

 

 

[그림 26] vm2-eastus의 IP 주소 확인

ifconfig를 통해 IP 주소를 확인한다.

vnet-eastus-swucloudhw(10.0.0.0/16)에 속하는 vm2는 10.0.4.4 라는 IP 주소를 가진다.

 

 

[그림 27] vm3-eastaust에서 mysql 연결 상태를 확인

 

[그림 28] vm1-eastus의 기본 화면이 될 php 파일

 

vm1-eastus의 /var/www/html 의 디렉토리에 기본으로 뜨는 페이지가 될 php 파일을 작성한다.

그 내용에는 DB 연결에 필요한 정보도 포함된다.

(username : root, password : root, 연결할 데이터베이스 : hw_for_cloud, 연결할 테이블 : response1)

 

중요한 포인트 : [그림 5] 에서 확인한 vm3forDB의 사설 IP 주소(172.0.3.4)와 연결시켜 준다. (VPN을 구축했기 때문에 사설 IP를 이용하는 것)

 

 

 

[그림 29] vm2-eastus의 기본 화면이 될 php 파일

 

vm2-eastus의 /var/www/html 의 디렉토리에 기본으로 뜨는 페이지가 될 php 파일을 작성한다.

내용은 vm1-eastus에서 작성한 것과 같지만 연결할 테이블이 response2 라는 점이 다르다.

 


<웹 서비스를 외부에서 접속>

 

에러

[그림 30] 웹 브라우저를 통해 vm1-eastus와 vm2-eastus 의 공인 IP 주소로 접속

웹 브라우저를 통해 vm1-eastus의 공인 IP 주소 40.117.128.66  그리고 vm2-eastus의 공인 IP 주소 52.149.217.157로 접속을 시도하였으나 SQLSTATE[HY000] [2002] Connection refused 에러가 떴다.

 

 

[그림 31] 에러 해결을 위해 mysqld.cnf 파일 수정

 

[그림 32] mysqld.conf 파일

bind-address = 127.0.0.1 이라고 되어있는 설정을 주석처리 해준다.

MySQL은 기본적으로 localhost(127.0.0.1)에서 접근 가능하기 때문에 외부에서 접근하기 위해서는 bind-address를 풀어줘야 한다.

 

 

[그림 33] 웹 브라우저를 통해 vm1-eastus 공인 IP 주소로 접속

response1 테이블과 연결되어 있는 첫 번째 가상머신의 공인 IP 40.117.128.66 로 접속하면 우리가 입력했던 레코드가 보인다. (lastname = Lee)

 

 

[그림 34] 웹 브라우저를 통해 vm2-eastus 공인 IP 주소로 접속

response2 테이블과 연결되어 있는 두 번째 가상머신의 공인 IP 52.149.217.157 로 접속하면 우리가 입력했던 레코드가 보인다. (lastname = Kim)

 


<2 대의 웹 서버 로드밸런싱 설정>

[그림 35] AGW 설정

AGW(Application Gateway)는 웹 트래픽 로드밸런서이다. 

HTTP/HTTPS 수신기의 Routing Rule을 통해 front-end와 back-end를 연결시켜준다. 

 

만들었던 2대의 웹 서버 가상머신(vm1-eastus & vm2-eastus)에 대해 로드밸런싱을 시켜줄 것이므로 

AGW의 가상 네트워크를 2대의 웹 서버 가상머신들의 가상 네트워크와 똑같이 설정해준다. (vnet-eastus-swucloudhw)

서브넷은 2대의 웹 서버와 겹치지 않게 snet03-vnet-eastus-swucloudhw 를 만들어 설정한다.

 

이 AGW의 Front end 주소가 52.188.92.240 인 점에 주목한다.

 

 

[그림 36] back-end pool 설정

AGW의 요청을 받아 처리할 백 앤드 풀에 웹 서버 vm 2대를 대상으로 설정하여 로드밸런싱을 받는다.

 

 

[그림 37] AGW의 동작 과정

 

 

[그림 38] 52.188.92.240 접속 시

웹 브라우저를 통해 52.188.92.240에 접속하니 vm1-eastus의 공인 IP 주소로 접속했던 결과와 똑같이 나온다.

 

[그림 39] 새로고침 시

새로고침을 하니 vm2-eastus의 공인 IP 주소로 접속했던 결과와 똑같이 나온다.

AGW가 성공적으로 로드밸런싱을 수행하고 있다는 것이다.

 


<SSH 연결 차단을 위한 설정>

[그림 40] NSG 설정

NSG(Network Security Group) 설정 추가를 한다.

그 중 인바운드 보안 규칙을 추가해 2대의 웹 서버 가상머신 중 한 대의 가상머신(vm1-eastus)에만 SSH 연결 요청을 차단할 것이다.

 

ssh 차단

[그림 41] vm1-east 에 SSH 연결 요청

NSG에서 vm1-eastus에 대해 SSH로 접속을 시도했으나 Connection timed out 이 뜬다.

성공적으로 인바운드 규칙이 적용된 것이다.

 


<네트워크 구조>

[그림 42] vnet-eastus-swucloudhw의 전체적인 네트워크 구조

 

[그림 43] vnet-eastaust-swucloudhw의 전체적인 네트워크 구조

 

뿌 듯

+ Recent posts