Как добавить идентификатор управляемой службы в контейнер, размещенный внутри Azure VM Scaleset или Service Fabric? - PullRequest
0 голосов
/ 30 сентября 2018

Я хочу использовать MSI, например, для доступа к KeyVault в приложениях (в частности, для меня: среда выполнения функций Azure), размещенных внутри контейнеров, размещенных в VMSS Azure Service Fabric.

Что мне нужно сделать, чтобыдостичь этого?

1 Ответ

0 голосов
/ 30 сентября 2018

на основе подсказки по этой проблеме :

Шаг 1 - добавить идентификатор в VMSS

Расширить шаблон ARM для кластеров Microsoft.Compute/virtualMachineScaleSetsресурс.Добавьте элемент identity на корневой уровень ресурса, как при properties

...
  "identity": {
    "type": "SystemAssigned"
  },      
...

(Повторно) разверните кластер.

Шаг 2 - добавьте маршрутизацию кконтейнеры

В контейнерах Windows маршрутизация к конечной точке MSI по умолчанию не работает.Для этого я добавил сценарий ввода, например Entry.PS1 (не забудьте добавить исходный ENTRYPOINT вашего контейнера - ServiceMonitor.exe в моем случае, потому что у меня есть контейнер IIS):

Write-Host "adding route for Managed Service Identity"
$gateway = (Get-NetRoute | Where-Object {$_.DestinationPrefix -eq '0.0.0.0/0'}).NextHop
$arguments = 'add','169.254.169.0','mask','255.255.255.0',$gateway
&'route' $arguments

$response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net%2F' -Method GET -Headers @{Metadata="true"} -UseBasicParsing
Write-Host "MSI StatusCode :" $response.StatusCode

C:\ServiceMonitor.exe w3svc

и изменилDockerfile / container ENTRY:

...
ENTRYPOINT ["powershell.exe","C:\\entry.PS1"]

Справочная информация: добавление route add не на уровне точки входа выполнит инструкцию во время сборки и добавит маршрут к хосту / контейнеру сборки

Шаг 3 - дополнительные узлы VMSS с повторным изображением

Однако у меня все еще возникла проблема с существующим кластером.При обработке конечной точки токена с помощью

Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net%2F' -Method GET -Headers @{Metadata="true"} -UseBasicParsing

я по-прежнему получаю эту ошибку

Invoke-WebRequest : Unable to connect to the remote server
At line:1 char:1
+ Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oaut ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand

, чтобы исправить это, мне пришлось переизобразить узлы VMSS

...