AKS(Azure Kubernetes Service) 클러스터에 대한 관리 또는 사용자 할당 NAT Gateway 만들기

Azure Load Balancer를 통해 송신 트래픽을 라우팅할 수 있지만 트래픽의 아웃바운드 흐름 수에는 제한이 있습니다. Azure NAT Gateway는 최대 16개의 IP 주소를 사용하여 IP 주소당 최대 64,512개의 아웃바운드 UDP 및 TCP 트래픽 흐름을 허용합니다.

이 문서에서는 관리 NAT Gateway와 송신 트래픽을 위한 사용자 할당 NAT Gateway를 사용하여 AKS(Azure Kubernetes Service) 클러스터를 만드는 방법을 보여 줍니다. 또한 Windows에서 OutboundNAT를 사용하지 않도록 설정하는 방법도 보여 줍니다.

시작하기 전에

  • Azure CLI의 최신 버전을 사용하고 있는지 확인합니다.
  • Kubernetes 버전 1.20.x 이상을 사용하고 있는지 확인합니다.
  • 관리형 NAT Gateway는 사용자 지정 가상 네트워크와 호환되지 않습니다.

관리형 NAT 게이트웨이로 AKS 클러스터 만들기

  • --outbound-type managedNATGateway, --nat-gateway-managed-outbound-ip-count--nat-gateway-idle-timeout 매개 변수와 함께 az aks create 명령을 사용하여 새 관리 NAT Gateway로 AKS 클러스터를 만듭니다. NAT Gateway가 특정 가용성 영역 외부에서 작동하도록 하려면 --zones를 사용하여 영역을 지정합니다.

  • 관리되는 NAT 게이트웨이를 만들 때 영역을 지정하지 않으면 NAT 게이트웨이는 기본적으로 "영역 없음"에 배포됩니다. NAT 게이트웨이가 영역 없음에 배치되면 Azure는 리소스를 자동으로 영역에 배치합니다. 비 영역 배포 모델에 대한 자세한 내용은 비 영역 NAT Gateway를 참조하세요.

  • 관리되는 NAT Gateway 리소스는 여러 가용성 영역에서 사용할 수 없습니다.

      az aks create \
          --resource-group myResourceGroup \
          --name myNatCluster \
          --node-count 3 \
          --outbound-type managedNATGateway \
          --nat-gateway-managed-outbound-ip-count 2 \
          --nat-gateway-idle-timeout 4
    
  • --nat-gateway-managed-outbound-ip-count 또는 --nat-gateway-idle-timeout 매개 변수와 함께 az aks update 명령을 사용하여 아웃바운드 IP 주소 또는 유휴 시간 제한을 업데이트합니다.

    az aks update \ 
        --resource-group myResourceGroup \
        --name myNatCluster\
        --nat-gateway-managed-outbound-ip-count 5
    

사용자 할당 NAT 게이트웨이를 사용하여 AKS 클러스터 만들기

이 구성에는 Kubenet 또는 Azure CNI를 통한 자체 네트워킹이 필요하고 NAT Gateway가 서브넷에 사전 구성되어 있어야 합니다. 다음 명령은 이 시나리오에 필요한 리소스를 만듭니다.

  1. az group create 명령을 사용하여 리소스 그룹을 만듭니다.

    az group create --name myResourceGroup \
        --location southcentralus
    
  2. 네트워크 권한에 대한 관리 ID를 만들고 나중에 사용할 수 있도록 ID를 $IDENTITY_ID에 저장합니다.

    IDENTITY_ID=$(az identity create \
        --resource-group myResourceGroup \
        --name myNatClusterId \
        --location southcentralus \
        --query id \
        --output tsv)
    
  3. az network public-ip create 명령을 사용하여 NAT Gateway에 대한 공용 IP를 만듭니다.

    az network public-ip create \
        --resource-group myResourceGroup \
        --name myNatGatewayPip \
        --location southcentralus \
        --sku standard
    
  4. az network nat gateway create 명령을 사용하여 NAT Gateway를 만듭니다.

    az network nat gateway create \
        --resource-group myResourceGroup \
        --name myNatGateway \
        --location southcentralus \
        --public-ip-addresses myNatGatewayPip
    

    Important

    단일 NAT Gateway 리소스는 여러 가용성 영역에서 사용할 수 없습니다. 영역 복원성을 보장하려면 NAT Gateway 리소스를 각 가용성 영역에 배포하고 각 영역의 AKS 클러스터가 포함된 서브넷에 할당하는 것이 좋습니다. 이 배포 모델에 대한 자세한 내용은 각 영역의 NAT Gateway를 참조하세요. NAT Gateway에 대해 영역이 구성되지 않은 경우 기본 영역 배치는 "영역 없음"이며, Azure는 NAT Gateway를 영역에 배치합니다.

  5. az network vnet create 명령을 사용하여 가상 네트워크를 만듭니다.

    az network vnet create \
        --resource-group myResourceGroup \
        --name myVnet \
        --location southcentralus \
        --address-prefixes 172.16.0.0/20 
    
  6. NAT 게이트웨이를 사용하여 가상 네트워크에 서브넷을 만들고 나중에 사용할 수 있도록 ID를 $SUBNET_ID에 저장합니다.

    SUBNET_ID=$(az network vnet subnet create \
        --resource-group myResourceGroup \
        --vnet-name myVnet \
        --name myNatCluster \
        --address-prefixes 172.16.0.0/22 \
        --nat-gateway myNatGateway \
        --query id \
        --output tsv)
    
  7. NAT Gateway가 있는 서브넷과 az aks create 명령을 사용하여 관리 ID를 사용하여 AKS 클러스터를 만듭니다.

    az aks create \
        --resource-group myResourceGroup \
        --name myNatCluster \
        --location southcentralus \
        --network-plugin azure \
        --vnet-subnet-id $SUBNET_ID \
        --outbound-type userAssignedNATGateway \
        --enable-managed-identity \
        --assign-identity $IDENTITY_ID
    

Windows용 OutboundNAT 사용 안 함(미리 보기)

Windows OutboundNAT는 AKS Pod와 특정 연결 및 통신 문제를 일으킬 수 있습니다. 예제 문제는 노드 포트 재사용에 관한 것입니다. 이 예제에서 Windows OutboundNAT는 포트를 사용하여 Pod IP를 Windows 노드 호스트 IP로 변환하므로, 포트 소모 문제로 인해 외부 서비스에 대한 연결이 불안정해질 수 있습니다.

Windows는 기본적으로 OutboundNAT를 사용하도록 설정합니다. 이제 새 Windows 에이전트 풀을 만들 때 OutboundNAT를 수동으로 사용하지 않도록 설정할 수 있습니다.

필수 조건

  • Kubernetes 버전 1.25 이하를 사용하는 경우 배포 구성을 업데이트해야 합니다.

  • aks-preview를 설치하거나 업데이트하고 기능 플래그를 등록해야 합니다.

    1. az extension add 또는 az extension update 명령을 사용하여 aks-preview를 설치하거나 업데이트합니다.
    # Install aks-preview
    az extension add --name aks-preview
    
    # Update aks-preview
    az extension update --name aks-preview
    
    1. az feature register 명령을 사용하여 기능 플래그를 등록합니다.
    az feature register --namespace Microsoft.ContainerService --name DisableWindowsOutboundNATPreview
    
    1. az feature list 명령을 사용하여 등록 상태를 확인합니다.
    az feature list -o table --query "[?contains(name, 'Microsoft.ContainerService/DisableWindowsOutboundNATPreview')].{Name:name,State:properties.state}"
    
    1. az provider register 명령을 사용하여 Microsoft.ContainerService 리소스 공급자의 등록을 새로 고칩니다.
    az provider register --namespace Microsoft.ContainerService
    

제한 사항

  • 클러스터 아웃바운드 형식은 LoadBalancer로 설정할 수 없고 Nat 게이트웨이 또는 UDR로 설정할 수 있습니다.
    • NAT 게이트웨이: NAT 게이트웨이는 NAT 연결을 자동으로 처리할 수 있으며 표준 Load Balancer보다 더 강력합니다. 이 옵션을 사용하면 추가 요금이 발생할 수도 있습니다.
    • UDR(UserDefinedRouting): 회람 규칙을 구성할 때 포트 제한 사항에 유의해야 합니다.
    • 부하 분산 장치에서 NAT 게이트웨이로 전환해야 하는 경우 NAT 게이트웨이를 VNet에 추가하거나 az aks upgrade를 실행하여 아웃바운드 형식을 업데이트할 수 있습니다.

참고 항목

UserDefinedRouting의 제한 사항은 다음과 같습니다.

  • Load Balancer의 SNAT(기본 아웃바운드NAT를 사용해야 함)는 "호스트 IP에 포트가 64개" 있습니다.
  • Azure Firewall의 SNAT(OutboundNAT 사용 안 함)는 공용 IP당 포트가 2,496개 있습니다.
  • NAT 게이트웨이의 SNAT(OutboundNAT 사용 안 함)는 공용 IP당 포트가 64,512개 있습니다.
  • Azure Firewall 포트 범위가 애플리케이션에 충분하지 않은 경우 NAT 게이트웨이를 사용해야 합니다.
  • 대상 IP 주소가 IANA RFC 1918에 따라 개인 IP 주소 범위에 있거나, IANA RFC 6598에 따라 공유 주소 공간에 있는 경우 Azure Firewall은 네트워크 규칙이 있는 SNAT가 아닙니다.

수동으로 Windows용 OutboundNAT 비활성화

  • --disable-windows-outbound-nat 플래그와 함께 az aks nodepool add 명령을 사용하여 새 Windows 에이전트 풀을 만들 때 Windows용 OutboundNAT를 수동으로 사용하지 않도록 설정합니다.

    참고 항목

    기존 AKS 클러스터를 사용할 수 있지만 아웃바운드 형식을 업데이트하고 노드 풀을 추가하여 --disable-windows-outbound-nat을 사용해야 할 수도 있습니다.

    az aks nodepool add \
        --resource-group myResourceGroup
        --cluster-name myNatCluster
        --name mynodepool
        --node-count 3
        --os-type Windows
        --disable-windows-outbound-nat
    

다음 단계

Azure NAT Gateway에 대한 자세한 내용은 Azure NAT Gateway를 참조하세요.