前不久给公司搭测试环境,其中涉及到了某组件在容器中使用 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. SPSS学习系列之SPSS Statistics导入读取数据(多种格式)(图文详解)

    不多说,直接上干货! SPSS Statistics导入读取数据的步骤: 文件  ->  导入数据 成功! 欢迎大家,加入我的微信公众号:大数据躺过的坑     免费给分享       同时,大 ...

  2. 深度学习(四) softmax函数

    softmax函数 softmax用于多分类过程中,它将多个神经元的输出,映射到(0,1)区间内,可以看成概率来理解,从而来进行多分类! 假设我们有一个数组,V,Vi表示V中的第i个元素,那么这个元素 ...

  3. 深度学习(一) BP神经网络

    怎样理解非线性变换和多层网络后的线性可分,神经网络的学习就是学习如何利用矩阵的线性变换加激活函数的非线性变换 线性可分: 一维情景:以分类为例,当要分类正数.负数.零,三类的时候,一维空间的直线可以找 ...

  4. Velocity工作原理解析和优化

    在MVC开发模式下,View离不开模板引擎,在Java语言中模板引擎使用得最多是JSP.Velocity和FreeMarker,在MVC编程开发模式中,必不可少的一个部分是V的部分.V负责前端的页面展 ...

  5. Dubbo源码解读

    1.提升SOA的微服务架构设计能力   通过读dubbo源码是一条非常不错的通往SOA架构设计之路,毕竟SOA的服务治理就是dubbo首先提出来的,比起你去看市面上的SOA微服务架构的书籍,学到的架构 ...

  6. mvn pom

    使用本地指定目录下jar包 <dependency> <groupId>com.myself.abc</groupId> <artifactId>sam ...

  7. 响应式下的雪碧图解决方案 - 活用background-size / background-position

    一.概述 在传统的居中布局时,我们常用background-position这个属性来进行雪碧图的定位,在减少数据量的同时,保证准确定位.在移动端使用越来越重的现在,以往的传统定位,已经无法达到目的, ...

  8. IE浏览器上传文件后返回结果会自动弹出下载框

    服务器使用的是node,其它语言的后台没测试过. 在IE低版本浏览器下,当你上传一个文件后后台会返回一些数据,但是IE浏览器会弹出下载提示. 这个问题是之前处理的了,没有细究,今天有人问到这个问题,顺 ...

  9. [转]Grunt 新手一日入门

    本文转自:http://yujiangshui.com/grunt-basic-tutorial/ 当时学习 Grunt 的时候,真是很头疼.分了两个时间段,学习了两次才硬啃下来,之后才能用在项目中. ...

  10. LINQ的查询标准操作汇总

    记录LINQ的查询标准操作