Резюме
Эта статья является частью 5 цикла статей об архитектуре виртуальных сетей и содержит подробную информацию о частной конечной точке с Azure App Service и Azure Functions App в api-management-vnet.
- Архитектура виртуальной сети 1 — Нужна ли мне виртуальная сеть?
- Архитектура виртуальной сети 2 — конвейеры развертывания
- Архитектура виртуальной сети 3 — Частная конечная точка Key Vault
- Архитектура виртуальной сети 4 — Частная конечная точка базы данных SQL
- Архитектура виртуальной сети 5 — Частная конечная точка службы приложений
- Архитектура виртуальной сети 6 — Частная конечная точка сервисной шины
- Архитектура виртуальной сети 7 — Самостоятельно размещаемый агент
TOC
- Конфигурация частной конечной точки
- Входящие и исходящие
- Ограничения доступа
- Уровень поддержки
Конфигурация частной конечной точки
- Частная конечная точка: Разверните частную конечную точку и подключите ее к App Service и Functions и их подсетям в PrivateEndpoint.bicep. И App Service, и Functions нуждаются в двух подсетях для каждой из них для целей интеграции V-net и Private Endpoint.
- В данном примере шаблона используется региональная интеграция V-net, и для нее требуется делегированная подсеть. Подсеть интеграции должна быть делегирована на
Microsoft.Web/serverFarms
. - Частная конечная точка для App Service и Function App должна иметь одну подсеть, которая не является той же подсетью, что и подсеть для интеграции V-net, согласно документации Microsoft Private Endpoint for App Service.
- В данном примере шаблона используется региональная интеграция V-net, и для нее требуется делегированная подсеть. Подсеть интеграции должна быть делегирована на
AppServiceId:existingAppService.id
FuncId:existingFunc.id
VirtualNetwork2SubnetIdAsePe:existingVnet2.properties.subnets[1].id
VirtualNetwork2SubnetIdFuncPe:existingVnet2.properties.subnets[5].id
resource VirtualNetwork2 'Microsoft.Network/virtualNetworks@2021-03-01' = {
properties: {
subnets: [
{
name: snet_name_2_ase_vi
properties: {
addressPrefix: snet_prefix_2_ase_vi
networkSecurityGroup: {
id: Nsg2AseViId
}
delegations: [
{
name: 'delegation'
properties: {
serviceName: 'Microsoft.Web/serverfarms'
}
}
]
privateEndpointNetworkPolicies: 'Disabled'
}
}
{
name: snet_name_2_ase_pe
properties: {
addressPrefix: snet_prefix_2_ase_pe
networkSecurityGroup: {
id: Nsg2AsePeId
}
privateEndpointNetworkPolicies: 'Enabled'
}
}
{
name: snet_name_2_func_vi
properties: {
addressPrefix: snet_prefix_2_func_vi
networkSecurityGroup: {
id: Nsg2FuncViId
}
delegations: [
{
name: 'delegation'
properties: {
serviceName: 'Microsoft.Web/serverfarms'
}
}
]
privateEndpointNetworkPolicies: 'Disabled'
}
}
{
name: snet_name_2_func_pe
properties: {
addressPrefix: snet_prefix_2_func_pe
networkSecurityGroup: {
id: Nsg2FuncPeId
}
privateEndpointNetworkPolicies: 'Enabled'
}
}
]
}
}
- Private DNS: Разверните Private DNS с именем DNS
privatelink.azurewebsites.net
в PrivateDns2.bicep. Служба приложений и функции могут совместно использовать одну частную зону DNS.
var pdns_name_app = 'privatelink.azurewebsites.net'
resource PrivateDnsApp 'Microsoft.Network/privateDnsZones@2020-06-01' = {
name: pdns_name_app
location: 'global'
}
- Виртуальная сетевая связь: Свяжите развернутую частную DNS с тремя виртуальными сетями в PrivateDns2.bicep. Это необходимо потому, что службы и функции приложений обращаются ко всем трем виртуальным сетям. Кроме того, виртуальные сети 1 и 2 просматриваются, а виртуальные сети 2 и 3 — тоже.
VirtualNetwork1Id:existingVnet1.id
VirtualNetwork2Id:existingVnet2.id
VirtualNetwork3Id:existingVnet3.id
resource VnetLinkApp1 'Microsoft.Network/privateDnsZones/virtualNetworkLinks@2020-06-01' = {
name: '${PrivateDnsApp.name}/${PrivateDnsApp.name}-link1'
location: 'global'
properties: {
registrationEnabled: false
virtualNetwork: {
id: VirtualNetwork1Id
}
}
}
resource VnetLinkApp2 'Microsoft.Network/privateDnsZones/virtualNetworkLinks@2020-06-01' = {
name: '${PrivateDnsApp.name}/${PrivateDnsApp.name}-link2'
location: 'global'
properties: {
registrationEnabled: false
virtualNetwork: {
id: VirtualNetwork2Id
}
}
}
resource VnetLinkApp3 'Microsoft.Network/privateDnsZones/virtualNetworkLinks@2020-06-01' = {
name: '${PrivateDnsApp.name}/${PrivateDnsApp.name}-link3'
location: 'global'
properties: {
registrationEnabled: false
virtualNetwork: {
id: VirtualNetwork3Id
}
}
}
- Частная запись DNS A: Создайте записи DNS A и установите IP-адреса развернутых частных конечных точек в PrivateDns2.bicep. Вам нужно создать две записи A для App Service и Functions, потому что обе имеют другую конечную точку сайта SCM (Source Control Manager). Об этом вы можете прочитать в документации сервиса Kudu. Обе частные конечные точки нуждаются в одинаковых конфигурациях частных IP-адресов.
output PrivateEndpointAseIpAddress string = PrivateEndpointAse.properties.customDnsConfigs[0].ipAddresses[0]
output PrivateEndpointFuncIpAddress string = PrivateEndpointFunc.properties.customDnsConfigs[0].ipAddresses[0]
resource PrivateDnsAAse 'Microsoft.Network/privateDnsZones/A@2020-06-01' = {
name: '${PrivateDnsApp.name}/${AppServiceName}'
properties: {
ttl: 3600
aRecords: [
{
ipv4Address: PrivateEndpointAseIpAddress
}
]
}
}
resource PrivateDnsAAseScm 'Microsoft.Network/privateDnsZones/A@2020-06-01' = {
name: '${PrivateDnsApp.name}/${AppServiceName}.scm'
properties: {
ttl: 3600
aRecords: [
{
ipv4Address: PrivateEndpointAseIpAddress
}
]
}
}
resource PrivateDnsAFunc 'Microsoft.Network/privateDnsZones/A@2020-06-01' = {
name: '${PrivateDnsApp.name}/${FuncName}'
properties: {
ttl: 3600
aRecords: [
{
ipv4Address: PrivateEndpointFuncIpAddress
}
]
}
}
resource PrivateDnsAFuncScm 'Microsoft.Network/privateDnsZones/A@2020-06-01' = {
name: '${PrivateDnsApp.name}/${FuncName}.scm'
properties: {
ttl: 3600
aRecords: [
{
ipv4Address: PrivateEndpointFuncIpAddress
}
]
}
}
Входящие и исходящие
App Service и Functions имеют различные сетевые функции — входящие и исходящие. Входящие работают с Private Endpoint, а исходящие — с V-net интеграцией, и для каждой из них необходимо иметь две разные подсети.
Ограничения доступа
Согласно документации Microsoft по Private Endpoints для Azure Web App, по умолчанию включение Private Endpoints для вашего Web App отключает весь публичный доступ. Вам не нужно настраивать ограничения доступа.
Уровень поддержки
В документации Microsoft по Private Endpoints for Azure Web App описаны только Basic, Standard, PremiumV2, PremiumV3, IsolatedV2, Functions Premium с поддержкой Private Endpoint.