VNET에 통합 한 후 Azure Function App에 연결할 수 없음

Sep 08 2020

문제 개요

Azure Function App은 VNET에 통합되고 WEBSITE_VNET_ROUTE_ALL이 1로 설정되면 액세스 할 수 없습니다.

이는 함수 앱이 SQL을 공개적으로 사용하지 않고도 SQL에 안전하게 연결할 수 있도록하기 위해 필요합니다.

오류 :

기능 앱 키를 나열 할 수 없습니다.

동일한 네트워크의 VM 내에서 HTTP 요청 (CURL) 실패 : 504 게이트웨이 시간 초과

아키텍처 다이어그램

재현 단계

  1. 리소스 그룹 생성
  2. 10.20.11.0/26 주소 공간을 사용하여 VNET 만들기
  3. 10.20.11.0/27의 주소 범위로 통합 할 함수 앱의 서브넷을 만듭니다.
  4. Linux 함수 앱을 만들고 2 단계에서 만든 VNET에 통합했습니다.
  5. 앱 키가 여전히 정상적으로로드되는지 확인합니다.
  6. 주소 범위가 10.20.11.32/27 인 데이터베이스에 대한 서브넷을 만듭니다.
  7. SQL Server 및 SQL Database를 만듭니다.
  8. 데이터베이스에 DNS 영역이있는 비공개 링크를 만들고 공개 액세스를 제한합니다.
  9. DNS 영역을 2 단계에서 만든 VNET에 연결합니다.
  10. 함수 앱은 SQL 개인 링크를 공용 IP 주소로 확인했습니다.
  11. 함수 앱 구성에서 애플리케이션 설정 WEBSITE_VNET_ROUTE_ALL을 추가하고 1로 설정합니다.
  12. 이제 Function 앱이 SQL 프라이빗 링크를 프라이빗 IP 주소로 확인합니다.
  13. Function App 키가로드되지 않는지 확인하십시오.
  14. 네트워크 또는 공용 링크에서 연결을 통해 Azure Functions에 연결을 시도합니다.
  15. Function 앱 게이트웨이 시간 초과를 확인하십시오.

함수 앱에 대한 SSH 연결과 nslookup을 통해 개인 링크에 대한 연결이 예상대로 SQL 데이터베이스의 로컬 IP 주소를 확인한다는 것을 확인했습니다.

WEBSITE_VNET_ROUTE_ALL 플래그를 0으로 설정하면 nslookup이 SQL 데이터베이스의 공용 IP를 확인합니다.

SQL 데이터베이스가 제한되고 네트워크에서만 사용할 수 있으므로 WEBSITE_VNET_ROUTE_ALL 설정을 1로 설정하는 것이 중요합니다.

WEBSITE_VNET_ROUTE_ALL = 1

WEBSITE_VNET_ROUTE_ALL = 0

참고 문헌

https://docs.microsoft.com/en-us/azure/app-service/web-sites-integrate-with-vnet

답변

3 GerritvanHuyssteen Sep 08 2020 at 23:27

이 문제는 함수 앱 서브넷에 "Microsoft.Storage"서비스 끝점을 추가하여 해결되었습니다.

모든 트래픽이 vnet으로 전송되면 Function App 구성 및 기능을 읽을 수 있도록 Storage에 대한 서비스 엔드 포인트가 필요합니다.

  1. 가상 네트워크 리소스로 이동
  2. 사이드 메뉴의 설정에서 "서비스 엔드 포인트"를 선택합니다.
  3. "추가"를 클릭하십시오.
  4. 서비스 드롭 다운에서 "Microsoft.Storage"를 선택합니다.
  5. 필요한 경우 정책 추가 (여기서는 정책을 선택하지 않았습니다)
  6. 함수 앱 서브넷 연결
  7. 더하다.