前不久给公司搭测试环境,其中涉及到了某组件在容器中使用 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. 《LeetBook》leetcode题解(12):Integer to Roman[M]

    我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...

  2. Microsoft Power BI Desktop概念学习系列之Microsoft Power BI Desktop的下载和安装(图文详解)

    不多说,直接上干货! 官网 https://powerbi.microsoft.com/zh-cn/downloads/ 这里,一般用126邮箱. 因为对于163这样的邮箱是不行. 欢迎大家,加入我的 ...

  3. graphql pass arg

    ; ; var xhr = new XMLHttpRequest(); xhr.responseType = 'json'; xhr.open("POST", "http ...

  4. 让字体在div容器中垂直居中

    1. 只显示一行数据的话: 给容器设置height和line-height,并使两个值相等,再加上over-flow:hidden .test{ height:40px; line-height:40 ...

  5. python pip 安装OpenCV

    cmd pip install opencv-contrib-python -i https://pypi.mirrors.ustc.edu.cn/simple/

  6. Windows Azure上的大数据服务: HDInsight的介绍

    这个视频介绍了目前非常流行的大数据处理框架Hadoop的Windows Azure上的实现:HDInsight,以及利用MapReduce来对大数据进行分析,利用Hive进行查询,利用客户端Power ...

  7. [PY3]——时间处理——datetime | calendar

    Python3的日期/时间处理模块 datetime的格式化符号 格式化符号 表示 %y 两位数的年份表示(00-99) %Y 四位数的年份表示(000-9999) %m 月份(01-12) %d 日 ...

  8. Virtualbox/Vagrant安装

    它们分别是什么? VirtualBox: 号称是最强的免费虚拟机软件和VM类似. 不仅具有丰富的特色,而且性能也很优异. Vagrant: 是一个基于Ruby的工具,用于创建和部署虚拟化开发环境. 使 ...

  9. 题解 P1068 【分数线划定】

    由于涉及到排序和对应序号 那就定义一个结构体 结合STL模板中的sort日常沉迷sort 提示:虽然我也是蒟弱 sort是快速排序函数,有两个或三个参数, 两个参数适用于平常的数字类型,即形sort( ...

  10. Java学习--扑克牌比大小的小游戏

    实现:生成五十四张牌,然后进行洗牌,输入两名玩家,然后分别发两张牌,进行比较大小,两张牌中拥有较大一张牌的玩家获胜 Card.java代码如下: package com.cardgame; publi ...