Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом руководстве показано, как контейнеризировать существующее приложение ASP.NET и упаковать его в виде приложения Service Fabric. Запустите контейнеры локально в кластере разработки Service Fabric, а затем разверните приложение в Azure. Приложение сохраняет данные в базе данных SQL Azure.
В этом руководстве описано, как:
- Контейнеризация существующего приложения с помощью Visual Studio
- Создание базы данных в службе "База данных SQL Azure"
- Создание реестра контейнеров Azure
- Развертывание приложения Service Fabric в Azure
Примечание.
Мы рекомендуем использовать модуль Azure Az PowerShell для взаимодействия с Azure. Сведения о начале работы см. в статье "Установка Azure PowerShell". Чтобы узнать, как перейти на модуль Az PowerShell, см. статью Миграция Azure PowerShell с AzureRM на Az.
Предпосылки
- Если у вас еще нет подписки Azure, создайте бесплатную учетную запись.
- Включение функций Windows Hyper-V и контейнеров.
- Установите Docker Desktop для Windows , чтобы можно было запускать контейнеры в Windows 10.
- Установите среду выполнения Service Fabric версии 6.2 или более поздней версии и пакет SDK Service Fabric версии 3.1 или более поздней.
- Установите Visual Studio и включите рабочие нагрузки разработки Azure и ASP.NET и веб-разработки.
- Установка Azure PowerShell
Скачивание и запуск Fabrikam Fibre CallCenter
Скачайте пример приложения Fabrikam Fibre CallCenter из GitHub.
Убедитесь, что приложение Fabrikam Fiber CallCenter собирается и выполняется без ошибок. Запустите Visual Studio от имени администратора и откройте файл VS2015\FabrikamFiber.CallCenter.sln . Нажмите клавишу F5, чтобы запустить и отладить приложение.
Создание базы данных SQL Azure
При запуске приложения Fabrikam Fibre CallCenter в рабочей среде данные необходимо сохранить в базе данных. В настоящее время нет способа гарантировать постоянные данные в контейнере, поэтому нельзя хранить рабочие данные в SQL Server в контейнере.
Мы рекомендуем базу данных SQL Azure. Чтобы настроить и запустить управляемую базу данных SQL Server в Azure, выполните следующий сценарий. При необходимости измените переменные скрипта. clientIP — это IP-адрес компьютера разработки. Запишите имя сервера, выведенное скриптом.
$subscriptionID="<subscription ID>"
# Sign in to your Azure account and select your subscription.
Login-AzAccount -SubscriptionId $subscriptionID
# The data center and resource name for your resources.
$dbresourcegroupname = "fabrikam-fiber-db-group"
$location = "southcentralus"
# The server name: Use a random value or replace with your own value (do not capitalize).
$servername = "fab-fiber-$(Get-Random)"
# Set an admin login and password for your database.
# The login information for the server.
$adminlogin = "ServerAdmin"
$password = "Password@123"
# The IP address of your development computer that accesses the SQL DB.
$clientIP = "<client IP>"
# The database name.
$databasename = "call-center-db"
# Create a new resource group for your deployment and give it a name and a location.
New-AzResourceGroup -Name $dbresourcegroupname -Location $location
# Create the SQL server.
New-AzSqlServer -ResourceGroupName $dbresourcegroupname `
-ServerName $servername `
-Location $location `
-SqlAdministratorCredentials $(New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $adminlogin, $(ConvertTo-SecureString -String $password -AsPlainText -Force))
# Create the firewall rule to allow your development computer to access the server.
New-AzSqlServerFirewallRule -ResourceGroupName $dbresourcegroupname `
-ServerName $servername `
-FirewallRuleName "AllowClient" -StartIpAddress $clientIP -EndIpAddress $clientIP
# Create the database in the server.
New-AzSqlDatabase -ResourceGroupName $dbresourcegroupname `
-ServerName $servername `
-DatabaseName $databasename `
-RequestedServiceObjectiveName "S0"
Write-Host "Server name is $servername"
Подсказка
Если вы находитесь за корпоративным брандмауэром, IP-адрес компьютера разработки может не быть IP-адресом, предоставляемым в Интернете. Чтобы убедиться, что база данных имеет правильный IP-адрес правила брандмауэра, перейдите на портал Azure и найдите базу данных в разделе "Базы данных SQL". Щелкните его имя, а затем в разделе "Обзор" щелкните "Задать брандмауэр сервера". Ip-адрес клиента — это IP-адрес компьютера разработки. Убедитесь, что он соответствует IP-адресу в правиле AllowClient.
Обновление веб-конфигурации
Вернитесь в проект FabrikamFiber.Web , обновите строку подключения в файлеweb.config , чтобы указать SQL Server в контейнере. Обновите часть сервера строки подключения, чтобы она была именем сервера, созданного предыдущим скриптом. Это должно быть похоже на "fab-fiber-751718376.database.windows.net". В следующем XML необходимо обновить только connectionString атрибут, providerName а name атрибуты не нужно изменять.
<add name="FabrikamFiber-Express" connectionString="Server=<server name>,1433;Initial Catalog=call-center-db;Persist Security Info=False;User ID=ServerAdmin;Password=Password@123;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" providerName="System.Data.SqlClient" />
<add name="FabrikamFiber-DataWarehouse" connectionString="Server=<server name>,1433;Initial Catalog=call-center-db;Persist Security Info=False;User ID=ServerAdmin;Password=Password@123;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" providerName="System.Data.SqlClient" />
Примечание.
Вы можете использовать любой SQL Server, который вы предпочитаете для локальной отладки, если он доступен от узла. Однако localdb не поддерживает container -> host обмен данными. Если вы хотите использовать другую базу данных SQL при создании сборки выпуска веб-приложения, добавьте в файл web.release.config еще одну строку подключения.
Помещение приложения в контейнер
Щелкните правой кнопкой мыши проект >, затем выберите Добавить>поддержка оркестрации контейнеров. Выберите Service Fabric в качестве оркестратора контейнеров и нажмите кнопку "ОК".
Если появится запрос, нажмите кнопку "Да" , чтобы переключить Docker на контейнеры Windows.
В решении создается новый проект приложения Service Fabric FabrikamFiber.CallCenterApplication . Файл Dockerfile добавляется в существующий проект FabrikamFiber.Web . Каталог PackageRoot также добавляется в проект FabrikamFiber.Web , содержащий манифест службы и параметры для новой веб-службы FabrikamFiber.Web.
Теперь контейнер готов к сборке и упаковке в приложении Service Fabric. После создания образа контейнера на вашем компьютере, его можно отправить в любой реестр контейнеров и загрузить на любой хост для запуска.
Локальное выполнение контейнерного приложения
Нажмите клавишу F5 , чтобы запустить и отладить приложение в контейнере в локальном кластере разработки Service Fabric. Нажмите кнопку "Да" , если появится поле сообщения с просьбой предоставить группе ServiceFabricAllowedUsers разрешения на чтение и выполнение разрешений в каталоге проекта Visual Studio.
Если F5 запускает исключение, например следующее, правильный IP-адрес не добавлен в брандмауэр базы данных Azure.
System.Data.SqlClient.SqlException
HResult=0x80131904
Message=Cannot open server 'fab-fiber-751718376' requested by the login. Client with IP address '123.456.789.012' is not allowed to access the server. To enable access, use the Windows Azure Management Portal or run sp_set_firewall_rule on the master database to create a firewall rule for this IP address or address range. It may take up to five minutes for this change to take effect.
Source=.Net SqlClient Data Provider
StackTrace:
<Cannot evaluate the exception stack trace>
Чтобы добавить соответствующий IP-адрес в брандмауэр базы данных Azure, выполните следующую команду.
# The IP address of your development computer that accesses the SQL DB.
$clientIPNew = "<client IP from the Error Message>"
# Create the firewall rule to allow your development computer to access the server.
New-AzSqlServerFirewallRule -ResourceGroupName $dbresourcegroupname `
-ServerName $servername `
-FirewallRuleName "AllowClientNew" -StartIpAddress $clientIPNew -EndIpAddress $clientIPNew
Создание реестра контейнеров
Теперь, когда приложение выполняется локально, начните подготовку к развертыванию в Azure. Образы контейнеров должны храниться в реестре контейнеров. Создайте реестр контейнеров Azure с помощью следующего сценария. Имя реестра контейнеров отображается другими подписками Azure, поэтому оно должно быть уникальным. Перед развертыванием приложения в Azure необходимо отправить образ контейнера в этот реестр. При развертывании приложения в кластере в Azure образ контейнера извлекается из этого реестра.
# Variables
$acrresourcegroupname = "fabrikam-acr-group"
$location = "southcentralus"
$registryname="fabrikamregistry$(Get-Random)"
New-AzResourceGroup -Name $acrresourcegroupname -Location $location
$registry = New-AzContainerRegistry -ResourceGroupName $acrresourcegroupname -Name $registryname -EnableAdminUser -Sku Basic
Создание кластера Service Fabric в Azure
Приложения Service Fabric работают в кластере, объединяющем группу виртуальных или физических машин. Прежде чем развернуть приложение в Azure, создайте кластер Service Fabric в Azure.
Вы можете:
- Создайте тестовый кластер из Visual Studio. Этот параметр позволяет создать безопасный кластер непосредственно из Visual Studio с предпочитаемыми конфигурациями.
- Создание безопасного кластера из шаблона
В этом руководстве создается кластер из Visual Studio, который идеально подходит для тестовых сценариев. Если вы создаете кластер другим способом или используете существующий кластер, вы можете скопировать и вставить конечную точку подключения или выбрать ее из подписки.
Перед началом работы откройте FabrikamFiber.Web —> PackageRoot —> ServiceManifest.xml в обозревателе решений. Обратите внимание на порт для веб-интерфейса, указанного в Endpoint.
При создании кластера:
Щелкните правой кнопкой мыши проект приложения FabrikamFiber.CallCenterApplication в обозревателе решений и выберите "Опубликовать".
Войдите с помощью учетной записи Azure, чтобы получить доступ к подпискам.
Под раскрывающимся списком для конечной точки подключения выберите параметр "Создать кластер...
В диалоговом окне "Создание кластера " измените следующие параметры:
a. Укажите имя кластера в поле "Имя кластера ", а также подписку и расположение, которое вы хотите использовать. Запишите имя группы ресурсов кластера.
b. Необязательно. Можно изменить количество узлов. По умолчанию у вас есть три узла, необходимые для тестирования сценариев использования Service Fabric.
c. Перейдите на вкладку "Сертификат ". На этой вкладке введите пароль для защиты сертификата кластера. Этот сертификат помогает защитить кластер. Вы также можете изменить путь к месту сохранения сертификата. Visual Studio также может импортировать сертификат для вас, так как это обязательный шаг для публикации приложения в кластере.
Примечание.
Запишите путь к папке, в которой импортируется этот сертификат. Следующий шаг после создания кластера — импортировать этот сертификат.
d. Перейдите на вкладку "Сведения о виртуальной машине ". Укажите пароль, который вы хотите использовать для виртуальных машин, составляющих кластер. Имя пользователя и пароль можно использовать для удаленного подключения к виртуальным машинам. При необходимости необходимо также выбрать размер виртуальной машины и изменить образ виртуальной машины.
Это важно
Выберите SKU, поддерживающий запуск контейнеров. Ос Windows Server на узлах кластера должна быть совместима с ОС Windows Server контейнера. Дополнительные сведения см. в статье о совместимости контейнерной ОС Windows Server и ОС узла. По умолчанию в этом руководстве создается образ Docker на основе Windows Server 2016 LTSC. Контейнеры на основе этого образа будут работать в кластерах, созданных с помощью Центра обработки данных Windows Server 2016 с контейнерами. Однако если вы создаете кластер или используете существующий кластер на основе другой версии Windows Server, необходимо изменить образ ОС, на который основан контейнер. Откройте файл dockerfile в проекте FabrikamFiber.Web, закомментируйте любую существующую
FROMинструкцию на основе предыдущей версии Windows Server и добавьтеFROMинструкцию на основе тега требуемой версии на странице DockerHub Windows Server Core. Дополнительные сведения о выпусках Windows Server Core, временной шкале поддержки и использовании версий см. в сведениях о выпуске Windows Server Core.д) На вкладке "Дополнительно " выведите список портов приложения, которые нужно открыть в подсистеме балансировки нагрузки при развертывании кластера. Это порт, который вы заметили перед началом создания кластера. Вы также можете добавить существующий ключ Application Insights, чтобы использовать его для маршрутизации файлов журналов приложений.
е) После изменения параметров нажмите кнопку "Создать ".
Создание занимает несколько минут; в окне вывода будет указано, когда кластер полностью создан.
Установка импортированного сертификата
Установите сертификат, импортированный в рамках шага создания кластера, в расположение хранилища Текущий пользователь и введите пароль закрытого ключа, который вы указали.
Чтобы подтвердить установку, откройте "Управление сертификатами пользователей" на панели управления и убедитесь, что сертификат установлен в разделе "Сертификаты " Текущий пользователь ->Личные>сертификаты". Сертификат должен иметь вид [имя кластера]. [Расположение кластера].cloudapp.azure.com, например fabrikamfibercallcenter.southcentralus.cloudapp.azure.com.
Разрешить приложению работать в Azure для доступа к базе данных SQL
Ранее вы создали правило брандмауэра SQL для предоставления доступа к приложению, работающему локально. Затем необходимо включить приложение, работающее в Azure, для доступа к базе данных SQL. Создайте конечную точку службы виртуальной сети для кластера Service Fabric, а затем создайте правило, чтобы разрешить этой конечной точке доступ к базе данных SQL. Обязательно укажите переменную группы ресурсов кластера, которую вы заметили при создании кластера.
# Create a virtual network service endpoint
$clusterresourcegroup = "<cluster resource group>"
$resource = Get-AzResource -ResourceGroupName $clusterresourcegroup -ResourceType Microsoft.Network/virtualNetworks | Select-Object -first 1
$vnetName = $resource.Name
Write-Host 'Virtual network name: ' $vnetName
# Get the virtual network by name.
$vnet = Get-AzVirtualNetwork `
-ResourceGroupName $clusterresourcegroup `
-Name $vnetName
Write-Host "Get the subnet in the virtual network:"
# Get the subnet, assume the first subnet contains the Service Fabric cluster.
$subnet = Get-AzVirtualNetworkSubnetConfig -VirtualNetwork $vnet | Select-Object -first 1
$subnetName = $subnet.Name
$subnetID = $subnet.Id
$addressPrefix = $subnet.AddressPrefix
Write-Host "Subnet name: " $subnetName " Address prefix: " $addressPrefix " ID: " $subnetID
# Assign a Virtual Service endpoint 'Microsoft.Sql' to the subnet.
$vnet = Set-AzVirtualNetworkSubnetConfig `
-Name $subnetName `
-AddressPrefix $addressPrefix `
-VirtualNetwork $vnet `
-ServiceEndpoint Microsoft.Sql | Set-AzVirtualNetwork
$vnet.Subnets[0].ServiceEndpoints; # Display the first endpoint.
# Add a SQL DB firewall rule for the virtual network service endpoint
$subnet = Get-AzVirtualNetworkSubnetConfig `
-Name $subnetName `
-VirtualNetwork $vnet;
$VNetRuleName="ServiceFabricClusterVNetRule"
$vnetRuleObject1 = New-AzSqlServerVirtualNetworkRule `
-ResourceGroupName $dbresourcegroupname `
-ServerName $servername `
-VirtualNetworkRuleName $VNetRuleName `
-VirtualNetworkSubnetId $subnetID;
Развертывание приложения в Azure
Теперь, когда приложение готово, его можно развернуть в кластере в Azure непосредственно из Visual Studio. В обозревателе решений щелкните правой кнопкой мыши проект приложения FabrikamFiber.CallCenterApplication и выберите "Опубликовать". В конечной точке подключения выберите конечную точку созданного ранее кластера. В реестре контейнеров Azure выберите созданный ранее реестр контейнеров. Нажмите кнопку "Опубликовать", чтобы развернуть приложение в кластере в Azure.
Следуйте ходу развертывания в окне вывода. При развертывании приложения откройте браузер и введите адрес кластера и порт приложения. Например: http://fabrikamfibercallcenter.southcentralus.cloudapp.azure.com:8659/.
Если страница не загружается или не может запрашивать сертификат, попробуйте открыть путь обозревателя, например, https://fabrikamfibercallcenter.southcentralus.cloudapp.azure.com:19080/Explorer и выберите только что установленный сертификат.
Настройте непрерывную интеграцию и развертывание (CI/CD) с кластером Service Fabric.
Сведения о том, как использовать Azure DevOps для настройки развертывания приложений CI/CD в кластере Service Fabric, см. в руководстве по развертыванию приложения с помощью CI/CD в кластере Service Fabric. Процесс, описанный в руководстве, применяется также и к этому проекту (FabrikamFiber), просто пропустите скачивание примера голосования и используйте FabrikamFiber как имя репозитория вместо Voting.
Очистка ресурсов
Если все готово, удалите все созданные ресурсы. Самый простой способ — удалить группы ресурсов, содержащие кластер Service Fabric, базу данных SQL Azure и реестр контейнеров Azure.
$dbresourcegroupname = "fabrikam-fiber-db-group"
$acrresourcegroupname = "fabrikam-acr-group"
$clusterresourcegroupname="fabrikamcallcentergroup"
# Remove the Azure SQL DB
Remove-AzResourceGroup -Name $dbresourcegroupname
# Remove the container registry
Remove-AzResourceGroup -Name $acrresourcegroupname
# Remove the Service Fabric cluster
Remove-AzResourceGroup -Name $clusterresourcegroupname
Дальнейшие действия
Из этого руководства вы узнали, как:
- Контейнеризация существующего приложения с помощью Visual Studio
- Создание базы данных в службе "База данных SQL Azure"
- Создание реестра контейнеров Azure
- Развертывание приложения Service Fabric в Azure
В следующей части руководства вы узнаете, как развернуть приложение контейнера с помощью CI/CD в кластере Service Fabric.