Не удается подключиться к базе данных SQL Azure из экземпляров контейнера Azure

Я довольно новый в контейнерах. Я создал контейнер Windows с моим приложением внутри и запустил его локально. Приложение в контейнере подключается к базе данных SQL Azure, используя имя домена в строке подключения. SQL Server настроен на прием клиентов с любого IP-адреса и от служб Azure. Все отлично работает локально. Но когда я запускаю свой контейнер в экземплярах контейнера Azure, я получаю следующую стандартную ошибку:

При установке соединения с SQL Server произошла ошибка, связанная с сетью или экземпляром. Сервер не найден или не был доступен. Убедитесь, что имя экземпляра указано правильно и что SQL Server настроен для разрешения удаленных подключений. (поставщик: поставщик TCP, ошибка: 0 - попытка подключения не удалась, потому что подключенная сторона не ответила должным образом через некоторое время, или не удалось установить соединение, поскольку подключенный хост не смог ответить.)

1 ответ

Вам необходимо создать управляемый идентификатор https://docs.microsoft.com/en-us/azure/container-instances/container-instances-managed-identity и предоставить это разрешение для идентификатора базе данных SQL.

Затем вы можете использовать библиотеку Microsoft.Azure.Services.AppAuthentication, чтобы получить токен доступа и использовать его во время аутентификации. Это доступно только в dotnetcore 2.2 и.net 4.6 и выше.

string connectionString = "Data Source=<AZURE-SQL-SERVERNAME>; Initial Catalog=<DATABASE>;";
SqlConnection conn = new SqlConnection(connectionString);
conn.AccessToken = (new AzureServiceTokenProvider()).GetAccessTokenAsync("https://database.windows.net/").Result;
conn.Open();

Более подробную информацию можно найти по ссылкам ниже. Ни один из них явно не предназначен для ACI, но он должен быть в основном таким же с точки зрения кода, как только вы создали MSI.

https://docs.microsoft.com/en-us/azure/key-vault/service-to-service-authentication https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/tutorial-windows-vm-access-sql https://docs.microsoft.com/en-us/azure/app-service/app-service-web-tutorial-connect-msi

У меня возникла аналогичная проблема с контейнером Windows в ACI, пытающимся подключиться к базе данных SQL Azure. По какой-то причине DNS внутри контейнера не работал. Мне не удалось разрешить общедоступные DNS-имена. Внутри контейнера DNS был направлен на10.x.x.xадрес. Я никогда не устанавливал это как часть сборки образа, поэтому предполагаю, что ACI устанавливает это как часть DHCP.

Чтобы исправить это, я запустил следующее как часть моего сценария точки входа PowerShell:

$nic = Get-NetAdapter
Set-DnsClientServerAddress -InterfaceIndex $nic.IfIndex -ServerAddresses ('1.1.1.1','8.8.8.8')
Другие вопросы по тегам