Azure App Service / Container App IN/OUT 통신 정리
1. Inbound 통신 (Private Link)
- 정리 내용: App Service의 Private Link는 Inbound 전용 통신
- 설명
- Private Endpoint 연결 시 VNet 내부에서 사설 IP를 통해 접근 가능
- 외부에서는 퍼블릭 엔드포인트 필요
- Private Link는 Inbound 트래픽 전용, DNS 프라이빗 존 필요
- 추가 주의
- App Service → VNet 통합과 혼동 금지 (VNet 통합은 Outbound용)
2. 외부 통신 제한
- 정리 내용: 네트워킹 설정을 안 할 경우 외부 통신 불가능?
- 설명
- App Service 기본 설정에서는 Outbound 통신 가능
- VNet 통합 또는 Private Endpoint 사용 시 외부 인터넷 연결은 NAT Gateway 필요
- 추가
- App Service → Internet 기본 Outbound는 공인 IP를 통해 NAT 처리
3. Outbound 통신
- 정리 내용
- 기본적으로 Outbound는 공인 IP 사용 (CIDR 맵핑)
- 단일 IP로 정의하려면 NAT Gateway 필요
- 사설 IP 통신 방법 (단일 IP로 외부 통신 불가)
- 설명
- 기본 Outbound → 공인 IP
- 1개의 IP로 정의 → NAT 필요
- VNet 통합 시 여러 인스턴스 Outbound IP가 생김
- 단일 IP 사용 시 NAT Gateway 연결 필요
- 사설 IP 통신
- 기본적으로 App Service/Container App은 Outbound에서 사설 IP 사용 불가
- VNet 통합 + Private Endpoint/VPN/ExpressRoute로 VNet 내부 통신 가능
- 외부 인터넷은 반드시 NAT/Gateway를 통한 공인 IP 필요
4. 추가 정리표
구분 |
기본 동작 |
VNet 통합 / Private Link 적용 시 |
비고 |
Inbound |
Public Endpoint (App Service URL) |
Private Endpoint → VNet 사설 IP |
Private Link는 Inbound 전용 |
Outbound |
공인 IP → 인터넷 |
사설 서브넷 → NAT Gateway 필요 |
사설 IP 직접 인터넷 통신 불가 |
단일 IP 제한 |
불가 (동적 IP 여러 개) |
NAT Gateway 연결 시 가능 |
방화벽 허용용 활용 가능 |
내부 VNet 접근 |
불가 |
VNet 통합 / Private Endpoint 통해 가능 |
사설 IP로 내부 리소스 접근 가능 |
5. 결론
- App Service / Container App의 Inbound/Outbound는 별도 개념으로 이해해야 함
- Private Endpoint → Inbound 전용
- VNet 통합 → Outbound 전용
- Outbound에서 사설 IP 직접 외부 통신 불가, 단일 IP 필요 시 NAT Gateway 연결 필수
사용자 요청
│
▼
[Ingress Gateway]
(Public/Private Endpoint)
│
▼
[Container App]
┌───────────────────────────────┐
│ Revision v1 (예: 이미지:v1) │
│ Revision v2 (예: 이미지:v2) │
│ 트래픽 분산 (예: v1=80%, v2=20%) │
└───────────────────────────────┘
│
▼
[앱 내부 로직 실행]
(REST API, gRPC, Background Job 등)
│
▼
[Networking Layer]
├─ VNet 내부 DB 호출 (사설 IP)
├─ 외부 API 호출 (SNAT 통해 공인 IP)
└─ EventHub / Storage / Cosmos DB 등 연결
│
▼
[Autoscaler (KEDA)]
- 요청량 ↑ → Pod 수 증가
- 요청량 ↓ → Pod 수 감소
│
▼
[모니터링 & 로깅]
- Azure Monitor
- App Insights
- Log Analytics
- 기본 아웃바운드 로직
Container Apps는 Azure 관리 네트워크에 위치합니다.
- VNet 통합을 하지 않은 경우 → Outbound 트래픽은 Microsoft 관리 SNAT → 공인 IP로 나감.
- VNet 통합한 경우 → Container App이 속한 서브넷의 NAT Gateway / Route Table 경로를 따라감.
→ 따라서 DB나 내부 리소스 접근 가능.
[Container App Pod]
│ (DNS 조회)
▼
[Private DNS Zone]
│ (예: mydb.database.windows.net → 10.10.0.5)
▼
[Private Endpoint NIC]
│
▼
[Azure PaaS 서비스 내부]
좋습니다. 요청하신 내용을 기반으로 **VWAN 기반, 전체 프라이빗 환경(Azure App Service / Container App + Postgres + Storage 등)**의 전반적인 통신 플로우를 정리해 드릴게요.
아래는 텍스트/마크다운 기반 플로우 구조입니다.
Azure VWAN 기반 전체 프라이빗 환경 통신 플로우
1️⃣ 구성 요소
- VNet A: Azure Database for PostgreSQL
- VNet B: Azure Container App / App Service
- VNet C: Azure Storage Account (Durable Functions용)
- VWAN Hub: VNet 간 통신 허브
- Azure Firewall / NVA: 중앙 방화벽 정책
- Private DNS / Private Link: 리소스 이름 해석 및 내부 통신
- NAT Gateway: 단일 공인 IP 아웃바운드 필요 시
2️⃣ Inbound 통신
From |
To |
방법 |
비고 |
온프레미스 / VPN |
Container App / App Service |
Private Endpoint / Private Link |
사설 IP로 접근 |
App Service / Container App |
내부 VNet 리소스 (Postgres, Storage) |
VNet Peering 또는 VWAN Hub 경유 |
DNS Private Zone 사용 |
설명:
- Private Link → 사설 IP, Inbound 전용
- 외부 인터넷 접속 시 Private Link는 사용 안 됨
- DNS Private Zone → 사설 IP로 이름 해석
3️⃣ Outbound 통신
From |
To |
방법 |
비고 |
Container App / App Service |
PostgreSQL |
VNet Peering 또는 VWAN Hub + UDR |
사설 IP 통신 |
Container App / App Service |
Storage (Durable Functions) |
VNet Peering / Firewall / UDR |
Managed Identity + Blob Data Contributor |
Container App / App Service |
외부 인터넷 |
NAT Gateway |
단일 공인 IP 필요 시 |
Container App / App Service |
ACR |
Managed Identity + AcrPull |
공인 IP 없이도 Pull 가능, DNS Private Zone 필요 |
설명:
- Outbound는 서브넷 라우팅 테이블(UDR) + 시스템 라우트에 따름
- VNet 통합 시 기본적으로 Outbound는 공인 IP로 나가지만, NAT 연결 시 단일 IP로 가능
- 외부 인터넷에 직접 사설 IP는 사용 불가
4️⃣ Managed Identity 권한 구성
대상 |
역할 |
필요 이유 |
Container App / Function App MI |
AcrPull |
ACR에서 컨테이너 이미지 Pull |
Container App / Function App MI |
Storage Blob Data Contributor |
Durable Functions 상태 저장 |
Container App / Function App MI |
Storage Queue Data Contributor |
Durable Task Hub 큐 사용 |
5️⃣ 통신 플로우 예시 (텍스트 기반)
[On-Prem / VPN]
│
▼
[Private Endpoint] ── Inbound ──▶ [App Service / Container App (VNet B)]
│
│ Outbound (사설 IP)
▼
[VNet A - PostgreSQL] via VWAN Hub / Peering
│
│ Outbound (사설 IP)
▼
[VNet C - Storage] via VWAN Hub / Peering
│
│ Outbound (공인 IP via NAT Gateway)
▼
[Internet / External APIs]
6️⃣ 핵심 포인트
- Inbound / Outbound 구분 필수
- Private Endpoint → Inbound 전용
- VNet 통합 → Outbound 전용
- Outbound에서 외부 인터넷 → 공인 IP 필요
- NAT Gateway 연결 필요 (단일 IP)
- 사설 IP 통신
- VNet Peering / VWAN Hub + UDR 필요
- 외부 인터넷에 사설 IP는 불가
- Managed Identity + RBAC
- ACR Pull, Storage 접근 등 내부 리소스 접근 시 보안 강화