我已经从microsoft / aspnet存储库创建了一个容器。 我希望在IIS中容纳一个ASP.NET 4.x Web应用程序,在该应用程序中,我能够获取登录用户访问该站点。我希望能够利用集成的Windows验证,因为这是一个内部应用程序。
我已经为容器主机创建了一个透明的网络。
此外,我还在容器内的IIS上设置了Windows身份验证。我已经阅读了有关在容器主机上创建群组管理服务帐户的信息,但我还没有这样做,也不确定这是否足够,或者我不得不采取进一步措施。
答案 0 :(得分:10)
创建组托管服务帐户(gMSA)只是您需要采取的步骤之一才能使Windows身份验证与容器一起使用。您还需要一个凭据规范,其中包含有关您创建的gMSA的信息,并且容器将使用它来交换应用程序使用的内置帐户(LocalSystem,NetworkService,ApplicationPoolIdentity)的gMSA帐户&# 39; s app pool。
实际上,最小的步骤是:
1)创建一个AD组,您可以使用该组添加将用于托管容器的计算机。
PS> New-ADGroup "Container Hosts" -GroupScope Global
PS> $group = Get-ADGroup "Container Hosts"
PS> $host = Get-ADComputer "mydockerhostmachine"
PS> Add-ADGroupMember $group -Members $host
2)创建用于您的应用的gMSA帐户:
PS> New-ADServiceAccount -name myapp -DNSHostName myapp.mydomain.local -ServicePrincipalNames http/myapp.mydomain.local -PrincipalsAllowedToRetrieveManagedPassword "Container Hosts"
PrincipalsAllowedToRetrieveManagePassword
的值应该是您在步骤1中创建的AD组的名称。
3)然后,在每个容器主机上:
一个。安装Powershell Active Directory模块并进行测试,以确保您能够从主机使用gMSA:
PS> Add-WindowsFeature RSAT-AD-PowerShell
PS> Import-Module ActiveDirectory
PS> Install-AdServiceAccount myapp
PS> Test-AdServiceAccount myapp
湾安装Credential Spec Powershell模块并创建凭证规范:
PS> Invoke-WebRequest https://raw.githubusercontent.com/Microsoft/Virtualization-Documentation/live/windows-server-container-tools/ServiceAccounts/CredentialSpec.psm1 -OutFile CredentialSpec.psm1
PS> Import-Module .\CredentialSpec.psm1
PS> New-CredentialSpec -Name myapp -AccountName myapp
℃。现在,如果一切都配置正确,您可以使用此凭据规范运行容器:
docker run --security-opt "credentialspec=file://myapp.json" -d -p
80:80 -h myapp.mydomain.local [my-image-name:tag]
上面要记住的一件事 - 确保在创建gMSA时使用的服务主体名称与容器的主机名(-h参数)匹配。否则,如果您的应用程序使用Windows身份验证访问其他域资源或服务(例如,SQL Server),则会出现问题。此外,如果要访问SQL Server等其他资源,请确保还为这些服务提供gMSA帐户的相应权限。
最后,在创建Dockerfile时,请勿尝试将gMSA帐户直接分配到您的应用池。使用其中一个内置帐户,让引擎为您更换容器中的帐户。换句话说,在Dockerfile中创建应用程序池应该看起来像这样:
RUN Import-Module WebAdministration; `
New-Item -Path IIS:\AppPools\MyAppPool; `
Set-ItemProperty -Path IIS:\AppPools\MyAppPool -Name managedRuntimeVersion -Value 'v4.0'; `
Set-ItemProperty -Path IIS:\AppPools\MyAppPool -Name processModel -value @{identitytype='ApplicationPoolIdentity'}