How are you deploying to the function? VScode/DevOps? Are you deploying the Infrastructure via ARM/Bicep? These may dictate the answer below, however, I'll detail how I do this.
For a Function with private networking these are typically the required app settings:
You'll need to grab the Storage Account key from the storage account keys area.
FUNCTIONS_EXTENSION_VERSION: '~4'
FUNCTIONS_WORKER_RUNTIME: 'DOTNET-ISOLATED' // example stack runtime
AzureWebJobsStorage: 'StorageAccountKey'
WEBSITE_CONTENTSHARE: 'FunctionName' // Required ONLY if deploying via ARM/BICEP template
WEBSITE_CONTENTAZUREFILECONNECTIONSTRING: 'StorageAccountKey'
WEBSITE_DNS_SERVER: '168.63.129.16'
The two app values, whilst probably still work, are redundant: WEBSITE_CONTENTOVERVNET
, and WEBSITE_VNET_ROUTE_ALL
As these can be natively set within the Networking > Vnet Integration like so now:
In addition, the subnet must have the Microsoft.Web/sites delegated to the subnet where the virtual network integration is connected with. You mentioned the DNS zone is vNet linked, so assuming you see the relevant A records for the storage account listed then this is good.
If you are deploying via VSCode, then with the function public access set to 'disabled' you will have presumably disabled the backend SCM deployment endpoint. You can add your IP temporarily to deploy:
Function > Settings > Networking > Public Network Access: Disabled > Selected Networks > Add your IP into the rule:
https://learn.microsoft.com/en-us/azure/azure-functions/functions-app-settings#website_contentshare
https://learn.microsoft.com/en-us/azure/azure-functions/functions-app-settings#website_dns_server