Azure App 서비스와 가상 네트워크 간 통합 문제 해결
이 문서에서는 가상 네트워크와 통합되는 Azure 앱 Service의 연결 문제를 해결하는 데 사용할 수 있는 도구에 대해 설명합니다.
참고 항목
App Service의 Docker Compose 시나리오에서는 가상 네트워크 통합이 지원되지 않습니다. 프라이빗 엔드포인트가 있는 경우 액세스 제한 정책은 무시됩니다.
가상 네트워크 통합 확인
연결 문제를 해결하려면 먼저 가상 네트워크 통합이 올바르게 구성되었는지 여부와 개인 IP가 App Service 계획의 모든 인스턴스에 할당되었는지 확인해야 합니다.
이렇게 하려면 다음 방법 중 하나를 사용하세요.
Kudu 디버그 콘솔에서 개인 IP 확인
Kudu 콘솔에 액세스하려면 Azure Portal에서 앱 서비스를 선택하고, 개발 도구로 이동하고, 고급 도구를 선택한 다음, 이동을 선택합니다. Kudu 서비스 페이지에서 도구>디버그 콘솔>CMD를 선택합니다.
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, nslookup 및 tracert가 콘솔을 통해 작동하지 않습니다.
에서 직접 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 액세스를 테스트하려면 test-netconnection PowerShell 명령을 사용합니다. 구문은 다음과 같습니다.
Test-NetConnection hostname [optional: -Port]
- VM에서 애플리케이션을 실행하고, tcpping을 사용하여 앱에서 콘솔의 해당 호스트와 포트에 대한 액세스를 테스트합니다.
네트워크 문제 해결사
네트워크 문제 해결사를 사용하여 App Service의 앱에 대한 연결 문제를 해결할 수도 있습니다. 네트워크 문제 해결사를 열려면 Azure Portal의 앱 서비스로 이동합니다. 진단 및 문제 해결을 선택한 다음, 네트워크 문제 해결사를 검색합니다.
참고 항목
연결 문제 시나리오는 아직 Linux 또는 컨테이너 기반 앱을 지원하지 않습니다.
연결 문제 - 개인 IP가 App Service 계획의 모든 인스턴스 및 DNS 설정에 할당되었는지 확인하는 등 가상 네트워크 통합의 상태를 확인합니다. 사용자 지정 DNS가 구성되지 않은 경우 기본 Azure DNS가 적용됩니다. 연결을 테스트하려는 특정 엔드포인트에 대해 테스트를 실행할 수도 있습니다.
구성 문제 - 이 문제 해결사에서는 서브넷이 가상 네트워크 통합에 유효한지 확인합니다.
서브넷/VNet 삭제 문제 - 이 문제 해결사에서는 서브넷에 잠금이 있는지, VNet/서브넷의 삭제를 차단할 수 있는 사용되지 않는 서비스 연결 링크가 있는지 확인합니다.
네트워크 추적 수집
네트워크 추적을 수집하면 문제를 분석하는 데 도움이 될 수 있습니다. Azure 앱 서비스에서 네트워크 추적은 애플리케이션 프로세스에서 가져옵니다. 정확한 정보를 얻으려면 네트워크 추적 수집을 시작하는 동안 문제를 재현합니다.
참고 항목
가상 네트워크 트래픽은 네트워크 추적에서 캡처되지 않습니다.
Windows App Services
Windows App Services에 대한 네트워크 추적을 수집하려면 다음 단계를 수행합니다.
- Azure Portal에서 웹앱으로 이동합니다.
- 왼쪽 탐색 창에서 문제 진단 및 해결을 선택합니다.
- 검색 상자에 네트워크 추적 수집을 입력하고 네트워크 추적 수집을 선택하여 네트워크 추적 컬렉션을 시작합니다.
웹앱을 제공하는 각 인스턴스에 대한 추적 파일을 얻으려면 브라우저에서 웹앱용 Kudu 콘솔(https://<sitename>.scm.azurewebsites.net
)로 이동합니다. C:\home\LogFiles\networktrace 또는 D:\home\LogFiles\networktrace 폴더에서 추적 파일을 다운로드합니다.
Linux App Services
사용자 지정 컨테이너를 사용하지 않는 Linux App Services에 대한 네트워크 추적을 수집하려면 다음 단계를 수행합니다.
tcpdump
다음 명령을 실행하여 명령줄 유틸리티를 설치합니다.apt-get update apt install tcpdump
SSH(Secure Shell Protocol)를 통해 컨테이너에 연결합니다.
다음 명령을 실행하여 실행 중인 인터페이스를 식별합니다(예:
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]
다음 명령을 실행하여 네트워크 추적 컬렉션을 시작합니다.
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 피드백 커뮤니티에 제품 피드백을 제출할 수도 있습니다.