Microsoft MVP성태의 닷넷 이야기
개발 환경 구성: 159. Azure - 네트워크 포트 여는 방법 [링크 복사], [링크+제목 복사],
조회: 27554
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 3개 있습니다.)

Azure - 네트워크 포트 여는 방법


Azure에 올라가는 서비스 유형에 따라서 포트를 여는 방법이 다릅니다.

우선, Virtual Machine 서비스의 경우에는 기본적으로 모든 포트가 막혀 있습니다. 80 포트조차도 막혀 있으므로 사용하려는 네트워크 서비스가 있다면 일일이 '방화벽' 정책에서 열어줘야 합니다.

다음은 명령행에서 80번 포트를 열어주는 예제입니다.

netsh advfirewall firewall add rule name="My Web Service" action=allow protocol=TCP dir=in localport=80

VM 서비스는 사실, 일반적인 윈도우즈의 방화벽 정책과 별반 다르지 않기 때문에 그다지 새로울 것이 없습니다.

문제는 Web Role 형식으로 올라가는 Cloud Service에서 포트를 열고 싶을 때입니다. 사실, "Web Role" 형식의 경우, 서비스하는 호스트들이 자유롭게 "Scale out" 될 수 있는 구조이기 때문에 해당 VM에 RDP로 접속해서 그때마다 포트를 열어준다는 것은 매우 비효율적입니다.

물론, 이런 문제를 고려해서 방법이 제공됩니다.

Azure 프로젝트의 ServiceDefinition.csdef 파일에 서비스가 사용할 포트를 미리 알려줄 수가 있는데요.

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition  ...[생략]...>
  <WebRole name="WebApplication1" vmsize="Small">
    <Sites>
      <Site name="Web">
        <Bindings>
          <Binding name="Endpoint1" endpointName="Endpoint1" />
        </Bindings>
      </Site>
    </Sites>
    <Endpoints>
      <InputEndpoint name="Endpoint1" protocol="http" port="80" />
      <InputEndpoint name="MyCustomPort" protocol="tcp" port="9500"/>
    </Endpoints>
    <Imports>
        ...[생략]...
    </Imports>
  </WebRole>
</ServiceDefinition>

위와 같이 Endpoints에 InputEndpoint로 추가되어야 할 포트와 프로토콜 정보를 입력해 주면 됩니다. 재미있는 것은, 위와 같이만 해주었다고 해서 방화벽에 있는 포트까지 열리는 것은 아니라는 점입니다.

이 때문에, Azure Cloud 서비스가 설치될 때 함께 실행해 줄 명령행 프로그램을 만들어 주어야 합니다. 이 역시, ServiceDefinition.csdef 파일에 지정을 해주는데요.

<WebRole name="WebApplication1" vmsize="Small">
    ...[생략]...
    <Startup>
        <Task commandLine="startup_azure.cmd" executionContext="elevated" taskType="simple" />
    </Startup>
</WebRole>

Task 노드에 임의의 이름으로 추가되는 startup_azure.cmd라는 파일은 "Web Role"로 올라가는 ASP.NET 웹 프로젝트에 함께 포함되어 있어야 하고, 반드시 웹 프로젝트의 빌드 파일들이 놓이는 /bin 폴더에 같이 있어야 합니다. (보통, 이 파일은 "Copy to Output Directory" 값을 "Copy if newer" 또는 "Copy always" 설정으로 놓습니다.)

설정에 관련된 좀 더 자세한 사항은 다음의 글을 참조합니다.

How to configure and run startup tasks for an Azure Cloud Service (classic)
; https://docs.microsoft.com/en-us/azure/cloud-services/cloud-services-startup-tasks

Introduction to Windows Azure Startup Tasks
; http://blog.smarx.com/posts/introduction-to-windows-azure-startup-tasks

결국, VM 서비스와 마찬가지로 startup_azure.cmd 파일에서 방화벽 포트를 동일하게 열어줄 수 있습니다.

netsh advfirewall firewall add rule name="NewPort1" action=allow protocol=TCP dir=in localport=9500




참고로, Azure Web Role 서비스가 설치되는 VM 설정 중에 (개인적으로) 이상한 부분이 하나 있는데요. 바로 "World Wide Web Publishing Service" 서비스의 시작 유형이 "Automatic"이 아닌 "Manual"로 되어 있다는 점입니다. 그래서, 장애 조치 등의 이유로 VM에 RDP로 접속한 다음 "iisreset" 명령어를 내리면 서비스가 안 되는 현상이 발생합니다. 즉, "iisreset"만 해주면 안되고 "서비스 관리자"에 가서 "W3SVC" 서비스를 명시적으로 시작해 주어야 하는 불편함이 있는데요.

기왕에 startup_szure.cmd 파일을 설정해야 하는 상황이라면... ^^ W3SVC 서비스를 "Automatic" 시작 유형으로 변경해 두는 것도 좋겠습니다. (경험상!)

sc.exe config W3SVC start= auto

어차피, 위의 명령어 하나만 더 추가해 주면 되기 때문에.




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 7/10/2021]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2012-07-27 03시03분
[박중석] 'ServiceDefinition.csdef'에서 설정한 Port를 추가로 열어줘야 하는 것과 'World Wide Web Publishing Service'가 Automatic이 아닌 것은 몰랐네요. 저도 한번 확인해 보고 다시 댓글 남기겠습니다. 감사합니다.
[guest]

... 46  47  48  49  50  51  52  53  [54]  55  56  57  58  59  60  ...
NoWriterDateCnt.TitleFile(s)
12590정성태4/9/202116898.NET Framework: 1033. C# - .NET 4.0 이하에서 Console.IsInputRedirected 구현 [1]
12589정성태4/8/202118121.NET Framework: 1032. C# - Environment.OSVersion의 문제점 및 윈도우 운영체제의 버전을 구하는 다양한 방법 [1]
12588정성태4/7/202119855개발 환경 구성: 565. PowerShell - New-SelfSignedCertificate를 사용해 CA 인증서 생성 및 인증서 서명 방법
12587정성태4/6/202121132개발 환경 구성: 564. Windows 10 - ClickOnce 배포처럼 사용할 수 있는 MSIX 설치 파일 [1]
12586정성태4/5/202118004오류 유형: 710. Windows - Restart-Computer / shutdown 명령어 수행 시 Access is denied(E_ACCESSDENIED)
12585정성태4/5/202116975개발 환경 구성: 563. 기본 생성된 kubeconfig 파일의 내용을 새롭게 생성한 인증서로 구성하는 방법
12584정성태4/1/202118155개발 환경 구성: 562. kubeconfig 파일 없이 kubectl 옵션만으로 실행하는 방법
12583정성태3/29/202119045개발 환경 구성: 561. kubectl 수행 시 다른 k8s 클러스터로 접속하는 방법
12582정성태3/29/202118452오류 유형: 709. Visual C++ - 컴파일 에러 error C2059: syntax error: '__stdcall'
12581정성태3/28/202118408.NET Framework: 1031. WinForm/WPF에서 Console 창을 띄워 출력하는 방법 (2) - Output 디버깅 출력을 AllocConsole로 우회 [2]
12580정성태3/28/202116259오류 유형: 708. SQL Server Management Studio - Execution Timeout Expired.
12579정성태3/28/202116871오류 유형: 707. 중첩 가상화(Nested Virtualization) - The virtual machine could not be started because this platform does not support nested virtualization.
12578정성태3/27/202117309개발 환경 구성: 560. Docker Desktop for Windows 기반의 Kubernetes 구성 (2) - WSL 2 인스턴스에 kind가 구성한 k8s 서비스 위치
12577정성태3/26/202118938개발 환경 구성: 559. Docker Desktop for Windows 기반의 Kubernetes 구성 - WSL 2 인스턴스에 kind 도구로 k8s 클러스터 구성
12576정성태3/25/202116984개발 환경 구성: 558. Docker Desktop for Windows에서 DockerDesktopVM 기반의 Kubernetes 구성 (2) - k8s 서비스 위치
12575정성태3/24/202115554개발 환경 구성: 557. Docker Desktop for Windows에서 DockerDesktopVM 기반의 Kubernetes 구성 [1]
12574정성태3/23/202121096.NET Framework: 1030. C# Socket의 Close/Shutdown 동작 (동기 모드)
12573정성태3/22/202118510개발 환경 구성: 556. WSL 인스턴스 초기 설정 명령어 [1]
12572정성태3/22/202117807.NET Framework: 1029. C# - GC 호출로 인한 메모리 압축(Compaction)을 확인하는 방법파일 다운로드1
12571정성태3/21/202115824오류 유형: 706. WSL 2 기반으로 "Enable Kubernetes" 활성화 시 초기화 실패 [1]
12570정성태3/19/202121131개발 환경 구성: 555. openssl - CA로부터 인증받은 새로운 인증서를 생성하는 방법
12569정성태3/18/202121488개발 환경 구성: 554. WSL 인스턴스 export/import 방법 및 단축 아이콘 설정 방법
12568정성태3/18/202114819오류 유형: 705. C# 빌드 - Couldn't process file ... due to its being in the Internet or Restricted zone or having the mark of the web on the file.
12567정성태3/17/202116876개발 환경 구성: 553. Docker Desktop for Windows를 위한 k8s 대시보드 활성화 [1]
12566정성태3/17/202116697개발 환경 구성: 552. Kubernetes - kube-apiserver와 REST API 통신하는 방법 (Docker Desktop for Windows 환경)
12565정성태3/17/202113484오류 유형: 704. curl.exe 실행 시 dll not found 오류
... 46  47  48  49  50  51  52  53  [54]  55  56  57  58  59  60  ...