Microsoft Azure, 가상 컴퓨터의 외부/내부 IP 주소에 대한 고정 주소 설정 및 가상 네트워크내 서브넷간 이동

image

Microsoft Azure에 생성한 가상 컴퓨터(VM)은 2가지 형태의 IP 주소를 가지고 있습니다. 외부에서 접근할 때 사용하는 공용 VIP 주소(VIP)와 내부에서 사용하는 주소(DIP)가 있죠. 우선 VIP의 경우에는 가상 컴퓨터 앞단에 Azure 로드 밸런서(부하 분산을 위한)가 있고, 이를 통해서 포트 맵핑 형태로 내부의 가상 컴퓨터와 연결되게 됩니다. 예를 들어, 생성한 VM인 KOALRA-TEST의 경우, 원격 데스크톱 포트(일반적으로 3389)가 공용 포트에는 51765가 배정되어 있죠. 이 경우 23.100.97.42(가상 VM의 VIP, 첫번째 그림 참고)의 51765를 통해서 접근을 하게 되면, 원격 데스크톱 연결이 가능합니다.

image

이에 대한 연결은 23.100.97.42:51765라고 원격 데스크톱 클라이언트에 입력하면 되죠.

image

공용 IP 주소의 경우에는 VM을 생성할 때, 배정되게 됩니다. (아주 정확하게는 VM 생성시 만들어지는 클라우드 서비스에서 DNS 이름과 IP 주소에 대한 연결을 진행하게 되죠.) VM을 생성할 때, 클라우드 서비스에 대한 생성 여부를 묻는 이유가 VM의 IP 주소와 DNS 이름에 대한 연결을 처리하는 Azure LB에 대한 부분입니다. 이에 VM 생성 실패가 발생했을 경우에, 클라우드 서비스를 삭제해주지 않으면, 동일 이름의 DNS가 생성되지 않는 것도 이 때문입니다.

image

만약 새로운 DNS 이름이 아닌, 동일한 외부 DNS 이름과 IP 주소를 사용하면서 로드 밸런싱이 필요한 경우에는 가상 컴퓨터 생성시, 같은 클라우드 서비스에 들어가야 합니다. 이후 끝점(Endpoint)에 대한 로드 밸런싱 구성으로 부하를 분산처리할 수 있죠. (이 역시 다른 포스팅으로 분리해서, 가용성 집합과 함께 살펴보겠습니다.)

image

Microsoft Azure에서 생성되는 IP 주소는 기본적으로 모두 유동 IP 형태를 취하게 됩니다. 이는 매번 동일한 IP 주소를 배정하지 않는다는 것이며, 외부 접근시 사용하는 VIP 역시, 변경될 수 있습니다. VM으로 외부 접근시, IP 주소가 아닌, DNS 이름 형태(예, Koalra-Test.CloudApp.Net)를 이용해야 하는 것도 이러한 이유때문이었습니다. VM의 내부 네트워크에서 사용하는 IP 주소(DIP)도 자동으로 배정됩니다.

Microsoft Azure를 사용하는 조직에서 Azure에서 운영되는 VM에 대해서 접근 권한을 네트워크 레벨에서 조정하려면, 지정된 범위, 혹은 지정된 고정 IP 주소 형태가 필요합니다. 이를 위해서 Microsoft Azure는 Reserved IP라고 부릅니다.

image

Reserved IP를 사용하게 되면, 별도의 이용 요금이 과금됩니다. 이에 대한 정확한 가격 정보는 https://azure.microsoft.com/en-us/pricing/details/reserved-ip-addresses/ 를 참고하시면 좋을 것 같습니다.(5개까지는 무료) Reserved IP에 대한 설정을 하려면 Azure용 PowerShell을 통해서만 현재 가능합니다.

image

기본적으로 새로운 Reserved IP를 만드는 Cmdlet은 New-AzureReservedIP입니다. IP 주소에 대한 이름(ReservedIPName), 그리고 이에 대한 설명(Label), 마지막으로 IP 주소의 사용 지역을 명시합니다.

image

이렇게 생성된 VIP 주소는 23.100.97.250이었습니다. 이에 대해서 기존 사용하던 VM에는 현재 반영할 수 없습니다.(공용 클라우드 서비스 특성상 차후 업데이트될 수도 있습니다만..) 신규 VM 생성시 이를 반영해줘야 합니다. 또한 신규 VM 생성시, 현재 관리 포탈에서는 ReservedIP를 지정하면서 생성할 수 없고, Azure PowerShell을 이용해야 합니다. 일반적인 Microsoft의 개발 순서가 하단에 Shell을 먼저 개발하고, 이에 대한 GUI를 입혀가는 형태이므로, 기술에 대한 빠른 제공을 위해, 먼저 Shell부터 오픈을 하고, GUI를 연결하는 순서를 많이 밟습니다.

Azure PowerShell을 통해 VM을 생성하려면, 제공되는 VM 이미지를 선택해야 합니다.(관리 포탈에서 VM 생성시 선택하는 OS나 서비스) Get-AzureVMImage Cmdlet을 이용하면 가능합니다.

image 

이미지는 매월 업데이트가 진행되므로, 실행시 적절한 이미지를 선택해야 한다는 것은 유념해야 합니다. $Images 배열에 들어간 가장 하단의 이미지를 선택하려면 $Images[-1]을 사용하면 됩니다.

image

Cmdlet이 조금 복잡하지만, 연결성이 있는 형태입니다.

  1. VM의 이름, 인스턴스 크기, 그리고 사용할 이미지를 선택합니다. (New-AzureVMConfig)
  2. VM의 Provisioning(생성시)에서 사용할 OS 정보, 관리자 계정, 암호를 지정합니다. (Add-AzureProvisioningConfig)
  3. (옵션) VM이 배치될 가상 네트워크내 서브넷을 지정합니다. (Set-AzureSubnet)
  4. 마지막으로 IP 주소와 DNS 이름을 연계하는 클라우드 서비스에 대한 생성시 필요한 서비스 이름, ReservedIP, 가상 네트워크 이름(서브넷을 지정했을 경우) 그리고 위치를 지정합니다. (New-AzureVM)

또한 VM을 Azure PowerShell로 생성시, 구독(Subscription)에 연결된 저장소(Storage)가 없다는 에러가 발생하면 Set-AzureSubscription을 이용해서, 저장소 계정을 하나 연결해줘야 합니다. VM과 관련된 파일들을 어느 저장소 계정에 저장할지에 대한 지정입니다.

image

image

생성된 VM은 앞서 지정된 ReservedIP 주소를 사용하고 있습니다.

내부 IP 주소(DIP)를 유동 형태가 아닌 고정 형태로 지정하는 것은 현재 이용중인 VM에도 가능합니다. DIP가 고정으로 필요한 경우는 인프라 서버(대표적으로 AD의 DC), 데이터베이스 서버등과 같이 IaaS 인프라에서 IP 주소가 변경되지 않는 것이 더 효율적인 경우에 사용하게 됩니다. DIP 주소에 대한 고정 설정도 Azure PowerShell을 이용합니다.

image

우선 사용하고 있는 가상 네트워크에 DIP가 사용 중인지 확인해야 합니다. 이를 위해 Test-AzureStaticVNetIP Cmdlet을 사용합니다.

image

DIP 주소 설정은 VM을 종료하지 않고도 진행이 가능합니다. (다만 적용이 완료되면, VM이 재시작됩니다.) 신규 VM 생성시 이를 반영해서 적용하려면, VM 생성 PowerShell의 3단계와 4단계 사이에, Set-AzureStaticVNetIP Cmdlet을 추가해주면 됩니다.

image

DIP 주소가 변경된 모습입니다.

image

마지막으로 살펴볼 내용은 VM의 서브넷을 바꿔야하는 경우입니다. 가상 네트워크의 여러 서브넷 중, 서버의 종류 별로 서브넷을 지정하거나, 최초 디자인시에 적용한 서브넷이 변경될 경우, Microsoft Azure내 VM의 서브넷을 이동시킬 수 있습니다. 현재 KOALRA-TESTVM은 KOALRA-JAPANEAST 가상 네트워크의 Subnet-1에 배치되어 있습니다.

image

서브넷을 변경하는 것 역시, Azure PowerShell로 진행해야 합니다. 더불어, DIP를 고정 주소 형태로 지정했다면, 이동 전에 DIP를 해제해야 합니다. (Remove-AzureStaticVNetIP Cmdlet)

image

이후, Set-AzureSubnet Cmdlet을 이용해서, 변경된 서브넷을 지정합니다. 이 역시, VM이 구동중에 가능하나, 작업이 반영되면, VM이 재시작됩니다.

image

관리 포탈에서 변경된 서브넷을 확인할 수 있습니다.

image

조금 길었던 포스팅입니다. 네트워크와 관련된 설정이어서, 현재는 Azure PowerShell을 이용하는 부분이 많았습니다. Cmdlet의 구성이 아주 복잡한 형태가 아니니, 살짝만 관심있게 보시면, 이해가 되실 것으로 생각합니다.