컨테이너 그룹의 아웃바운드 트래픽에 대한 고정 IP 주소에 대한 NAT 게이트웨이 구성

외부 연결 IP 주소를 사용하여 컨테이너 그룹을 설정하면 외부 클라이언트에서 IP 주소를 사용하여 그룹의 컨테이너에 액세스할 수 있습니다. 예를 들어 브라우저가 컨테이너에서 실행되는 웹앱에 액세스할 수 있습니다. 그러나 현재 컨테이너 그룹은 아웃바운드 트래픽에 다른 IP 주소를 사용합니다. 이 송신 IP 주소는 프로그래밍 방식으로 노출되지 않으므로 컨테이너 그룹 모니터링과 클라이언트 방화벽 규칙 구성이 더 복잡해집니다.

이 문서에서는 NAT(Network Address Translation) 게이트웨이와 통합된 가상 네트워크에서 컨테이너 그룹을 구성하는 단계를 설명합니다. NAT 게이트웨이를 ACI(Azure Container Instances)에 위임된 서브넷 주소 범위인 SNAT로 구성하면 컨테이너 그룹에서 아웃바운드 트래픽을 식별할 수 있습니다. 컨테이너 그룹 송신 트래픽은 NAT 게이트웨이의 공용 IP 주소를 사용합니다. ACI에 위임된 가상 네트워크 서브넷에 배포된 여러 컨테이너 그룹에서 단일 NAT 게이트웨이를 사용할 수 있습니다.

이 문서에서는 Azure CLI를 사용하여 다음 시나리오를 위한 리소스를 만듭니다.

  • 위임된 가상 네트워크 서브넷에 배포된 컨테이너 그룹
  • 고정 공용 IP 주소를 사용하는 네트워크에 배포된 NAT 게이트웨이

그런 다음, NAT 게이트웨이를 통해 예 컨테이너 그룹의 송신 유효성을 검사합니다.

참고 항목

ACI 서비스를 정적 송신이 있지만 정적 수신 요구 사항이 없는 컨테이너화된 워크로드용 NAT 게이트웨이와 통합하는 것이 좋습니다. 정적 수신과 송신을 모두 지원하는 ACI 아키텍처의 경우 수신 및 송신에 Azure Firewall 사용 자습서를 참조하세요.

Azure를 구독하고 있지 않다면 시작하기 전에 Azure 체험 계정을 만듭니다.

사전 요구 사항

Azure Cloud Shell 시작

Azure Cloud Shell은 이 항목의 단계를 실행하는 데 무료로 사용할 수 있는 대화형 셸입니다. 공용 Azure 도구가 사전 설치되어 계정에서 사용하도록 구성되어 있습니다.

Cloud Shell을 열려면 코드 블록의 오른쪽 위 모서리에 있는 사용해 보세요를 선택하기만 하면 됩니다. 또한 https://shell.azure.com 로 이동하여 별도의 브라우저 탭에서 Cloud Shell을 시작할 수 있습니다.

Cloud Shell이 열리면 환경에 대해 Bash가 선택되어 있는지 확인합니다. 후속 세션은 Bash 환경에서 Azure CLI를 사용합니다. 복사를 선택하여 코드 블록을 복사하고 Cloud Shell에 붙여넣고 Enter 키를 눌러 실행합니다.

Azure에 로그인

Cloud Shell은 로그인한 초기 계정에서 자동으로 인증됩니다. 다음 스크립트를 통해 다른 구독을 사용하여 로그인하고 <Subscription ID>를 Azure 구독 ID로 바꿉니다. Azure를 구독하고 있지 않다면 시작하기 전에 Azure 체험 계정을 만듭니다.

subscription="<subscriptionId>" # add subscription here

az account set -s $subscription # ...or use 'az login'

자세한 내용은 활성 구독 설정 또는 대화형으로 로그인을 참조하세요.

참고 항목

전체 스크립트를 다운로드하려면 전체 스크립트로 이동합니다.

시작하기

이 자습서는 임의 변수를 사용합니다. 기존 리소스 그룹을 사용하는 경우 이 변수의 값을 적절하게 수정합니다.

resourceGroup=resourceGroup$RANDOM

Azure 리소스 그룹: Azure 리소스 그룹이 아직 없으면 az group create 명령을 사용하여 리소스 그룹을 만듭니다. 위치 값을 적절하게 수정합니다.

az group create --name $resourceGroup --location eastus

가상 네트워크에 ACI 배포

일반적으로 컨테이너 그룹을 배포할 Azure 가상 네트워크가 이미 있을 수 있습니다. 데모를 위해 다음 명령은 컨테이너 그룹을 만들 때 가상 네트워크 및 서브넷을 만듭니다. 서브넷이 Azure Container Instances에 위임됩니다.

컨테이너 그룹은 aci-helloworld 이미지의 작은 웹앱을 실행합니다. 설명서의 다른 문서에 표시된 것처럼 이 이미지는 정적 HTML 페이지를 제공하는, Node.js로 작성된 작은 웹앱을 패키지합니다.

az container create 명령을 사용하여 컨테이너 그룹을 만듭니다.

az container create \
  --name appcontainer \
  --resource-group $resourceGroup \
  --image mcr.microsoft.com/azuredocs/aci-helloworld \
  --vnet aci-vnet \
  --vnet-address-prefix 10.0.0.0/16 \
  --subnet aci-subnet \
  --subnet-address-prefix 10.0.0.0/24

참고 항목

서브넷에서 필요한 IP 주소 공간에 맞게 --subnet address-prefix의 값을 조정합니다. 지원되는 가장 작은 서브넷은 8개의 IP 주소를 제공하는 /29입니다. 일부 >IP 주소는 Azure에서 사용하도록 예약되어 있으며 여기에서 자세히 확인할 수 있습니다.

공용 IP 주소 만들기

다음 섹션에서는 Azure CLI를 사용하여 가상 네트워크에 Azure NAT 게이트웨이를 배포합니다. 백그라운드 정보는 빠른 시작: Azure CLI를 사용하여 NAT Gateway 만들기를 참조하세요.

먼저 az network vnet public-ip create를 사용하여 NAT 게이트웨이의 공용 IP 주소를 만듭니다. 인터넷에 액세스하는 데 사용됩니다. 표준 SKU IP 주소에서 기본적으로 가용성 영역을 인식하는 호환성이 손상되는 변경이 예상된다는 경고가 표시됩니다. 여기에서 가용성 영역과 공용 IP 주소 사용에 대해 자세히 알아볼 수 있습니다.

az network public-ip create \
  --name myPublicIP \
  --resource-group $resourceGroup \
  --sku standard \
  --zone 1 \
  --allocation static

이 스크립트의 뒷부분에 있는 유효성 검사 단계에서 사용할 수 있도록 공용 IP 주소를 변수에 저장합니다.

ngPublicIp="$(az network public-ip show \
  --name myPublicIP \
  --resource-group $resourceGroup \
  --query ipAddress --output tsv)"

가상 네트워크에 NAT 게이트웨이 배포

다음 az network nat gateway create를 사용하여 이전 단계에서 만든 공용 IP를 사용하는 NAT 게이트웨이를 만듭니다.

az network nat gateway create \
  --resource-group $resourceGroup \
  --name myNATgateway \
  --public-ip-addresses myPublicIP \
  --idle-timeout 10

원본 서브넷에 대한 NAT 서비스 구성

az network vnet subnet update를 사용하여 aci-subnet 원본 서브넷에서 특정 myNATgateway NAT 게이트웨이 리소스를 사용하도록 구성합니다. 이 명령은 지정된 서브넷에서 NAT 서비스를 활성화합니다.

az network vnet subnet update \
    --resource-group $resourceGroup  \
    --vnet-name aci-vnet \
    --name aci-subnet \
    --nat-gateway myNATgateway

컨테이너 그룹에서의 송신 테스트

방화벽의 공용 IP 주소로 이동하여 가상 네트워크에서 실행되는 appcontainer에 대한 인바운드 액세스를 테스트합니다. 이전에는 공용 IP 주소를 $NG_PUBLIC_IP 변수에 저장했습니다.

가상 네트워크에 다음 샘플 컨테이너를 배포합니다. 컨테이너를 실행하면 단일 HTTP 요청을 http://checkip.dyndns.org에 보냅니다. 발신자의 IP 주소(송신 IP 주소)가 표시됩니다. 방화벽의 애플리케이션 규칙이 올바르게 구성된 경우 방화벽의 공용 IP 주소가 반환됩니다.

az container create \
  --resource-group $resourceGroup \
  --name testegress \
  --image mcr.microsoft.com/azuredocs/aci-tutorial-sidecar \
  --command-line "curl -s http://checkip.dyndns.org" \
  --restart-policy OnFailure \
  --vnet aci-vnet \
  --subnet aci-subnet

컨테이너 로그를 확인하여 IP 주소가 자습서의 첫 번째 단계에서 만든 공용 IP 주소와 같은지 확인합니다.

az container logs \
  --resource-group $resourceGroup \
  --name testegress

출력은 다음과 비슷합니다.

<html><head><title>Current IP Check</title></head><body>Current IP Address: 52.142.18.133</body></html>

이 IP 주소는 자습서의 첫 번째 단계에서 만든 공용 IP 주소와 일치해야 합니다.

echo $ngPublicIp

리소스 정리

더 이상 필요하지 않으면 az group delete를 사용하여 다음과 같이 리소스 그룹 및 모든 관련 리소스를 제거할 수 있습니다. --no-wait 매개 변수는 작업이 완료될 때까지 대기하지 않고 프롬프트로 제어를 반환합니다. --yes 매개 변수는 작업을 수행하는 추가 프롬프트 없이 리소스를 삭제할 것인지 확인합니다.

az group delete --name $resourceGroup --yes --no-wait

다음 단계

이 문서에서는 Azure NAT 게이트웨이 뒤에 있는 가상 네트워크에서 컨테이너 그룹을 설정했습니다. 이 구성을 사용하여 Azure Container Instances 컨테이너 그룹에서 단일 고정 IP 주소 송신을 설정합니다.

문제 해결 지원은 Azure Virtual Network NAT 연결 문제 해결을 참조하세요.