Azure Container Apps에서 앱 또는 마이크로 서비스를 호스트하는 경우 항상 인터넷에 직접 게시하지 않으려는 것은 아닙니다. 대신 역방향 프록시를 통해 노출하는 것이 좋습니다.
역방향 프록시는 하나 이상의 서비스 앞에 배치되어 들어오는 트래픽을 적절한 대상으로 가로채고 지시하는 서비스입니다.
역방향 프록시를 사용하면 다음을 비롯한 교차 절단 기능을 지원하는 서비스를 앱 앞에 배치할 수 있습니다.
- 라우팅
- 캐싱
- 속도 제한
- 부하 분산
- 보안 계층
- 요청 필터링
이 문서에서는 내부 Container Apps 환경에서 Azure Application Gateway WAF(Web Application Firewall)를 사용하여 컨테이너 앱을 보호하는 방법을 보여 줍니다.
Container Apps의 네트워킹 개념에 대한 자세한 내용은 Azure Container Apps의 네트워킹 환경을 참조하세요.
필수 구성 요소
가상 네트워크가 있는 내부 환경: 내부 환경에 있고 가상 네트워크와 통합된 컨테이너 앱이 있습니다. 가상 네트워크 통합 앱을 만드는 방법에 대한 자세한 내용은 내부 Azure Container Apps 환경에 가상 네트워크 제공을 참조하세요.
보안 인증서: 애플리케이션 게이트웨이에 TLS/SSL 암호화를 사용해야 하는 경우 애플리케이션 게이트웨이에 바인딩하는 데 사용되는 유효한 공용 인증서가 필요합니다.
컨테이너 앱의 도메인 검색
다음 단계를 사용하여 기본 도메인 및 고정 IP의 값을 검색하여 프라이빗 DNS 영역을 설정합니다.
포털의 리소스 그룹 개요 창에서 컨테이너 앱을 선택합니다.
컨테이너 앱 리소스에 대한 개요 창에서 Container Apps 환경 링크를 선택합니다.
컨테이너 앱 환경 리소스에 대한 개요 창에서 페이지의 오른쪽 위 모서리에 있는 JSON 보기를 선택하여 컨테이너 앱 환경의 JSON 표현을 봅니다.
defaultDomain 및 staticIp 속성의 값을 복사하여 텍스트 편집기에 붙여넣습니다. 다음 섹션에서 기본 도메인에 대해 이러한 값을 사용하여 프라이빗 DNS 영역을 만듭니다.
Azure 프라이빗 DNS 영역 구성
Azure 프라이빗 DNS 영역을 만들고 구성하려면 다음 단계를 수행합니다.
Azure Portal로 이동합니다.
검색 창에 프라이빗 DNS 영역을 입력합니다.
검색 결과에서 프라이빗 DNS 영역을 선택합니다.
만들기 단추를 선택합니다.
다음 값을 입력합니다.
설정 작업 구독 Azure 구독을 선택합니다. 리소스 그룹 컨테이너 앱의 리소스 그룹을 선택합니다. 이름 이전 섹션에서 Container Apps Environment의 defaultDomain 속성을 입력합니다. 리소스 그룹 위치 기본값으로 둡니다. 프라이빗 DNS 영역이 전역이므로 값이 필요하지 않습니다. 검토 + 만들기를 선택합니다. 유효성 검사가 완료되면 만들기를 선택합니다.
프라이빗 DNS 영역을 만든 후 리소스로 이동을 선택합니다.
개요 창에서 +레코드 집합을 선택하여 새 레코드 집합을 추가합니다.
레코드 집합 추가 창에 다음 값을 입력합니다.
설정 작업 이름 *를 입력합니다. 유형 A-주소 레코드를 선택합니다. TTL 기본값을 유지합니다. TTL 단위 기본값을 유지합니다. IP 주소 이전 섹션에서 Container Apps Environment의 staticIp 속성을 입력합니다. 확인을 선택하여 레코드 집합을 만듭니다.
+레코드 집합을 다시 선택하여 두 번째 레코드 집합을 추가합니다.
레코드 집합 추가 창에 다음 값을 입력합니다.
설정 작업 이름 @를 입력합니다. 유형 A-주소 레코드를 선택합니다. TTL 기본값을 유지합니다. TTL 단위 기본값을 유지합니다. IP 주소 이전 섹션에서 Container Apps Environment의 staticIp 속성을 입력합니다. 확인을 선택하여 레코드 집합을 만듭니다.
페이지 왼쪽의 메뉴에서 가상 네트워크 링크 창을 선택합니다.
+추가를 선택하여 다음 값으로 새 링크를 만듭니다.
설정 작업 링크 이름 my-vnet-pdns-link를 입력합니다. 가상 네트워크의 리소스 ID를 알고 있음 선택 취소된 상태로 둡니다. 가상 네트워크 컨테이너 앱이 통합된 가상 네트워크를 선택합니다. 자동 등록 사용 선택 취소된 상태로 둡니다. 확인을 선택하여 가상 네트워크 링크를 만듭니다.
Azure Application Gateway 만들기 및 구성
Azure Application Gateway를 만들고 구성하려면 다음 단계를 수행합니다.
Azure Portal로 이동합니다.
검색 창에 Application Gateway를 입력합니다.
검색 결과에서 Application Gateway를 선택합니다.
이제 기본 탭, 프런트 엔드 탭, 백 엔드 탭, 구성 탭에 필요한 세부 정보를 입력합니다.
기본 사항 탭
다음 단계를 수행합니다.
프로젝트 세부 정보 섹션에서 다음 값을 입력합니다.
설정 작업 구독 Azure 구독을 선택합니다. 리소스 그룹 컨테이너 앱의 리소스 그룹을 선택합니다. Application Gateway 이름 my-container-apps-agw를 입력합니다. 지역 컨테이너 앱이 프로비전된 위치를 선택합니다. 계층 WAF V2를 선택합니다. WAF가 필요하지 않은 경우 표준 V2를 사용할 수 있습니다. 자동 크기 조정 사용 기본값으로 둡니다. 프로덕션 환경의 경우 자동 크기 조정이 권장됩니다. Azure Application Gateway 자동 크기 조정을 참조하세요. 가용성 영역 없음을 선택합니다. 프로덕션 환경의 경우 고가용성을 위해 가용성 영역이 권장됩니다. HTTP2 기본값을 유지합니다. WAF 정책 새로 만들기를 선택하고 WAF 정책에 my-waf-policy를 입력합니다. 확인을 선택합니다. 계층에 대해 표준 V2를 선택한 경우 이 단계를 건너뜁니다. 가상 네트워크 컨테이너 앱이 통합된 가상 네트워크를 선택합니다. 서브넷 서브넷 구성 관리를 선택합니다. 사용하려는 서브넷이 이미 있는 경우 대신 사용하고 프런트 엔드 섹션으로 건너뜁니다. my-vnet의 서브넷 창 내에서 +서브넷을 선택하고 다음 값을 입력합니다.
설정 작업 이름 appgateway-subnet을 입력합니다. 서브넷 주소 범위 기본값을 유지합니다. 나머지 설정의 경우 기본값을 유지합니다.
저장 을 선택하여 새 서브넷을 만듭니다.
서브넷 창을 닫고 애플리케이션 게이트웨이 만들기 창으로 돌아갑니다.
다음 값을 선택합니다.
설정 작업 서브넷 만든 appgateway-subnet을 선택합니다. 다음: 프런트 엔드를 선택하여 계속합니다.
프런트 엔드 탭
다음 단계를 수행합니다.
프런트 엔드 탭에서 다음 값을 입력합니다.
설정 작업 프런트 엔드 IP 주소 유형 공용을 선택합니다. 공용 IP 주소 새로 추가를 선택합니다. 프런트 엔드 이름에 my-frontend를 입력하고 확인을 선택합니다. 참고
Application Gateway v2 SKU의 경우 공용 프런트 엔드 IP가 있어야 합니다. 자세한 내용은 공용 및 개인 IP 주소 지원 및 Azure Application Gateway를 사용하여 공용 IP 주소 관리를 참조하세요.
다음: 백 엔드를 선택합니다.
백 엔드 탭
백 엔드 풀은 적절한 백 엔드 서버로 요청을 라우팅하는 데 사용됩니다. 백 엔드 풀은 다음 리소스의 조합으로 구성될 수 있습니다.
- NIC
- 공용 IP 주소
- 내부 IP 주소
- 가상 머신 스케일 세트 (Virtual Machine Scale Sets)
- FQDN(정규화된 도메인 이름)
- Azure App Service 및 Container Apps와 같은 다중 테넌트 백 엔드
이 예제에서는 컨테이너 앱을 대상으로 하는 백 엔드 풀을 만듭니다.
백 엔드 풀을 만들려면 다음 단계를 수행합니다.
백 엔드 추가를 선택합니다.
새 탭을 열고 컨테이너 앱으로 이동합니다.
컨테이너 앱의 개요 창에서 애플리케이션 URL을 찾아 복사합니다.
백 엔드 탭으로 돌아가 백 엔드 풀 추가 창에 다음 값을 입력합니다.
설정 작업 이름 my-agw-backend-pool을 입력합니다. 대상 없이 백 엔드 풀 추가 아니오를 선택합니다. 대상 유형 IP 주소 또는 FQDN을 선택합니다. 대상 복사한 컨테이너 앱 애플리케이션 URL을 입력하고 https:// 접두사를 제거합니다. 이 위치는 컨테이너 앱의 FQDN입니다. 추가를 선택합니다.
백 엔드 탭에서 다음: 구성을 선택합니다.
구성 탭
구성 탭에서 라우팅 규칙을 사용하여 만든 프런트 엔드 및 백 엔드 풀을 연결합니다.
프런트 엔드와 백 엔드 풀을 연결하려면 다음 단계를 수행합니다.
라우팅 규칙 추가를 선택합니다. 다음 값을 입력합니다.
설정 작업 이름 my-agw-routing-rule을 입력합니다. 우선 순위 1을 입력합니다. 수신기 탭에서 다음 값을 입력합니다.
설정 작업 수신기 이름 my-agw-listener를 입력합니다. 프런트 엔드 IP 공용을 선택합니다. 프로토콜 HTTPS를 선택합니다. 사용할 인증서가 없는 경우 HTTP를 선택할 수 있습니다. 포트 443을 입력합니다. 프로토콜에 대해 HTTP를 선택한 경우 80을 입력하고 기본/사용자 지정 도메인 섹션으로 건너뜁니다. 인증서 선택 인증서 업로드를 선택합니다. 인증서가 키 자격 증명 모음에 저장된 경우 Key Vault 인증서 선택을 선택할 수 있습니다. 인증서 이름 SSL 인증서의 이름을 입력합니다. PFX 인증서 파일 유효한 공용 인증서를 선택합니다. 암호 인증서 암호를 입력합니다. 기본 도메인을 사용하려면 다음 값을 입력합니다.
설정 작업 수신기 유형 기본을 선택합니다. 오류 페이지 URL 아니요로 둡니다. 또는 사용자 지정 도메인을 사용하려는 경우 다음 값을 입력합니다.
설정 작업 수신기 유형 다중 사이트 선택 호스트 유형 단일 선택 호스트 이름 사용하려는 사용자 지정 도메인을 입력합니다. 오류 페이지 URL 아니요로 둡니다. 백 엔드 대상 탭을 선택하고 다음 값을 입력합니다.
백 엔드 대상 탭으로 전환하고 다음 값을 입력합니다.
설정 작업 대상 유형 이전에 만든 my-agw-backend-pool을 선택합니다. 백 엔드 설정 새로 추가를 선택합니다. 백 엔드 설정 추가 창에서 다음 값을 입력합니다.
설정 작업 백 엔드 설정 이름 my-agw-backend-setting을 입력합니다. 백 엔드 프로토콜 HTTPS를 선택합니다. 백 엔드 포트 443을 입력합니다. 잘 알려진 CA 인증서 사용 예를 선택합니다. 새 호스트 이름으로 재정의 예를 선택합니다. 호스트 이름 재정의 백 엔드 대상에서 호스트 이름 선택을 선택합니다. 사용자 지정 프로브 만들기 아니오를 선택합니다. 요청 헤더 다시 쓰기에서 다음을 구성합니다.
- 요청 헤더 다시 쓰기 사용: 예를 선택합니다.
- 요청 헤더를 추가합니다.
- 헤더 이름:
X-Forwarded-Host
- 값:
{host}
- 헤더 이름:
이 작업을 수행하면 클라이언트 요청의 원래
Host
헤더가 유지되고 백 엔드 애플리케이션에서 액세스할 수 있습니다.추가를 선택하여 백 엔드 설정을 추가합니다.
라우팅 규칙 추가 창에서 추가를 다시 선택합니다.
다음: 태그를 선택합니다.
다음: 검토 및 만들기를 선택하고 만들기를 선택합니다.
Application Gateway에 프라이빗 링크 추가
프라이빗 링크를 사용하여 내부 전용 컨테이너 앱 환경에 보안 연결을 설정할 수 있습니다. 프라이빗 링크를 사용하면 Application Gateway가 가상 네트워크를 통해 백 엔드의 컨테이너 앱과 통신할 수 있습니다.
증명 공급자가 생성되었으면 리소스로 이동을 선택합니다.
왼쪽 메뉴에서 프라이빗 링크를 선택한 다음, 추가를 선택합니다.
다음 값을 입력합니다.
설정 작업 이름 my-agw-private-link를 입력합니다. 프라이빗 링크 서브넷 프라이빗 링크를 만들 서브넷을 선택합니다. 프런트 엔드 IP 구성 Application Gateway에 대한 프런트 엔드 IP를 선택합니다. 개인 IP 주소 설정에서 추가를 선택합니다.
블레이드의 아래쪽에서 추가를 선택합니다.
리디렉션 및 SSO에 대한 원래 호스트 헤더 유지
Azure Application Gateway가 역방향 프록시로 구성되고 새 호스트 이름 설정을 사용하여 재정의를 사용하도록 설정하면 헤더가 Host
수정됩니다. 헤더를 수정하면 원래 호스트 값을 사용하여 리디렉션 URL, 절대 링크를 생성하거나 OIDC(OpenID Connect) 인증 흐름을 지원하는 애플리케이션을 방해할 수 있습니다.
원래 호스트 헤더를 전달하려면 Application Gateway의 요청 헤더 다시 쓰기 기능을 사용하여 헤더에 X-Forwarded-Host
삽입할 수 있습니다.
X-Forwarded-Host 주입 구성
X-Forwarded-Host
주입을 사용하도록 설정하려면:
구성 탭에서 Application Gateway 라우팅 규칙의 백 엔드 설정 섹션을 선택합니다.
- 요청 헤더 다시 쓰기를 사용하도록 설정합니다.
- 다음 값을 사용하여 새 요청 헤더를 추가합니다.
- 헤더 이름:
X-Forwarded-Host
- 값:
{host}
- 헤더 이름:
귀하의 백엔드 앱이 이제
X-Forwarded-Host
헤더를 사용하여 원래 요청 호스트를 읽을 수 있습니다.
컨테이너 이미지 확인
개요 페이지에서 애플리케이션 게이트웨이의 공용 IP 주소를 찾거나 주소를 검색할 수 있습니다. 검색하려면 모든 리소스를 선택하고 검색 상자에 my-container-apps-agw-pip를 입력합니다. 그런 다음 검색 결과에서 IP를 선택합니다.
애플리케이션 게이트웨이의 공용 IP 주소로 이동합니다.
요청이 컨테이너 앱으로 자동으로 라우팅되어 애플리케이션 게이트웨이가 성공적으로 만들어졌는지 확인합니다.
리소스 정리
만든 리소스가 더 이상 필요하지 않은 경우 해당 리소스 그룹을 삭제합니다. 리소스 그룹을 삭제하면 모든 관련 리소스도 함께 제거됩니다.
리소스 그룹을 삭제하려면 다음을 수행합니다.
Azure Portal 메뉴에서 리소스 그룹을 선택하거나 리소스 그룹을 검색하여 선택합니다.
리소스 그룹 페이지에서 my-container-apps를 검색하여 선택합니다.
리소스 그룹 페이지에서 리소스 그룹 삭제를 선택합니다.
리소스 그룹 이름 입력 아래에 my-container-apps를 입력한 다음, 삭제를 선택합니다.