Как подключить общедоступный статический IP-адрес к службе приложений Azure
Есть 100 внешних доменов, указывающих на мое существующее приложение. Мы планируем перейти на службу приложений Azure. В этом случае мы должны попросить всех пользователей домена указать на наш новый сервис приложений. Это требовало много координации и времени.
В будущем (возможно, через 2 года) у нас есть план развертывания решения в другой службе приложений или на Azure VM, а затем мы должны повторить тот же процесс запроса внешнего владельца домена, чтобы указать новую среду развертывания.
В настоящее время мы думаем о двух решениях. Подскажите пожалуйста по тем.
- Сначала создайте общедоступный статический IP-адрес и попросите все внешние домены указать этот IP-адрес.
Решение 1:
- Присоедините этот IP-адрес к виртуальной машине Azure с очень низкой емкостью и используйте этот сервер в качестве URL-адреса перенаправления, когда бы вы ни внедрили решение, это может быть служба приложения Azure.
Решение 2:
- Можно ли подключить общедоступный статический IP-адрес к службе приложений Azure? Я знаю, что служба приложений не является службой IaaS для управления инфраструктурой. Я просмотрел некоторые статьи, чтобы установить статический IP-адрес для службы приложений. Но это отличается от того, что я требовал.
Пожалуйста, также предложите, если у вас есть какое-либо другое лучшее решение.
С уважением, Венкат
4 ответа
Для решения1 легко установить статический общедоступный IP-адрес для виртуальной машины Azure. Но может не хватить избыточности. Все службы используют только одну виртуальную машину Azure.
Я предложу решение 2: службы приложений Azure работают в том же плане обслуживания приложений, в котором используются общие вычислительные ресурсы, а экземпляры виртуальных машин доступны для масштабирования. Вы можете гибко настроить план обслуживания приложения в соответствии с вашими потребностями. Как правило, IP-адреса службы веб-приложений Azure изменяются при выполнении одного из следующих действий:
Удалите приложение и заново создайте его в другой группе ресурсов. Удалите последнее приложение в комбинации группы ресурсов и региона и создайте ее заново. Удалите существующую привязку SSL, например, при обновлении сертификата (см. Обновление сертификатов).
IP-адрес службы веб-приложений Azure не изменяется, он выглядит как "статический", если вы не выполните вышеуказанные действия и не перейдете на бесплатный уровень. Иногда, если вам нужен выделенный статический IP-адрес для вашего приложения. Вам необходимо настроить привязку SSL на основе IP.
Ссылка: Как получить статический IP-адрес для вашего веб-приложения службы приложений Windows
Нэнси, спасибо за ваше предложение. Это помогает мне доработать решение.
Три решения мы определили для этого сценария. Мы выбрали 3-е решение.
Используйте статический IP-адрес для службы приложений Azure и хотите выполнить миграцию через год или два. Вам нужно будет сообщить каждому внешнему владельцу домена, чтобы он изменил свою конечную точку на другую среду. https://docs.microsoft.com/en-us/azure/cloud-services/cloud-services-custom-domain-name-portal
CNAME может быть лучшей альтернативой, так как он сопоставляется с конкретным доменом и автоматически сопоставляется с IP-адресом вашего приложения, поэтому, если ваши облачные службы изменятся, вам не придется предпринимать никаких действий.
Создайте публичный статический IP-адрес, попросите всех внешних владельцев доменов указать этот IP-адрес. Затем создайте виртуальную машину Azure с низкой емкостью (B1ms) и подключите к ней виртуальный статический IP-адрес. Затем используйте эту виртуальную машину в качестве обратного прокси-сервера, в настоящее время она может указывать на существующую службу приложений Azure, и в будущем, где бы ни была новая среда, я буду перенаправлять в эту среду. В будущем общедоступный статический IP-адрес также можно подключить к балансировщику нагрузки или любой другой виртуальной машине Azure.
Есть ОЧЕНЬ ПРОСТОЙ способ сделать это. Просто добавьте собственный домен с привязкой на основе IP . После этого входящий IP-адрес изменится с исходного общего IP-адреса на новый IP-адрес, специфичный для вашего веб-приложения. Домен веб-сайта по умолчанию также изменится. Но после этого у вас статический IP.
Я сделал это так:
- Создайте виртуальную сеть
- Создать NAT-шлюз
- Создать общедоступный IP Создать
- Подсети для каждого приложения
- Подключить подсети к виртуальной сети
- Использовать NAT в подсетях
- Включить vnetRouteAllEnabled для каждого приложения
Бицепс для сетевой части:
param location string = resourceGroup().location
var appOne = 'app-one'
var appTwo = 'app-two'
resource publicIp 'Microsoft.Network/publicIPAddresses@2021-05-01' = {
name: 'public-ip-name'
location: location
sku: {
name: 'Standard'
}
properties: {
publicIPAddressVersion: 'IPv4'
publicIPAllocationMethod: 'Static'
idleTimeoutInMinutes: 4
}
}
resource natgateway 'Microsoft.Network/natGateways@2021-05-01' = {
name: 'natgateway-name'
location: location
sku: {
name: 'Standard'
}
properties: {
idleTimeoutInMinutes: 4
publicIpAddresses: [
{
id: publicIp.id
}
]
}
}
resource virtualNetwork 'Microsoft.Network/virtualNetworks@2021-05-01' = {
name: 'virtualNetwork'
location: location
properties: {
addressSpace: {
addressPrefixes: [
'192.168.0.0/16'
]
}
subnets: [
{
name: 'subnet-for-${appOne}'
properties: {
addressPrefix: '192.168.0.0/24'
natGateway: {
id: natgateway.id
}
delegations: [
{
name: 'delegation'
properties: {
serviceName: 'Microsoft.Web/serverfarms'
}
}
]
}
}
{
name: 'subnet-for-${appTwo}'
properties: {
addressPrefix: '192.168.1.0/24'
natGateway: {
id: natgateway.id
}
delegations: [
{
name: 'delegation'
properties: {
serviceName: 'Microsoft.Web/serverfarms'
}
}
]
}
}
]
}
}
resource prodcutsToSubnet 'Microsoft.Web/sites/networkConfig@2022-03-01' = {
name: '${appOne}/virtualNetwork'
properties: {
subnetResourceId: virtualNetwork.properties.subnets[0].id
swiftSupported: true
}
}
resource webhooksToSubnet 'Microsoft.Web/sites/networkConfig@2022-03-01' = {
name: '${appTwo}/virtualNetwork'
properties: {
subnetResourceId: virtualNetwork.properties.subnets[1].id
swiftSupported: true
}
}