總結
請利用這篇文章來排查建立、部署或更新 Azure Kubernetes Service(AKS)叢集時的 InvalidResourceReference 錯誤,以便順利完成操作。
徵兆 1
當您嘗試建立 AKS 叢集時,您會收到下列錯誤訊息:
Code=「InvalidResourceReference」
Message=「Resource」
/subscriptions/<subscription-id-guid>/resourceGroups/MyResourceGroup/providers/Microsoft.Network/virtualNetworks/vnet-otcom/subnets/Subnet-AKS
由資源參考
/subscriptions/<subscription-id-guid>/resourceGroups/MC_MyResourceGroup_MyCluster-AKS_JAPANEAST/providers/Microsoft.Compute/virtualMachineScaleSets/aks-nodepool-vmss
找不到。 請確定參考的資源存在,而且這兩個資源都位於相同的區域中。詳情=[]
原因一
以下是此問題的可能原因:
不同區域中的資源之間存在不相符的情況。
徵兆 1 中的範例顯示虛擬網路和虛擬機擴展集不在相同區域中。 因為資源分布在不同區域,你無法建立 scale set 實例。
你是手動修改或刪除了引用的資源。
解決方案 1
如果不同地區的資源不匹配,請檢視資源以確保它們位於同一區域。 在這個例子中,要麼修改你建置 AKS 叢集的區域,要麼在同一區域內建立新的虛擬網路。
如果你手動修改或刪除參考的資源,可能會遇到解決這個問題的困難,因為該流程不支援手動修改 MC_ 資源群組中的底層 IaaS 資源。 你可以透過重新建立已刪除的資源,重新綁定 VMSS,然後在 AKS 叢集上觸發更新來解決這個問題。 然而,這個解決方案並不被支援,因此成功並非保證。
徵兆 2
當您嘗試更新 AKS 叢集時,您會收到下列錯誤訊息:
Code=「InvalidResourceReference」
Message=「Resource」
/subscriptions//resourceGroups/MC_MyResourceGroup/providers/Microsoft.Network/loadBalancers/kubernetes/frontendIPConfigurations/ subscription-id-guid frontendIP_ID 被資源 /subscriptions/ /resourceGroups/MC_MyResourceGroup/providers/Microsoft.Network/loadBalancers/kubernetes/ subscription-id-guid loadBalancingRules/ frontend_IP_rule 參考,但未找到。請確定參考的資源存在,而且這兩個資源都位於相同的區域中。
Message=「Resource」詳情=[]
原因 2
如果你手動修改負載平衡器的預設出站規則 aksOutboundRule ,就會發生這個問題。 這種非預期的修改通常會在你更新外撥 IP 時發生,前提是你在未使用 load-balancer-outbound-ips 參數的情況下更新叢集。
解決方案 2
使用 az aks update 參數重新執行 load-balancer-outbound-ips 命令以更新叢集。 使用公用IP的資源識別碼作為參數值。 如需詳細資訊,請參閱如何使用您自己的輸出公用IP來更新叢集。
症狀3
當你建立、擴展、升級或更新節點池時,操作會失敗,並出現 InvalidResourceReference 類似以下範例的錯誤訊息:
Code=「InvalidResourceReference」
訊息=「建立或更新 VMSS
/subscriptions/<subscription-id-guid>/resourceGroups/MC_MyResourceGroup_MyCluster/providers/Microsoft.Compute/virtualMachineScaleSets/aks-nodepool-vmss
失敗。 資源
/subscriptions/<subscription-id-guid>/resourceGroups/<vnet-resource-group>/providers/Microsoft.Network/virtualNetworks/<vnet-name>
由資源參考
/subscriptions/<subscription-id-guid>/resourceGroups/MC_MyResourceGroup_MyCluster/providers/Microsoft.Compute/virtualMachineScaleSets/aks-nodepool-vmss
未被找到。」
原因三
這個問題發生在你將叢集建立時與 AKS 叢集關聯的虛擬網路移到另一個資源群組或訂閱時。 AKS 及其底層的虛擬機器縮放集(VMSS)持續參考原始的虛擬網路資源 ID。 因此,需要 VMSS 更新的節點池操作會失敗,因為虛擬網路已無法在原始資源路徑上找到。
不支援移動 AKS 叢集的虛擬網路。 如同《 Move operation support for networking resources》中所述,如果你移動 AKS 叢集的虛擬網路,AKS 叢集就會停止運作。
解決方案 3
目前沒有受支援的方法可在移動虛擬網路後,將現有的 AKS 叢集更新為參考該虛擬網路。 Microsoft 支援服務 與 AKS 產品組無法修改叢集底層網路參考。
為了解決這個問題,請建立一個新的 AKS 叢集,參考虛擬網路目前的位置,將你的工作負載遷移到新叢集,然後停用受影響的叢集。
症狀 4
由 AKS 管理的 Bastion 操作會因 InvalidResourceReference 錯誤而失敗,該錯誤會識別出一個公共 IP 位址。
以下是錯誤訊息的範例。
Code=「InvalidResourceReference」
Message=「指定的公共 IP 位址參考 '<public-ip-resource-id>' 無效。」
原因 4
公共 IP 參考的資源 ID 或資源類型無效,或是公共 IP 不符合訂閱、區域、SKU、IP 版本或配置狀態的要求。
解決方案 4
請在 Azure 入口網站中查看該公開 IP 的屬性。
你也可以使用 Azure CLI 來檢查公開 IP 的屬性。
執行下列命令。
az network public-ip show --ids "<public-ip-resource-id>" --query "{id:id,location:location,sku:sku.name,version:publicIPAddressVersion,allocation:publicIPAllocationMethod,state:provisioningState,ipConfiguration:ipConfiguration.id}" --output json
使用有效的 Microsoft.Network/publicIPAddresses 資源 ID,且該 ID 必須與叢集的網路資源位於相同的訂用帳戶中,並與叢集位於相同的區域。 公共 IP 必須使用 Standard SKU 與 IPv4,且客戶管理的公共 IP 配置狀態必須為 Succeeded。
對於新的啟用操作,請將修正後的 ID 傳給 az aks bastion enable。 確認你的叢集是否支援管理 Bastion,且你安裝 aks-preview 的擴充套件是否支援該指令。
在 Azure CLI 中,執行以下命令。
az aks bastion enable --subscription "<cluster-subscription-id>" --resource-group "<cluster-resource-group>" --name "<cluster-name>" --bastion-public-ip "<public-ip-resource-id>"
這個 az aks bastion update 指令不支援替換現有的公共 IP 綁定。 在 Bastion 仍存在或清理未完成時變更 IP,可能會傳回 UpdateNotAllowed。 如果你需要替換現有的綁定,請聯絡 Microsoft 支援服務 尋求指引。
關於配置與使用需求,請參見 Azure Bastion 公共 IP 需求。