為您的 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 閘道與自訂虛擬網路不相容。
重要
在非私人叢集中,API 伺服器叢集流量會透過叢集輸出類型路由和處理。 若要防止 API 伺服器流量以公用流量處理,請考慮使用 私人叢集,或查看 API Server VNet 整合 功能。
以受控 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 \ --generate-ssh-keys
使用
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 叢集
此設定需要自備網路 (透過 Kubenet 或 Azure CNI),並在子網路上預先設定 NAT 閘道。 下列命令建立此情節所需的資源。
使用
az group create
命令建立資源群組。az group create --name myResourceGroup \ --location southcentralus
建立網路權限的受控識別,並將識別碼儲存至
$IDENTITY_ID
供稍後使用。IDENTITY_ID=$(az identity create \ --resource-group myResourceGroup \ --name myNatClusterId \ --location southcentralus \ --query id \ --output tsv)
使用
az network public-ip create
命令建立 NAT 閘道的公用 IP。az network public-ip create \ --resource-group myResourceGroup \ --name myNatGatewayPip \ --location southcentralus \ --sku standard
使用
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 閘道放入該區域。
使用
az network vnet create
命令來建立虛擬網路。az network vnet create \ --resource-group myResourceGroup \ --name myVnet \ --location southcentralus \ --address-prefixes 172.16.0.0/20
使用 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)
使用子網路搭配 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 \ --assign-identity $IDENTITY_ID \ --generate-ssh-keys
停用 Windows 的 OutboundNAT
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 mynp \ --node-count 3 \ --os-type Windows \ --disable-windows-outbound-nat
下一步
如需 Azure NAT 閘道的詳細資訊,請參閱 Azure NAT 閘道。