適用於: ✔️ AKS 自動化 ✔️ AKS 標準
對大多數生產工作負載來說,AKS 自動是 AKS 的預設生產就緒預設。 AKS 自動叢集包含預先設定的受管 NAT 閘道器。
在 AKS Standard 中,當你想要叢集的 AKS 管理的出站連線時,可以建立或設定受管 NAT 閘道器。 對於自備 (BYO) 網路情境,請使用使用者指派的 NAT 閘道。
雖然您可以透過 Azure 負載均衡器路由出站流量,但您可用的出站流量流動數量有限制。 Azure NAT 閘道 支援每個 IP 位址最多 64,512 次 UDP 與 TCP 外站流量,最多可達 16 個 IP 位址。 有三種出站類型支援 NAT 閘道: managedNATGatewayV2 (預覽)、 managedNATGateway、 userAssignedNATGateway和 。
本文將教你如何建立一個包含受管理 NAT 閘道和使用者自訂 NAT 閘道來處理出站流量的 AKS 叢集。 它也會教你如何為 Windows 停用 OutboundNAT。
重要
managedNATGatewayV2 輸出類型目前為預覽版。
請參閱補充使用條款Microsoft Azure預覽,了解適用於Azure測試版、預覽版或其他尚未正式發布的功能法律術語。
必要條件
AKS 自動叢集包含預先設定的受管 NAT 閘道器。 本文的步驟主要針對 AKS 標準及自訂網路情境。
- 請確保你使用的是最新版本的 Azure CLI。
- 請確保你使用的是 Kubernetes 版本 1.20.x 或更新版本。
- 受管理的 NAT 閘道器不相容於自訂虛擬網路。
重要
在非私有叢集中,API 伺服器叢集流量會透過叢集的出站類型路由與處理。 若要防止 API 伺服器流量以公用流量處理,請考慮使用 私人叢集,或查看 API Server VNet 整合 功能。
AKS 中的管理型 NAT 閘道
AKS Automatic 使用受管 NAT 閘道作為其預先設定的生產準備預設。 如果你正在使用 AKS 標準,或需要了解 AKS 叢集中受管理 NAT 閘道器的行為,請使用這一段。
受控 NAT 閘道是由 AKS 管理的輸出選項。 AKS 建立並管理 NAT 閘道,為你的叢集節點提供出站連線。
當你想要時,可以使用受管理的 NAT 閘道:
- AKS 管理的外接連線,操作開銷較低。
- 一個對生產環境友善的預設出站路徑。
- 這比客戶管理的 NAT 閘道部署更簡單的出口管理。
- 標準的 AKS 網路模型,無需自備 NAT 閘道資源。
以受控 NAT 閘道建立 AKS 叢集
外發 IP 參數
下表說明每個出站 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 | 客戶 |
建立一個帶有受管理 StandardV2 NAT 閘道器的 AKS 叢集(managedNATGatewayV2)
重要
AKS 預覽功能可透過自願加入的方式使用。 預覽是「依現況」及「可用時」提供的,並不包括在服務等級協定和有限保固之內。 客戶支援部門會盡最大努力,部分支援 AKS 預覽。 因此,這些功能不適合實際執行用途。 如需詳細資訊,請參閱下列支援文章:
- 使用包含
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參數的指令,建立一個受管理的 AKS 叢集,並使用 StandardV2 NAT 閘道器--nat-gateway-idle-timeout。 - 當您為某個
managedNATgatewayV2設定輸出 IP 時,請使用 下列其中一種方法。 你不能同時使用Azure管理和客戶定義的外撥IP。-
Azure 管理的 IP:使用
--nat-gateway-managed-ip-outbound-count並--nat-gateway-managed-outbound-ipv6-count讓 Azure 自動代表你分配和管理外出的公共 IP。 -
客戶定義的 IP:使用
--nat-gateway-outbound-ips並--nat-gateway-outbound-ip-prefixes攜帶你自己預先配置的公共 IP 位址或前綴,讓你完全掌控用於外撥流量的特定地址。 StandardV2 NAT 閘道器需要使用新的 StandardV2 公共 IP。 現有的標準 SKU 公用 IP 無法與 StandardV2 NAT 閘道相容。
-
Azure 管理的 IP:使用
安裝 aks-preview Azure CLI 擴充功能
managedNATGatewayV2 輸出類型目前為預覽版。 若要使用此輸出類型,請安裝 aks-preview Azure CLI 擴充功能,並註冊 ManagedNATGatewayV2Preview 功能旗標。
請使用 az extension add 或 az extension update 指令安裝或更新 Azure CLI 預覽擴充功能。 Azure CLI 擴充功能的最低 aks-preview 版本是 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
註冊 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資源提供者的註冊。
建立一個帶有受管理 StandardV2 NAT 閘道器的 AKS 叢集
以下指令建立所需的資源群組、連接至 NAT 閘道的公共 IP 及公共 IP 前綴資源,以及擁有受管理 StandardV2 NAT 閘道的 AKS 叢集。
使用
az group create命令建立資源群組。# Set environment variables for resource group, AKS cluster, public IP, and public IP prefix names 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" # Create the resource group az group create --name $MY_RG --location "eastus2"使用指令
az network public-ip create建立區域冗餘的 IPv4 公共 IP 位址和公共 IP 前綴。 儲存$MY_IP並$MY_IP_PREFIX作為受管理的 StandardV2 NAT 閘道器的出站 IP。# Create a zone redundant IPv4 public IP address and store the ID to $MY_IP_ID for later use 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 publicIp.id \ --output tsv) # Create a zone redundant IPv4 public IP prefix and store the ID to $MY_IP_PREFIX_ID for later use 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)建立 AKS 叢集,並使用含有
--outbound-type managedNATGatewayV2、--nat-gateway-outbound-ips和--nat-gateway-outbound-ip-prefixes參數的az aks create命令,引用公用 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 閘道最初建立時決定的,且保持不變。
建立一個帶有受管理標準 NAT 閘道器的 AKS 叢集 (managedNATGateway)
- 使用指令(含
az aks create、--outbound-type managedNATGateway和--nat-gateway-managed-outbound-ip-count參數)建立一個 AKS 叢集,並管理標準 NAT 閘道--nat-gateway-idle-timeout。 如果你想讓 NAT 閘道器在特定可用區域外運作,請用--zones。 - 你不能在多個可用區域使用受管理的 NAT 閘道資源。 對於區域備援的輸出連線能力,請考慮使用
managedNATgatewayV2。 - 如果你在建立管理 NAT 閘道時沒有指定區域,該 NAT 閘道預設會部署到 無區域 。 當 NAT 閘道不在無區域時,Azure 會幫你把資源放在某個區域。 欲了解更多非區域部署模型,請參閱 非區域 NAT 閘道。
建立一個 AKS 叢集,包含 userAssignedNatGateway
此配置需要自帶網路(透過 Azure CNI),且 NAT 閘道必須預先設定在子網路上。 此 outbound-type 同時支援 Standard 與 StandardV2 NAT 閘道器。 以下指令會建立部署 StandardV2 NAT 閘道資源所需的資源,用於你的 AKS 叢集。
使用
az group create命令建立資源群組。# Set environment variables for resource group, AKS cluster, public IP, and public IP prefix names export RANDOM_SUFFIX=$(openssl rand -hex 3) export MY_RG="myResourceGroup$RANDOM_SUFFIX" # Create the resource group az group create --name $MY_RG --location southcentralus建立一個管理身份來管理網路權限,並將 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用這個
az network public-ip create指令為 NAT 閘道建立一個 StandardV2 公用 IP。 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請使用 以下
az network nat gateway create指令建立 StandardV2 NAT 閘道。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 閘道資源僅在部署的可用區域內提供韌性。
使用
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使用 NAT 閘道在虛擬網路中建立子網路,並將識別碼儲存至
$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)使用子網路搭配 NAT 閘道和使用
az aks create命令的受控識別來建立 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
生產考量
在生產環境中使用受管 NAT 閘道時,請規劃出站流量行為、API 伺服器存取及工作負載韌性。
- 當您希望針對大多數 AKS 工作負載採用建議的生產就緒預設選項時,請使用 AKS Automatic。
- 當你想要 AKS 管理的出站連線,但不想自備 NAT 閘道時,請使用 AKS Standard 中的受管理 NAT 閘道。
- 當你想減少 API 伺服器流量的暴露時,可以使用私有叢集或 API Server VNet 整合。
- 在上線前先確認外撥 IP 的要求。
- 如果你的工作負載依賴固定的出站位址,部署前請驗證受管理的 NAT 閘道是否符合這些要求。
- 如果你需要獨立管理 NAT,不用 AKS,就用使用者指定的 NAT 閘道器。
在 Windows 上停用 OutboundNAT
Windows OutboundNAT 可能會造成 AKS Pods 的某些連線和通訊問題。 範例問題為節點連接埠重複使用。 在此範例中,Windows OutboundNAT 使用端口將 Pod IP 轉換為 Windows 節點的主機 IP,這可能因端口耗盡問題導致與外部服務的連線不穩定。
Windows 預設啟用 OutboundNAT。 現在你可以在建立新的 Windows 代理池時手動停用 OutboundNAT。
先決條件與限制
- 你需要一個現有的 AKS 叢集,版本是 v1.26 或更新版本。 如果你使用的是 Kubernetes 版本 1.25 或更早,請 更新你的部署設定。
- 你無法將叢集出站類型設為 LoadBalancer。 您可以將它設定為 NAT 閘道或 UDR:
- NAT 閘道器:NAT 閘道器能自動處理 NAT 連線,功能比 Standard Load Balancer 更強大。 使用此選項可能會產生額外費用。
- UDR (UserDefinedRouting):設定路由規則時,您必須記住連接限制。
- 要從負載平衡器切換到 NAT 閘道器,你可以在 VNet 中新增 NAT 閘道,或是執行
az aks upgrade以更新出站類型。
注意
UserDefinedRouting 有下列限制:
- Load Balancer 的 SNAT(必須使用預設的 OutboundNAT)在主機 IP 上有 64 個埠口。
- Azure 防火牆 的 SNAT(停用 OutboundNAT)每個公共 IP 有 2,496 個埠口。
- 由 NAT Gateway 提供的 SNAT(停用 OutboundNAT)每個公用 IP 有 64,512 個連接埠。
- 如果 Azure 防火牆 的埠口範圍對你的應用程式來說不夠,你需要使用 NAT 閘道。
- 當目標 IP 位址位於 IANA RFC 1918 規定的私有 IP 位址範圍或 IANA RFC 6598 規定的共用位址空間時,Azure 防火牆不會使用網路規則進行 SNAT。
手動停用 Windows 的 OutboundNAT
在建立新的 Windows 代理池時,請使用
az aks nodepool add指令並加上--disable-windows-outbound-nat標誌,手動停用 OutboundNAT for Windows。注意
您可以使用現有的 AKS 叢集,但您可能需要更新輸出類型,並新增節點集區以啟用
--disable-windows-outbound-nat。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 閘道 與 AKS Automatic 的資訊,請參閱以下文章: