1. 程式人生 > >在 Windows 容器中使用 gMSA

在 Windows 容器中使用 gMSA

imp docker -i 擁有 gms contain time ber str

  前不久給公司搭測試環境,其中涉及到了某組件在容器中使用 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