Azure App Service 가상 네트워크 통합 문제 해결

이 문서에서는 가상 네트워크와 통합되는 Azure App Service 연결 문제를 해결하는 데 사용할 수 있는 도구에 대해 설명합니다.

참고

가상 네트워크 통합은 App Service Docker Compose 시나리오에서 지원되지 않습니다. 프라이빗 엔드포인트가 있는 경우 액세스 제한 정책은 무시됩니다.

가상 네트워크 통합 확인

연결 문제를 해결하려면 먼저 가상 네트워크 통합이 올바르게 구성되었는지 여부와 개인 IP가 App Service 계획의 모든 인스턴스에 할당되었는지 확인해야 합니다.

이렇게 하려면 다음 방법 중 하나를 사용합니다.

Kudu 디버그 콘솔에서 개인 IP 확인

Kudu 콘솔에 액세스하려면 Azure Portal 앱 서비스를 선택하고 개발 도구로 이동하여 고급 도구를 선택한 다음 이동을 선택합니다. Kudu 서비스 페이지에서 도구>디버그 콘솔>CMD를 선택합니다.

Azure Portal Kudu 서비스 페이지를 여는 방법을 보여 주는 스크린샷

URL [sitename].scm.azurewebsites.net/DebugConsole을 사용하여 Kudu 디버그 콘솔로 직접 갈 수도 있습니다.

디버그 콘솔에서 다음 명령 중 하나를 실행합니다.

Windows OS 기반 앱

SET WEBSITE_PRIVATE_IP

개인 IP가 성공적으로 할당되면 다음 출력이 표시됩니다.

WEBSITE_PRIVATE_IP=<IP address>

Linux OS 기반 앱

set| egrep --color 'WEBSITE_PRIVATE_IP'

Kudu 환경에서 개인 IP 확인

에서 Kudu 환경으로 이동하여 를 [sitename].scm.azurewebsites.net/Env 검색합니다 WEBSITE_PRIVATE_IP.

가상 네트워크 통합이 성공적으로 구성되었음을 설정한 후에는 연결 테스트를 진행할 수 있습니다.

Windows 앱에서 아웃바운드 연결 문제 해결

네이티브 Windows 앱에서는 보안 제약 조건(사용자 지정 Windows 컨테이너에서 작동)으로 인해 도구 ping, nslookuptracert 가 콘솔을 통해 작동하지 않습니다.

에서 직접 Kudu 콘솔로 [sitename].scm.azurewebsites.net/DebugConsole이동합니다.

DNS 기능을 테스트하려면 nameresolver.exe사용할 수 있습니다. 구문은 다음과 같습니다.

nameresolver.exe hostname [optional:DNS Server]

nameresolver를 사용하여 앱이 의존하는 호스트 이름을 검사 수 있습니다. 이렇게 하면 DNS로 잘못 구성된 항목이 있는지 또는 DNS 서버에 액세스할 수 없는지 테스트할 수 있습니다. 환경 변수 WEBSITE_DNS_SERVER 및 WEBSITE_DNS_ALT_SERVER 확인하여 앱이 콘솔에서 사용하는 DNS 서버를 볼 수 있습니다.

참고

nameresolver.exe 도구는 현재 사용자 지정 Windows 컨테이너에서 작동하지 않습니다.

호스트 및 포트 조합에 대한 TCP 연결을 테스트하려면 tcpping을 사용할 수 있습니다. 구문은 입니다.

tcpping.exe hostname [optional: port]

tcpping 유틸리티는 특정 호스트 및 포트에 연결할 수 있는지 알려줍니다. 호스트 및 포트 조합에서 수신 대기하는 애플리케이션이 있고 앱에서 지정된 호스트 및 포트로의 네트워크 액세스가 있는 경우에만 성공을 표시할 수 있습니다.

Linux 앱에서 아웃바운드 연결 문제 해결

에서 직접 Kudu로 [sitename].scm.azurewebsites.net이동합니다. Kudu 서비스 페이지에서 도구>디버그 콘솔>CMD를 선택합니다.

DNS 기능을 테스트하려면 nslookup 명령을 사용할 수 있습니다. 구문은 다음과 같습니다.

nslookup hostname [optional:DNS Server]

위의 결과에 따라 DNS 서버에 잘못 구성된 항목이 있는지 검사 수 있습니다.

참고

nameresolver.exe 도구는 현재 Linux 앱에서 작동하지 않습니다.

연결을 테스트하려면 Curl 명령을 사용할 수 있습니다. 구문은 다음과 같습니다.

curl -v https://hostname
curl hostname:[port]

가상 네트워크 호스팅 리소스에 대한 액세스 디버그

여러 가지 요인으로 인해 앱이 특정 호스트 및 포트에 도달하지 못할 수 있습니다. 대부분의 경우 다음 중 하나입니다.

  • 방화벽이 진행 중입니다. 방화벽이 있는 경우 TCP 시간 제한에 도달합니다. 이 경우 TCP 시간 제한은 21초입니다. tcpping 도구를 사용하여 연결을 테스트합니다. TCP 시간 제한은 방화벽 이외의 많은 항목으로 인해 발생할 수 있지만 여기에서 시작합니다.
  • DNS에 액세스할 수 없습니다. DNS 시간 제한은 DNS 서버당 3초입니다. 두 개의 DNS 서버가 있는 경우 시간 제한은 6초입니다. nameresolver를 사용하여 DNS가 작동하는지 확인합니다. 가상 네트워크가 구성된 DNS를 사용하지 않으므로 nslookup을 사용할 수 없습니다. 액세스할 수 없는 경우 방화벽 또는 NSG가 DNS에 대한 액세스를 차단하거나 중단될 수 있습니다. 사용자 지정 DNS 서버를 사용하는 일부 DNS 아키텍처는 복잡할 수 있으며 경우에 따라 시간 초과가 발생할 수 있습니다. 이 경우를 확인하기 위해 환경 변수 WEBSITE_DNS_ATTEMPTS 를 설정할 수 있습니다. App Services의 DNS에 대한 자세한 내용은 App Service DNS(이름 확인)를 참조하세요.

이러한 항목이 문제에 응답하지 않는 경우 먼저 다음과 같은 항목을 찾습니다.

지역 가상 네트워크 통합

  • 대상이 RFC1918 아닌 주소이고 모두 라우팅 을 사용할 수 없나요?
  • 통합 서브넷에서 NSG 차단 송신이 있나요?
  • Azure ExpressRoute 또는 VPN을 통과하는 경우 트래픽을 Azure로 다시 라우팅하도록 온-프레미스 게이트웨이가 구성되어 있나요? 가상 네트워크의 엔드포인트에 연결할 수 있지만 온-프레미스에는 연결할 수 없는 경우 경로를 검사.
  • 통합 서브넷에 위임을 설정할 수 있는 충분한 권한이 있나요? 지역 가상 네트워크 통합 구성 중에 통합 서브넷이 Microsoft.Web/serverFarms에 위임됩니다. VNet 통합 UI는 서브넷을 Microsoft.Web/serverFarms에 자동으로 위임합니다. 계정에 위임을 설정할 충분한 네트워킹 권한이 없는 경우 통합 서브넷에 특성을 설정하여 서브넷을 위임할 수 있는 사람이 필요합니다. 통합 서브넷을 수동으로 위임하려면 Azure Virtual Network 서브넷 UI로 이동하여 Microsoft.Web/serverFarms에 대한 위임을 설정합니다.

특정 호스트:포트 조합에 대한 액세스를 차단하는 항목을 볼 수 없기 때문에 네트워킹 문제를 디버깅하는 것은 어려운 일입니다. 몇 가지 원인은 다음과 같습니다.

  • 지점 및 사이트 간의 IP 범위에서 애플리케이션 포트에 액세스할 수 없도록 호스트에 방화벽이 설치됩니다. 서브넷을 교차하려면 공용 액세스가 필요한 경우가 많습니다.
  • 대상 호스트가 다운되었습니다.
  • 애플리케이션이 다운되었습니다.
  • IP 또는 호스트 이름이 잘못되었습니다.
  • 애플리케이션이 예상한 것과 다른 포트에서 수신 대기하고 있습니다. 엔드포인트 호스트에서 "netstat -aon"을 사용하여 프로세스 ID를 수신 대기 포트와 일치시킬 수 있습니다.
  • 네트워크 보안 그룹은 지점 및 사이트 간의 IP 범위에서 애플리케이션 호스트 및 포트에 대한 액세스를 방지하는 방식으로 구성됩니다.

앱에서 실제로 사용하는 주소를 알 수 없습니다. 통합 서브넷 또는 지점 및 사이트 간의 주소 범위에 있는 주소일 수 있으므로 전체 주소 범위에서 액세스를 허용해야 합니다.

더 많은 디버그 단계는 다음과 같습니다.

  • 가상 네트워크의 VM에 연결하고 해당 위치에서 리소스 호스트:포트에 도달하려고 시도합니다. TCP 액세스를 테스트하려면 PowerShell 명령 Test-NetConnection을 사용합니다. 구문은 다음과 같습니다.
Test-NetConnection hostname [optional: -Port]
  • VM에서 애플리케이션을 가져오고 tcpping을 사용하여 앱에서 해당 호스트 및 포트에 대한 액세스를 테스트합니다.

네트워크 문제 해결사

네트워크 문제 해결사를 사용하여 App Service 앱의 연결 문제를 해결할 수도 있습니다. 네트워크 문제 해결사를 열려면 Azure Portal 앱 서비스로 이동합니다. 진단을 선택하고 문제 해결을 선택한 다음 네트워크 문제 해결사를 검색합니다.

Azure Portal 네트워크 문제 해결사를 여는 방법을 보여 주는 스크린샷

참고

연결 문제 시나리오는 아직 Linux 또는 컨테이너 기반 앱을 지원하지 않습니다.

연결 문제 - App Service 계획의 모든 인스턴스 및 DNS 설정에 개인 IP가 할당되었는지 확인하는 등 가상 네트워크 통합의 상태 검사. 사용자 지정 DNS가 구성되지 않은 경우 기본 Azure DNS가 적용됩니다. 연결을 테스트하려는 특정 엔드포인트에 대해 테스트를 실행할 수도 있습니다.

연결 문제에 대한 실행 문제 해결사를 보여 주는 스크린샷

구성 문제 - 서브넷이 가상 네트워크 통합에 유효한 경우 이 문제 해결사를 검사.

Azure Portal 구성 문제에 대한 문제 해결사를 실행하는 방법을 보여 주는 스크린샷

서브넷/VNet 삭제 문제 - 서브넷에 잠금이 있고 VNet/서브넷 삭제를 차단할 수 있는 사용되지 않는 서비스 연결 링크가 있는 경우 이 문제 해결사에서 검사.

서브넷 또는 가상 네트워크 삭제 문제에 대한 문제 해결사를 실행하는 방법을 보여 주는 스크린샷

네트워크 추적 수집

네트워크 추적 수집은 문제를 분석하는 데 도움이 될 수 있습니다. Azure 앱 서비스에서 네트워크 추적은 애플리케이션 프로세스에서 가져옵니다. 정확한 정보를 얻으려면 네트워크 추적 수집을 시작하는 동안 문제를 재현합니다.

참고

가상 네트워크 트래픽은 네트워크 추적에서 캡처되지 않습니다.

Windows App Services

Windows App Services에 대한 네트워크 추적을 수집하려면 다음 단계를 수행합니다.

  1. Azure Portal 웹앱으로 이동합니다.
  2. 왼쪽 탐색 영역에서 문제 진단 및 해결을 선택합니다.
  3. 검색 상자에 네트워크 추적 수집 을 입력하고 네트워크 추적 수집 을 선택하여 네트워크 추적 컬렉션을 시작합니다.

네트워크 추적을 캡처하는 방법을 보여 주는 스크린샷

웹앱을 제공하는 각 instance 대한 추적 파일을 얻으려면 브라우저에서 웹앱용 Kudu 콘솔(https://<sitename>.scm.azurewebsites.net)로 이동합니다. etworktrace 또는 D:\home\LogFiles\networktrace 폴더를\nC:\home\LogFiles에서 추적 파일을 다운로드합니다.

Linux App Services

사용자 지정 컨테이너를 사용하지 않는 Linux App Services에 대한 네트워크 추적을 수집하려면 다음 단계를 수행합니다.

  1. tcpdump 다음 명령을 실행하여 명령줄 유틸리티를 설치합니다.

    apt-get update
    apt install tcpdump
    
  2. SSH(Secure Shell Protocol)를 통해 컨테이너에 연결합니다.

  3. 다음 명령을 실행하여 실행 중인 인터페이스를 식별합니다(예: ). eth0

    root@<hostname>:/home# tcpdump -D
    
    1.eth0 [Up, Running, Connected]
    2.any (Pseudo-device that captures on all interfaces) [Up, Running]
    3.lo [Up, Running, Loopback]
    4.bluetooth-monitor (Bluetooth Linux Monitor) [Wireless]
    5.nflog (Linux netfilter log (NFLOG) interface) [none]
    6.nfqueue (Linux netfilter queue (NFQUEUE) interface) [none]
    7.dbus-system (D-Bus system bus) [none]
    8.dbus-session (D-Bus session bus) [none]
    
  4. 다음 명령을 실행하여 네트워크 추적 컬렉션을 시작합니다.

    root@<hostname>:/home# tcpdump -i eth0 -w networktrace.pcap
    

    를 실제 인터페이스의 이름으로 바꿉 있습니다 eth0 .

추적 파일을 다운로드하려면 Kudu, FTP 또는 Kudu API 요청과 같은 메서드를 통해 웹앱에 연결합니다. 파일 다운로드를 트리거하기 위한 요청 예제는 다음과 같습니다.

https://<sitename>.scm.azurewebsites.net/api/vfs/<path to the trace file in the /home directory>/filename

타사 정보 고지 사항

이 문서에 나와 있는 다른 공급업체 제품은 Microsoft와 무관한 회사에서 제조한 것입니다. Microsoft는 이들 제품의 성능이나 안정성에 관하여 명시적이든 묵시적이든 어떠한 보증도 하지 않습니다.

도움을 요청하십시오.

질문이 있거나 도움이 필요한 경우 지원 요청을 생성하거나Azure 커뮤니티 지원에 문의하세요. Azure 피드백 커뮤니티에 제품 피드백을 제출할 수도 있습니다.