前不久给公司搭测试环境,其中涉及到了某组件在容器中使用 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

 // 安装 AD 的 PowerShell Module
Install-WindowsFeature RSAT-AD-PowerShell // 安装 gMSA
Install-ADServiceAccount Service1 // 测试
Test-ADServiceAccount Service1 // 显示 “True” 测试通过

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

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

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

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

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

在 Windows 容器中使用 gMSA的更多相关文章

  1. 在 Windows Server Container 中运行 Azure Storage Emulator(三):运行在容器中

    上一节中,我们已经准备好了 SQL Server,那么接下来,我们要把 ASE 放到容器里了. 首先,新建 Start.ps1,内容如下: param( [Parameter(Mandatory=$t ...

  2. 在Linux和Windows的Docker容器中运行ASP.NET Core

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 译者序:其实过去这周我都在研究这方面的内容,结果周末有事没有来得及总结为文章,Scott H ...

  3. Docker容器中运行ASP.NET Core

    在Linux和Windows的Docker容器中运行ASP.NET Core 译者序:其实过去这周我都在研究这方面的内容,结果周末有事没有来得及总结为文章,Scott Hanselman就捷足先登了. ...

  4. Docker windows nano server容器中安装ssh实现远程登录管理

    [问题] 使用ServiceMonitor.exe作为前台进程运行起来的容器无法attach. 无法远程连接到运行中的容器中进行管理. [解决方法] 在container中新建管理员用户,通过SSH实 ...

  5. 如何托管ASP.NET Core应用到Windows Service中

    (此文章同时发表在本人微信公众号"dotNET开发经验谈",欢迎右边二维码来关注.) 题记:正在构思一个中间件的设计,考虑是否既可以使用最新的技术,也可以兼顾传统的部署模式.所以有 ...

  6. 丙申年把真假美猴王囚禁在容器中跑 ASP.NET Core 1.0

    var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...

  7. Windows内核中的内存管理

    内存管理的要点 内核内存是在虚拟地址空间的高2GB位置,且由所有进程所共享,进程进行切换时改变的只是进程的用户分区的内存 驱动程序就像一个特殊的DLL,这个DLL被加载到内核的地址空间中,Driver ...

  8. Windows10下的docker安装与入门 (二)使用docker引擎在容器中运行镜像

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何 ...

  9. Windows10下的docker安装与入门 (三) 创建自己的docker镜像并且在容器中运行它

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何 ...

随机推荐

  1. 【数组】Unique Paths

    题目: A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). ...

  2. unity批量设置图片为etc2格式或者astc格式

    网上找了半天,没一个能用的,干脆自己写个,直接拷贝这个脚本就行 这个是ios版本的,安卓的话写在注释里面,去掉注释就能用了 现在ios支持一种新格式叫astc比原本的pvrtc压缩比更高,而且质量更高 ...

  3. leetcode简单题目两道(5)

    Problem Given an integer (signed bits), write a function to check whether it . Example: Given num = ...

  4. R语言数据重塑cbind+rbind+merge+ melt+cast

    R语言中的数据重塑是关于变化的数据分为行和列的方式.大多数R地数据处理的时候是通过将输入的数据作为一个数据帧进行.这是很容易提取一个数据帧的行和列数据,但在某些情况,当我们需要的数据帧的格式是不同的来 ...

  5. javascript的ajax功能的概念和示例

    AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML). 个人理解:ajax就是无刷新提交,然后得到返回内容. 对应的不使用ajax时的传统网 ...

  6. WPF的MediaElement指定Source无法播放问题解决

    最近学wpf,在使用 MediaElement 指定 Source 进行视频播放时,在源码界面可以正常显示,但运行时控件显示空白. 源码界面如下图:(可正常显示) 运行后如下图所示:(控件位置显示空白 ...

  7. forms身份认证仍然能访问html页面解决办法

    asp.net的forms身份认证保护是一个非常棒的东西,用VS2010创建一个Web应用程序即可看到范例 在web.config中配置 <authentication mode="F ...

  8. web.xml文件初始化过程

    在使用各种框架后,有时会发现不了了错误处在哪里,了解Servlet的初始化过程(也可以说是web.xml的初始化吧),也许对你对于框架的理解与报错的原因理解会有帮助 context-param > ...

  9. c# 根据父节点id,找到所有的子节点数据

    转自:https://blog.csdn.net/q107770540/article/details/7708418 查的是表 Model_info中父节点为p_id时找到所有的子节点的集合 //通 ...

  10. SpringBoot MockMvc的单元测试

    对于类的测试,可以有很多的方式进行实现,比如可以使用PostMan,使用HttpClient请求等,这里主要讲的是MockMcv的测试 一:引入依赖 <dependency> <gr ...