前不久给公司搭测试环境

时间:2021-07-22 09:10:02

  前不久给公司搭测试环境,此中涉及到了某组件在容器中使用 kerberos 身份验证连接 SQL Server 数据库的问题。

  Windows 容器自己并不能插手域,但可以通过 gMSA 运行容器使容器进程拥有 gMSA 的身份,这样一来只需要在 SQL Server 里添加此 gMSA 的 login 就可以达成目的。注意必需使用 gMSA,普通 MSA 帐号在容器中使用会出问题。

  第一次创建 gMSA 帐号前,需要先创建 KDS(Key Distribute Service)根密钥(如已创建,可忽略此法式):

Add-KDSRootKey –EffectiveImmediately

  然后,你需要期待漫长的 10 个小时,完成密钥的复制……好吧,如果是做尝试,可以如此省略这 10 个小时:

Add-KdsRootKey –EffectiveTime ((get-date).addhours(-10))

  创建 gMSA:

New-ADServiceAccount -Name Service1 -DNSHostName service1.contoso.com -PrincipalsAllowedToRetrieveManagedPassword [ComputerName1$, ComputerName2$...] -KerberosEncryptionType RC4, AES128, AES256

  此中  -DNSHostName  只是一个 group 的名字,不需要把它插手到你的 DNS 中。 -PrincipalsAllowedToRetrieveManagedPassword 则是 host 你的容器的处事器名,注意 AD 上计算机名也是一个帐户,所以后边要加“$”。

  下一步,要在容器的 host 上安置 gMSA

1 // 安置 AD 的 PowerShell Module 2 Install-WindowsFeature RSAT-AD-PowerShell 3 4 // 安置 gMSA 5 Install-ADServiceAccount Service1 6 7 // 测试 8 Test-ADServiceAccount Service1 9 10 // 显示 “True” 测试通过

  接下来,,要在容器中使用 gMSA,需要为 docker 创建 CredentialSpec,我们需要 Virtualization-Documentation 中的 CredentialSpec.psm1,它在 Virtualization-Documentation/windows-server-container-tools/ServiceAccounts 中,你可以选择把整个项目 clone 下来,或者新建名为 CredentialSpec.psm1 的文本文件,然后将文件内容粘进去。然后,执行以下 PS 命令:

1 Import-Module ./CredentialSpec.psm1 2 New-CredentialSpec -Name Service1 -AccountName Service1

  接下来,可以运行容器了:

docker run -it --security-opt "credentialspec=file://Service1.json" microsoft/windowsservercore nltest /parentdomain

输出你的 AD 名称,说明运行告成。

在 Windows 容器中使用 gMSA