[2023-04-18 화] Azure 가상머신 생성, 디스크, 파일 스토리지, 이미지
- 목차 -
1.
처음 시작하면 '비용관리+청구'를 눌러서 비용을 확인해보자
Azure의 경우 퍼블릭IP를 분리하고 프라이빗IP만 있어도 인터넷 연결이 되었다
ping은 안됐지만 인터넷은 되었다. 퍼블릭IP를 분리하였지만 다른 경로를 거쳐서 인터넷 연결이 되었다.
어디 경로로 인터넷 접속이 나가는지 한번 봐보자
리소스 그룹 만들기
리소스 그룹 'user01-rg'
영역 '(Asia Pacific) Australia East'
web01 가상머신 만들기
리소스 그룹 'user01-rg'
가상 머신 이름 'user01-web01'
지역 'Austalia East'
가용성 옵션 '가용성 영역'
가용성 영역 'Zone 1'
보안 유형 '표준'
이미지 'CentOS-based 7.9 - x64 Gen2'
인증 형식 'SSH 공개 키'
사용자 이름 'azureuser'
SSH 공개 키 원본 '새 키 쌍 생성'
키 쌍 이름 'user01-key'
공용 인바운드 포트 선택 'HTTP(80), HTTPS(443), SSH(22)'
디스크 설정은 그냥 넘어감
가상 네트워크 'user01-web01-vnet'
서브넷 'default(10.2.0.0/24)'
공용 IP 'user01-web01-ip' // Azure만의 특징. ip를 이름으로 다룰 수 있다
네트워크 인터페이스가 없으면 가상 머신을 만들면서 네트워크 인터페이스를 만든다.
바로 고급탭으로 넘어가서 web서버로 만들어주는 사용자 지정 데이터(스크립트)를 입력해준다
#!/bin/bash
yum install -y httpd
systemctl enable --now httpd
echo "<h1>web01</h1>" > /var/www/html/index.html
0.0132 USD/hr 비용은 인스턴스의 CPU와 Memory에 대한 금액이고 디스크, 네트워킹 등에 대한 다른 비용이 아니다
프라이빗 키 다운로드 및 리소스 만들기'를 클릭하면 키가 다운로드되고 인스턴스를 만들기 시작한다
user01-key (1).pem으로 저장되었는데 이름을 user01-key.pem으로 바꿔준다
2.
web02 가상머신 만들기
리소스 그룹 'user01-rg'
가상 머신 이름 'user01-web02'
지역 'Austalia East'
가용성 옵션 '가용성 영역'
가용성 영역 'Zone 2'
보안 유형 '표준'
이미지 'Ubuntu Server 20.04 LTS x64 Gen2'
SSH 공개 키 원본 'Azure에 저장된 기존 키 사용'
저장된 키 'user01-key'
인바운드 포트 선택 'HTTP(80), HTTPS(443), SSH(22)'
네트워킹 탭을 보면 '공용 IP'를 새로 만든다
바로 고급탭으로 넘어가서 web서버로 만들어주는 사용자 지정 데이터(스크립트)를 입력해준다
web03 가상머신 만들기
리소스 그룹 'user01-rg'
가상 머신 이름 'user01-web03'
지역 'Austalia East'
가용성 옵션 '가용성 영역'
가용성 영역 'Zone 3'
보안 유형 '표준'
이미지 '[smalldisk] Windows Server 2019 Datacenter x64 Gen2'
윈도우 서버는 CPU, Memory 성능을 높게 설정한다
윈도우는 키방식이 아닌 아이디/비밀번호 방식으로 접속한다
사용자 이름 'azureuser'
인바운드 포트 선택 'HTTP(80), HTTPS(443), SSH(22), RDP(3389)'
네트워킹탭에서 공용 IP를 새로만든다. 최대 3개까지 만들 수 있다
CPU, Memory의 성능을 높였기 때문에 금액이 많이 올랐다
할당량을 검색하고 들어가서 내가 사용하고 있는 할당량을 볼 수 있다
퍼블릭 IP는 최대 3개까지 할당받을 수 있는 것을 확인할 수 있다
접속테스트
가상머신 공용 IP를 확인하고 웹접속을 시도해본다
접속이 잘된다
web03은 아직 세팅을 하지 않았으므로 web01 web02만 테스트했다
공용 IP 분리하기
web01 web02의 공용 IP를 분리한다. 외부와의 통신을 끊고 내부 통신
web03을 통해서 web01과 web02 가상머신에 접근할 것이다. AWS의 배스천호스트 기능을 한다
web03 가상 머신 rdp원격 접속하기
web03 가상머신에 Chrome.exe파일 복사 붙여넣기
3.
web03 가상머신에 크롬 설치
다 같은 네트워크에 있기 때문에 web03 가상머신에서 web01 web02로 접속이 가능하다
web03에서 web01 web02로 SSH 접속하기 위해 키를 복사 붙여넣기한다
WEB03은 Bastion Host 역할을 한다.(경유지)
ssh -i user01-key.pem azureuser@10.2.0.4 # web01 SSH 접속
ssh -i user01-key.pem azureuser@10.2.0.5 # web02 SSH 접속
web03 IIS(웹서버) 설치하기
웹서버가 설치 완료되었으면 탐색기 경로에서 index.html 파일을 생성한다
web03 접속테스트
WIN10 호스트 크롬창에서 web03 웹페이지에 접속이 된다. web03은 퍼블릭 IP가 있기 때문에 외부와 통신이 된다
web01 web02는 ping이 안나가지만 curl명령으로 웹접속은 가능하다
퍼블릭 IP가 없는데 인터넷이 가능한 이유? 어딘가를 경유해서 나가고 있다. 경유지는 어딜까?
curl ipconfig.io는 에코서비스로 web01이 인터넷을 사용하기 위해 퍼블릭 IP를 반환해준다
web01이 ipconfig.io에 접속하면 퍼블릭 IP를 반환시켜준다. 반환시켜주는 퍼블릭 IP는 뭐냐? Azure가 내부에서 외부로 나갈수 있도록 해놓은 설정이다
Azure는 NAT Gateway 기능이 자동적으로 하게 해주었다. AWS에 비해 비용 효율적인 부분이 될 수 있다
또한 Azure가 가상 머신을 패치를 위해서 인터넷을 연결해두었다고 이해하면 된다
4.
같은 가용영역에 있어야만 가상머신과 디스크를 붙일 수 있다
직접 연결할 수 없으므로 스냅샷을 만들고 다른 가용영역으로 보내 다시 디스크로 만들어서 붙인다
web01-add 디스크 만들고 마운트하기
리소스 그룹 'user01-rg'
디스크 이름 'user01-web01-add'
가용성 영역 'Zone 1'
크기 '1GiB'
web01 가상머신에 붙이기
윈도우 가상머신 web01 ssh에서 lsblk 명령으로 디스크가 붙은 것을 확인
파일시스템 ext4로 포맷
sudo mkfs -t ext4 /dev/sdc
마운트하기
sudo mount /dev/sdc /mnt
df -h
윈도우 가상머신 C:\inetpub\wwwroot경로에 WIN10 호스트에 있는 azure.tar 파일 복사 붙여넣기
wwwroot 경로에 html 파일을 넣으면 웹페이지가 되고 파일을 올리면 외부에서 wget 명령으로 다운로드할 수 있다
web01 세션에서 wget명령으로 web03 서버에 있는 azure.tar파일을 다운받을 수 있다
wget http://10.2.0.6/azure.tar
html경로에 azure.tar 파일을 풀고 10.2.0.4로 접속하면 웹페이지가 뜬다
sudo tar xvf azure.tar -C /var/www/html
루트볼륨에 있는 azure.tar파일을 마운트시킨 user01-web01-add디스크에 이동시키기
sudo mv azure.tar /mnt
ls /mnt
user01-web01-add 디스크 스냅샷 찍기
리소스 그룹 'user01-rg'
이름 ''user01-web01-add-snapshot'
스냅샷 유형 '전체' // 증분은 마지막 스냅샷의 차이를 기준으로 디스크의 부분 복사본을 만들어 스토리지 비용을 절약함
원본 유형 '디스크'
원본 디스크 'user01-web01-add'
스토리지 유형 '표준 HDD'
추가적인 설정은 없기 때문에 바로 '검토+만들기'를 클릭
스냅샷으로 디스크 만들기
user01-web01-add-snapshot-web02-add
web02에 디스크 붙이고 마운트하기
web03 가상서버 에서
포맷하면 안됨. 파일 날아간다
lsblk
sudo mount /dev/sdc /mnt
df -h
ls /mnt
5.
스토리지 계정 만들고 파일 공유하기
Azure Files(파일 스토리지 AWS FSx), Azure Blob (개체 스토리지 AWS S3) 를 사용하기 위해 스토리지 계정을 만들어야 한다
Azure 컨테이너 안에 파일들을 개체(Blob)이라고 한다
스토리지 계정 만들기
리소스 그룹 'user01-rg'
스토리지 계정 이름 'hahahahahahahahahaha' // 고유해야한다.
지역 'Australia East'
성능 '표준'
중복 '지역 중복 스토리지' // 가용 영역의 범위를 설정. 지역은 리전을 뜻함. 영역은 zone을 뜻함. 지역>영역
네트워크 액세스 '모든 네트워크에서 퍼블릭 액세스 사용' // 퍼블릭이냐 프라이빗이냐 선택
데이터 보호탭은 삭제한 실수로 인한 또는 잘못된 삭제나 수정으로부터 데이터를 보호한다.
컨테이너라고하면 오픈스택의 Swift, S3의 버킷을 떠올리면 된다. 객체스토리지
컨테이너 만들기
이름 'user01-container'
공용 액세스 수준 '프라이빗(익명 액세스 없음)' // 컨테이너 접근 수준 설정.
파일을 올려두고 누군가 다운로드 받는다면 데이터 transfer 비용이 발생한다. 주의하자
컨테이너 안에 파일 업로드하기
images폴더가 만들어지면서 안에 two-rabbit.jpg 파일이 업로드된다
폴더를 생성안하고 싶으면 그냥 업로드만 하면 됨
올린 two-rabbit.jpg 파일 다운로드. 지금은 이 계정으로 로그인해서 컨테이너의 폴더로 와야 다운로드해야한다
이 파일에 접근해보기
권한이 없어서 Error가 뜬다
액세스 수준을 변경해서 외부에 공개하기
컨테이너 안에 파일들을 개체(Blob)이라고 한다
액세스 권한을 주었기 때문에 외부에서 접근이 가능하다
index.html도 '액세스 수준 변경으로 Blob에 대한 익명 읽기 전용 액세스'로 해준다
외부에서 접근을 해보자. URL을 복사해서 웹페이지가 뜨는지 확인하기
접근이 잘된다
공유가 끝나면 '프라이빗(익명 액세스 없음)'으로 변경해줘야한다. 안그러면 전세계로 퍼져나가 비용이 나간다
6.
파일 공유 스토리지 만들기
파일 공유 스토리지는 SAMBA, AWS FSx와 유사하다
파일 공유 이름 'user01-share'
할당량(최댓값) 안에서 내가 사용한 만큼만 지불한다.
할당량은 '할당량 편집'을 통해 변경할 수 있다. 지금은 안바꿈
'연결'을 통해서 가상머신과 연결할 수 있다
윈도우 가상머신과 연결하기 위해 스크립트를 복사한다
윈도우 가상머신에서 powershell을 관리자 모드로 실행
스크립트를 입력하도록 New Script 아이콘을 눌러준다
스크립트 붙여넣기
Ctrl + A를 누르고 Run Script를 누르면 설치가 진행된다
설치가 끝나고 탐색창을 가보면 네트워크 드라이버가 생성된 것을 확인할 수 있다
윈도우 가상머신에 web01 세션에 스크립트 붙여넣기.
df -h 로 마운트된 것을 확인할 수 있다
업로드시켰던 파일을 확인
Azure 이미지 서비스
이미지를 만들어서 보다 빠르게 가상 머신을 만든다
스토리지 계정에 블록 디스크(OS탑재)로 저장되는 가상 머신으로 이미지 리소스를 만들 수 있다
여러 가상 머신을 만드는 데 이미지를 사용할 수 있다
web01 가상머신을 이미지로 만들기
Azure Compute Gallery로 이미지 공유 '아니요, 관리형 이미지만 캡쳐합니다' // 다른 사용자와 이미지를 공유하지 않음
가상머신을 이미지로 만들게 되면 해당 가상 머신은 이용할 수 없는 상태가 된다
이미지를 가지고 가상 머신을 빠르게 만드는 용도이다. 백업으로 사용하진 않는다.
이미지로 가상머신을 운용할 목적이 아니라 Auto Scaling을 할 때 가상 머신을 만들기 위해 사용되는 소스일 뿐이다
만들기를 누르면 이미지가 생성되면서 가상머신이 중지(poweroff)된다
7.
이미지를 이용해서 가상 머신 만들기
먼저 CPU 쿼터 때문에 중지된 web01 가상 머신을 삭제한다
Compute 리소스 할당량을 확인해보자
할당량이 남아있음을 확인할 수 있다
만든 이미지를 가지고 가상머신 만들기
가상 머신 이름 'user01-web01-image-vm'
가용성 옵션 '가용성 영역'
가용성 영역 'Zone 1'
이미지 'user01-web01-image- x64 Gen2'
모든 이미지에서 내 이미지를 선택하면 지역과 보안 유형을 바꿀 수 없게 된다
크기 'Standard_B1s - 1vcpu, 1 GiB 메모리'
SSH 공개 키 원본 'Azure에 저장된 기존 키 사용'
저장된 키 'user01-key'
인바운드 포트 선택 'HTTP(80), HTTPS(443), SSH(22)'
가상 네트워크 'user01-web01-vnet'
서브넷 'default(10.2.0.0/24)'
이미지로 만든 가상머신 접속테스트하기
web03 윈도우 가상 머신에서 10.2.0.7 웹페이지가 잘 뜨는 것을 확인할 수 있다
Azure 네트워크 서비스
Azure Virtual Network는 가상 머신과 애플리케이션을 실행하기 위한 격리되고 안전한 환경을 제공한다
개인 IP 주소를 사용하고 서브넷, 액세스 제어 정책 등을 정의할 수 있다
Virtual Network를 통해 Azure를 데이터 센터처럼 사용할 수 있다
Azure Virtual Network IP 대역을 배정받은 10.20.0.0/16로 구축
가상 네트워크 만들기
리소스 그룹 'user01-rg'
가상 네트워크 이름 'user01-vnet'
지역 'Australia East'
기존에 default로 만들어지는 IP 주소 대역대는 삭제
IP주소공간을 추가하여 10.20.0.0/16을 추가한다
서브넷을 20비트로 설정하여 총 3개의 서브넷을 만들어준다
디폴트로 생성된 가상 네트워크 주소 공간은 삭제한ㄷ
8.
가상 네트워크에 가상 머신 만들기
서브넷끼리는 라우팅테이블이 없으면 통신이 안된다
10.20.0.0을 목적지로 하고 target을 Local로 하는 라우팅 정보를 자동으로 세팅을 해준다
만든 vnet에 가상머신을 만들기
새로운 가상머신을 만들기 전에 만들어놓았던 가상머신들을 삭제한다. CPU쿼터 때문
web01 web02 web03을 차례로 삭제한다
web01 가상머신 만들기
리소스 그룹 'user01-rg'
가상 머신 이름 'user01-web01'
가용성 옵션 '가용성 영역'
가용성 영역 'Zone 1'
이미지 'user01-web01-image'
크기 'Standard B1s'
가상 네트워크 'user01-vnet'
서브넷 'user01-vnet-subnet01(10.20.0.0/20)'
web02 가상머신 만들기
가상 네트워크 'user01-vnet'
서브넷 'user01-vnet-subnet02(10.20.16.0/20)'
현재 생성한 web01 web02 가상머신에 공용 IP 주소가 없다
공용 IP 주소 부여하기
공용 IP를 각각 web01 web02 가상머신의 네트워크 인터페이스와 연결해준다
MobaXterm 에서 접속테스트 해보기
web01 퍼블릭 IP를 이용하여 SSH 접속
web01 가상머신은 10.20.0.4를 할당받았다
web02 퍼블릭 IP를 이용하여 SSH 접속
web02 가상머신은 10.20.16.4를 할당받았다
라우팅 테이블이 기본적으로 세팅되어 있기 때문에 내부 가상 머신간에 통신이 가능하다
마무리
web01 web02의 인스턴스를 poweroff시킨다