為您的 Azure Kubernetes Service (AKS) 叢集建立受控或使用者指派的 NAT 閘道

雖然您可以透過 Azure Load Balancer 來路由傳送輸出流量,但您能夠擁有的輸出流量多寡有數量限制。 Azure NAT 閘道允許每個 IP 位址最多 64,512 個輸出 UDP 和 TCP 流量,最多 16 個 IP 位址。

本文說明如何使用受控 NAT 閘道和使用者指派的 NAT 閘道來建立 Azure Kubernetes Service (AKS) 叢集,以用於輸出流量。 本文也會示範如何在 Windows 上停用 OutboundNAT。

開始之前

  • 確定您使用最新版的 Azure CLI
  • 請確定您使用 Kubernetes 1.20.x 版或更新版本。
  • 受控 NAT 閘道與自訂虛擬網路不相容。

以受控 NAT 閘道建立 AKS 叢集

  • 使用具有 --outbound-type managedNATGateway--nat-gateway-managed-outbound-ip-count--nat-gateway-idle-timeout 參數的 az aks create 命令,建立具有新的受控 NAT 閘道的 AKS 叢集。 如果您想要 NAT 閘道從特定可用性區域作業,請使用 --zones 指定區域。

  • 如果建立受控 NAT 閘道時未指定任何區域,則預設會將 NAT 閘道部署至「無區域」。 當 NAT 閘道放置於無區域時,Azure 會將資源放在某個區域中供您使用。 如需無區域部署模型的詳細資訊,請參閱無區域 NAT 閘道

  • 受控 NAT 閘道資源無法跨多個可用性區域使用。

      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
    
  • 使用 az aks update 命令搭配 --nat-gateway-managed-outbound-ip-count--nat-gateway-idle-timeout 參數更新輸出 IP 位址或閒置逾時。

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

以使用者指派的 NAT 閘道建立 AKS 叢集

此設定需要自備網路 (透過 KubenetAzure CNI),並在子網路上預先設定 NAT 閘道。 下列命令建立此情節所需的資源。

  1. 使用 az group create 命令建立資源群組。

    az group create --name myResourceGroup \
        --location southcentralus
    
  2. 建立網路權限的受控識別,並將識別碼儲存至 $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 閘道的公用 IP。

    az network public-ip create \
        --resource-group myResourceGroup \
        --name myNatGatewayPip \
        --location southcentralus \
        --sku standard
    
  4. 使用 az network nat gateway create 命令建立 NAT 閘道。

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

    重要

    單一 NAT 閘道資源無法跨多個可用性區域使用。 若要確保區域復原能力,建議將 NAT 閘道資源部署到每個可用性區域,並為每個區域中包含 AKS 叢集指派子網路。 如需此部署模型的詳細資訊,請參閱每個區域的 NAT 閘道。 如果未針對 NAT 閘道設定任何區域,則預設區域放置為「無區域」,其中 Azure 會將 NAT 閘道放入該區域。

  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 閘道在虛擬網路中建立子網路,並將識別碼儲存至 $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 閘道和使用 az aks create 命令的受控識別來建立 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 的輸出NAT

Windows OutboundNAT 可能會導致 AKS Pod 的特定連線和通訊問題。 範例問題為節點連接埠重複使用。 在此範例中,Windows OutboundNAT 會使用連接埠將PodIP平移為 Windows 節點主機 IP,這可能會導致無法連線到外部服務,因為連結埠耗盡的問題。

Windows 預設會啟用 OutboundNAT。 您現在可以在建立新的 Windows 代理程式集區時手動停用 OutboundNAT。

必要條件

  • 具有 v1.26 或更新版本的現有 AKS 叢集。 如果您使用 Kubernetes 1.25 版或更舊版本,則必須 更新您的部署設定

限制

  • 您無法將叢集輸出類型設定為 LoadBalancer。 您可以設定為 Nat 閘道或 UDR:
    • NAT 閘道:NAT 閘道可以自動處理 NAT 連線,而且比標準 Load Balancer 更強大。 此選項可能會產生額外費用。
    • UDR (UserDefinedRouting):設定路由規則時,您必須記住連接限制。
    • 如果您需要從負載平衡器切換至 NAT 閘道,您可以將 NAT 閘道新增至 VNet,或執行 az aks upgrade 以更新輸出類型。

注意

UserDefinedRouting 有下列限制:

  • 負載平衡器的 SNAT (必須使用預設的 OutboundNAT) 在主機 IP 上有 64 個連接埠。
  • Azure 防火牆的 SNAT (停用 OutboundNAT) 在每個公用 IP 有 2496 個連接埠。
  • 防火牆的 SNAT (停用 OutboundNAT) 在每個公用 IP 有 64512 個連接埠。
  • 如果 Azure 防火牆連接埠範圍不足以供您的應用程式使用,您必須使用 NAT 閘道。
  • 當目的地 IP 位址位於 IANA RFC 1918 的私人 IP 位址範圍或 IANA RFC 6598 的共用位址空間時,Azure 防火牆就不會使用網路規則進行 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 閘道的詳細資訊,請參閱 Azure NAT 閘道