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

Azure Load Balancer를 통해 아웃바운드 트래픽을 라우팅할 수 있지만, 설정할 수 있는 아웃바운드 트래픽 흐름 수에는 제한이 있습니다. Azure NAT 게이트웨이 최대 16개의 IP 주소를 사용하여 IP 주소당 최대 64,512개의 아웃바운드 UDP 및 TCP 트래픽 흐름을 허용합니다. NAT 게이트웨이를 지원하는 세 가지 아웃바운드 형식은 managedNATGatewayV2 (미리 보기), managedNATGateway, 및 userAssignedNATGateway입니다.

관리형 NAT 게이트웨이 모델에서 AKS는 NAT 게이트웨이를 관리하여 클러스터 노드에 대한 아웃바운드 연결을 제공합니다. AKS는 최신 및 원래managedNATGatewayV2의 두 가지 관리형 NAT 게이트웨이 옵션을 managedNATGateway 지원합니다. managedNATgatewayV2기본적으로 영역 중복인 StandardV2 NAT 게이트웨이를 사용하여 가용성 영역 하나가 중단되더라도 계속 아웃바운드 연결을 제공합니다. 표준 NAT 게이트웨이와 달리 영역 중복성이 자동으로 빌드 되기 때문에 영역을 지정할 필요가 없습니다. StandardV2 NAT 게이트웨이는 IPv6, 더 높은 처리량 및 흐름 로그도 지원합니다. 자세한 내용은 StandardV2 NAT 게이트웨이 SKU를 참조하세요.

중요합니다

managedNATGatewayV2 아웃바운드 형식은 현재 미리 보기로 제공됩니다. 베타, 미리 보기 또는 일반 공급으로 아직 릴리스되지 않은 Azure 기능에 적용되는 약관은 Microsoft Azure 미리 보기에 대한 사용 약관을 참조하세요.

userAssignedNATGateway 는 AKS와 독립적으로 구성하고 사용자 고유의 가상 네트워킹을 사용할 때 필요한 고객 관리 NAT 게이트웨이 리소스입니다.

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

시작하기 전에

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

중요합니다

비 프라이빗 클러스터에서 API 서버 클러스터 트래픽은 클러스터 아웃바운드 형식을 통해 라우팅되고 처리됩니다. API 서버 트래픽이 공용 트래픽으로 처리되지 않도록 하려면 프라이빗 클러스터사용하거나 API Server VNet 통합 기능을 확인하세요.

를 사용하여 AKS 클러스터 만들기 managedNATgatewayV2

  • az aks create 명령과 --outbound-type managedNATGateway, --nat-gateway-outbound-ips, --nat-gateway-outbound-ip-prefixes, --nat-gateway-managed-outbound-ip-count, --nat-gateway-managed-outbound-ipv6-count 매개 변수를 사용하여 관리형 StandardV2 NAT 게이트웨이를 사용하는 AKS 클러스터를 만듭니다.
  • managedNATgatewayV2 아웃바운드 IP를 구성하는 경우 다음 방법 중 을 사용해야 합니다. Azure 관리형 및 고객 정의 아웃바운드 IP를 모두 사용할 수 없습니다.
    • Azure 관리 IP--nat-gateway-managed-ip-outbound-count 및/또는 --nat-gateway-managed-outbound-ipv6-count 사용하여 Azure 자동으로 아웃바운드 공용 IP를 할당하고 관리하도록 합니다.
    • 고객 정의 IP - 사전 프로비전된 공용 IP 주소 또는 접두사를 사용하여 --nat-gateway-outbound-ips--nat-gateway-outbound-ip-prefixes 아웃바운드 트래픽에 사용되는 특정 주소를 완전히 제어할 수 있습니다. StandardV2 NAT 게이트웨이에는 새 StandardV2 공용 IP를 사용해야 합니다. 기존 표준 SKU 공용 IP는 StandardV2 NAT 게이트웨이에서 작동하지 않습니다.

다음 표에서는 각 아웃바운드 IP 매개 변수 및 사용 시기에 대해 설명합니다.

매개 변수 입력 IP 버전 공용 IP를 관리하는 사람
--nat-gateway-managed-outbound-ip-count [1, 16] 범위의 값입니다. NAT 게이트웨이 아웃바운드 연결에 대해 원하는 아웃바운드 IPv4 수입니다. IPv4 Azure
--nat-gateway-managed-outbound-ipv6-count [1, 16] 범위의 값입니다. NAT 게이트웨이 아웃바운드 연결에 대해 원하는 아웃바운드 IPv6 수입니다. IPv6 Azure
--nat-gateway-outbound-ips NAT 게이트웨이 아웃바운드 연결에 대한 쉼표로 구분된 공용 IP 리소스 ID입니다. IPv4 또는 IPv6 고객
--nat-gateway-outbound-ip-prefixes NAT 게이트웨이 아웃바운드 연결에 대한 쉼표로 구분된 공용 IP 접두사 리소스 ID입니다. IPv4 또는 IPv6 고객

managedNATGatewayV2 아웃바운드 형식은 현재 미리 보기로 제공되며, 이 아웃바운드 형식을 사용하려면 aks-preview Azure CLI 확장을 설치하고 ManagedNATGatewayV2Preview 기능 플래그를 등록하려면 다음 단계가 필요합니다.

중요합니다

AKS 미리 보기 기능은 셀프 서비스에서 사용할 수 있습니다(옵트인 방식). 미리 보기는 "있는 그대로" 및 "사용 가능한 상태로" 제공되며 서비스 수준 계약 및 제한적 보증에서 제외됩니다. AKS 미리 보기의 일부는 고객 지원팀에서 최선을 다해 지원합니다. 따라서 이러한 기능은 프로덕션 용도로 사용할 수 없습니다. 자세한 내용은 다음 지원 문서를 참조하세요.

  1. az extension add 또는 az extension update 명령을 사용하여 Azure CLI 미리 보기 확장을 설치하거나 업데이트합니다.

    aks-preview Azure CLI 확장의 최소 버전은 20.0.0b1.

    # Install the aks-preview extension
    az extension add --name aks-preview
    # Update the extension to make sure you have the latest version installed
    az extension update --name aks-preview
    
  2. ManagedNATGatewayV2Preview 기능 플래그 등록

    ManagedNATGatewayV2Preview 명령을 사용하여 az feature register 기능 플래그를 등록합니다.

    az feature register --namespace "Microsoft.ContainerService" --name "ManagedNATGatewayV2Preview"
    

    명령을 사용하여 등록에 성공했는지 확인합니다 az feature show . 등록을 완료하는 데 몇 분 정도 걸립니다.

    az feature show --namespace "Microsoft.ContainerService" --name "ManagedNATGatewayV2Preview"
    

    기능이 Registered 표시되면 Microsoft.ContainerService 명령을 사용하여 az provider register 리소스 공급자의 등록을 새로 고칩니다.

    다음 명령은 필요한 리소스 그룹, NAT 게이트웨이에 연결할 공용 IP 및 공용 IP 접두사 리소스 및 관리되는 StandardV2 NAT 게이트웨이가 있는 AKS 클러스터를 만듭니다.

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

    export RANDOM_SUFFIX=$(openssl rand -hex 3)
    export MY_RG="myResourceGroup$RANDOM_SUFFIX"
    export MY_AKS="myNatV2Cluster$RANDOM_SUFFIX"
    export MY_IP="myNatOutboundIP$RANDOM_SUFFIX"
    export MY_IP_PREFIX="myNatOutboundIPPrefix$RANDOM_SUFFIX"
    az group create --name $MY_RG --location "eastus2"
    
  4. az network public-ip create 명령을 사용하여 영역 중복 IPv4 공용 IP 주소 및 공용 IP 접두사를 생성합니다. $MY_IP$MY_IP_PREFIX을(를) 관리되는 StandardV2 NAT 게이트웨이의 아웃바운드 IP로 사용하기 위해 저장합니다.

    export MY_IP_ID=$(az network public-ip create \
        --resource-group $MY_RG \
        --name $MY_IP \
        --location eastus2 \
        --sku StandardV2 \
        --allocation-method Static \
        --version IPv4 \
        --zone 1 2 3 \
        --query id \
        --output tsv)
    
    export MY_IP_PREFIX_ID=$(az network public-ip prefix create \
        --resource-group $MY_RG \
        --name $MY_IP_PREFIX \
        --location eastus2 \
        --length 31 \
        --sku StandardV2 \
        --version IPv4 \
        --zone 1 2 3 \
        --query id \
        --output tsv)
    
  5. AKS 클러스터를 만들고 공용 IP 주소($MY_IP_ID) 및 공용 IP 접두사($MY_IP_PREFIX_ID)를 참조합니다.

    az aks create \
        --resource-group $MY_RG \
        --name $MY_AKS \
        --node-count 3 \
        --outbound-type managedNATGatewayV2 \
        --nat-gateway-outbound-ips $MY_IP_ID \
        --nat-gateway-outbound-ip-prefixes $MY_IP_PREFIX_ID \
        --nat-gateway-idle-timeout 4 \
        --generate-ssh-keys
    

명령어 az aks update--nat-gateway-outbound-ips, --nat-gateway-outbound-ip-prefixes, --nat-gateway-managed-outbound-count, --nat-gateway-managed-outbound-ipv6-count, 또는 --nat-gateway-idle-timeout 매개 변수와 함께 사용하여 아웃바운드 IP, 아웃바운드 IP 접두사, 관리되는 아웃바운드 IP 수, 또는 유휴 시간 제한을 업데이트합니다. managedNATGatewayV2 만든 후 고객 정의 및 관리형 아웃바운드 IP 주소 간에 전환하도록 업데이트할 수 없습니다. 아웃바운드 IP 구성은 StandardV2 NAT 게이트웨이가 처음 만들어지고 변경할 수 없는 상태로 유지되는 경우에 결정됩니다.

를 사용하여 AKS 클러스터 만들기 managedNATgateway

  • 명령 az aks create--outbound-type managedNATGateway을(를) 사용하여 관리되는 표준 NAT 게이트웨이로 AKS 클러스터를 만듭니다. --nat-gateway-managed-outbound-ip-count--nat-gateway-idle-timeout 매개 변수입니다. NAT 게이트웨이가 특정 가용성 영역에서 작동하도록 하려면, --zones를 사용하여 해당 영역을 지정하세요.

  • 관리되는 NAT Gateway 리소스는 여러 가용성 영역에서 사용할 수 없습니다. managedNATgatewayV2을(를) 사용하는 것을 고려하십시오. 영역 중복 아웃바운드 연결의 경우.

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

를 사용하여 AKS 클러스터 만들기 userAssignedNatGateway

이 구성에는 자체 네트워킹(Azure CNI을 통해)이 필요하며 NAT 게이트웨이가 서브넷에 미리 구성되어 있어야 합니다. 기본 및 StandardV2 NAT 게이트웨이는 모두 지원됩니다. 다음 명령은 AKS 클러스터에 대한 StandardV2 NAT 게이트웨이 리소스를 배포하는 데 필요한 리소스를 만듭니다.

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

    export RANDOM_SUFFIX=$(openssl rand -hex 3)
    export MY_RG="myResourceGroup$RANDOM_SUFFIX"
    az group create --name $MY_RG --location southcentralus
    
  2. 네트워크 권한에 대한 관리 ID를 만들고 나중에 사용할 수 있도록 ID를 $IDENTITY_ID에 저장합니다.

    export IDENTITY_NAME="myNatClusterId$RANDOM_SUFFIX"
    export IDENTITY_ID=$(az identity create \
        --resource-group $MY_RG \
        --name $IDENTITY_NAME \
        --location southcentralus \
        --query id \
        --output tsv)
    

    결과:

    /xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myNatClusterIdxxx
    
  3. 명령을 사용하여 NAT 게이트웨이에 대한 StandardV2 공용 IP를 만듭니다 az network public-ip create . StandardV2 NAT 게이트웨이에는 StandardV2 공용 IP 주소가 필요합니다.

    export PIP_NAME="myNatGatewayPip$RANDOM_SUFFIX"
    az network public-ip create \
        --resource-group $MY_RG \
        --name $PIP_NAME \
        --location southcentralus \
        --allocation-method Static \
        --version IPv4 \
        --zone 1 2 3 \
        --sku standard-v2
    
  4. 명령을 사용하여 StandardV2 NAT 게이트웨이를 만듭니다 az network nat gateway create .

    export NATGATEWAY_NAME="myNatGateway$RANDOM_SUFFIX"
    az network nat gateway create \
        --resource-group $MY_RG \
        --name $NATGATEWAY_NAME \
        --location southcentralus \
        --public-ip-addresses $PIP_NAME \
        --sku StandardV2
        --idle-timeout 4
    

    중요합니다

    영역 중복성을 보장하려면 지역의 여러 가용성 영역에 걸쳐 있는 StandardV2 NAT 게이트웨이 리소스를 배포하는 것이 좋습니다. 이렇게 하면 단일 영역이 실패하더라도 아웃바운드 연결이 계속됩니다. StandardV2 NAT 게이트웨이 및 이점에 대한 자세한 내용은 StandardV2 NAT 게이트웨이를 참조하세요. 이에 비해 표준 NAT 게이트웨이 리소스는 배포된 가용성 영역 내에서만 복원력을 제공합니다.

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

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

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

    export AKS_NAME="myNatCluster$RANDOM_SUFFIX"
    az aks create \
        --resource-group $MY_RG \
        --name $AKS_NAME \
        --location southcentralus \
        --network-plugin azure \
        --vnet-subnet-id $SUBNET_ID \
        --outbound-type userAssignedNATGateway \
        --assign-identity $IDENTITY_ID \
        --generate-ssh-keys
    

Windows 아웃바운드NAT 사용 안 함

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

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

필수 조건

  • v1.26 이상이 있는 기존 AKS 클러스터. Kubernetes 버전 1.25 이하를 사용하는 경우 배포 구성을 업데이트해야 합니다.

제한 사항

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

참고

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

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

Windows 아웃바운드NAT를 수동으로 사용하지 않도록 설정

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

    참고

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

    다음 명령은 기존 AKS 클러스터에 Windows 노드 풀을 추가하여 OutboundNAT를 사용하지 않도록 설정합니다.

      export WIN_NODEPOOL_NAME="win$(head -c 1 /dev/urandom | xxd -p)"
      az aks nodepool add \
        --resource-group $MY_RG \
        --cluster-name $MY_AKS \
        --name $WIN_NODEPOOL_NAME \
        --node-count 3 \
        --os-type Windows \
        --disable-windows-outbound-nat
    

    결과:

    {
      "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.ContainerService/managedClusters/myNatClusterxxx/agentPools/mynpxxx",
      "name": "mynpxxx",
      "osType": "Windows",
      "provisioningState": "Succeeded",
      "resourceGroup": "myResourceGroupxxx",
      "type": "Microsoft.ContainerService/managedClusters/agentPools"
    }
    

다음 단계

Azure NAT 게이트웨이 대한 자세한 내용은 Azure NAT 게이트웨이 참조하세요.