你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

教程 - 在系统管理的密钥表模式下部署 Active Directory 连接器

本文介绍如何在系统管理的密钥表模式下部署 Active Directory 连接器。 它是用于对 Azure Arc 启用的 SQL 托管实例启用 Active Directory 身份验证的关键组件。

系统管理的密钥表模式下的 Active Directory 连接器

在系统管理的密钥表模式下,Active Directory 连接器部署 DNS 代理服务,该服务将来自托管实例的 DNS 请求代理给两个上游 DNS 服务中的一个:

  • Active Directory DNS 服务器
  • Kubernetes DNS 服务器

除了 DNS 代理服务之外,AD 连接器还会部署一项安全支持服务,以便于与 AD 域通信,从而自动创建和管理 AD 帐户、服务主体名称 (SPN) 和密钥表。

下图显示了系统管理的密钥表模式下的 AD 连接器和 DNS 代理服务功能:

Active Directory 连接器

先决条件

在继续操作之前,必须满足以下条件:

  • 在支持的 Kubernetes 版本上部署的数据控制器实例
  • Active Directory 域
  • 一个在 Active Directory 域中预先创建的组织单位 (OU)
  • 一个 Active Directory 域服务帐户

AD 域服务帐户应拥有足够的权限,以便在 Active Directory 中提供的组织单位 (OU) 内自动创建和删除用户帐户。

向域服务帐户授予以下权限 - 权限范围为组织单位 (OU):

  • “读取所有属性”
  • 写入所有属性
  • “创建用户对象”
  • “删除用户对象”
  • 重置后代用户对象的密码

有关如何设置 OU 和 AD 帐户的详细信息,请转到使用系统管理的密钥表通过 Active Directory 身份验证部署已启用 Azure Arc 的数据服务 - 先决条件

用于在系统管理的密钥表模式下部署 Active Directory 连接器的输入

若要部署 Active Directory 连接器实例,需要从 Active Directory 域环境提供多项输入。

AD 连接器实例的 yaml 规范中提供了这些输入。

在部署 AD 连接器实例之前,必须先提供以下有关 AD 域的元数据:

  • Active Directory 域名
  • 域控制器列表(完全限定的域名)
  • DNS 服务器 IP 地址列表

以下输入字段将公开给 Active Directory 连接器规范中的用户:

  • 必需

    • spec.activeDirectory.realm 大写的 Active Directory 域名。 这是此 AD 连接器实例将与之关联的 AD 域。

    • spec.activeDirectory.domainControllers.primaryDomainController.hostname AD 域中主域控制器 (PDC) 的完全限定的域名。

      如果你不知道域中的哪个域控制器是主控制器,你可以在任何加入 AD 域的 Windows 计算机上运行以下命令:netdom query fsmo

    • spec.activeDirectory.dns.nameserverIpAddresses Active Directory DNS 服务器 IP 地址列表。 DNS 代理服务会将提供的域名中的 DNS 查询转发到这些服务器。

  • 可选

    • spec.activeDirectory.serviceAccountProvisioning 这是一个可选字段,可定义 AD 连接器部署模式,其可能的值为 manual(对于客户管理的密钥表)或 automatic(对于系统管理的密钥表)。 如果未设置此字段,默认值为 manual。 如果将该值设置为 automatic(系统管理的密钥表),系统将自动为与此 AD 连接器关联的 SQL 托管实例生成 AD 帐户和服务主体名称 (SPN),并为它们创建密钥表文件。 如果将该值设置为 manual(客户管理的密钥表),系统不会自动生成 AD 帐户和密钥表。 用户应提供密钥表文件。

    • spec.activeDirectory.ouDistinguishedName 这是一个可选字段。 不过,如果 serviceAccountProvisioning 的值设置为 automatic,则该字段在特定条件下是必需的字段。 此字段接受用户在部署 AD 连接器之前必须在 Active Directory 域中创建的组织单位 (OU) 的可分辨名称 (DN)。 它用于存储 Active Directory 域中 SQL 托管实例的系统生成的 AD 帐户。 该值的示例如下所示:OU=arcou,DC=contoso,DC=local

    • spec.activeDirectory.domainServiceAccountSecret 这是一个可选字段。 如果将 serviceAccountProvisioning 的值设置为 automatic,则该字段在特定条件下是必需的字段。 此字段接受包含在部署 AD 连接器之前创建的域服务帐户的用户名和密码的 Kubernetes 机密的名称。 系统将使用此帐户在 OU 中生成其他 AD 帐户,并对这些 AD 帐户执行操作。

    • spec.activeDirectory.netbiosDomainName Active Directory 域的 NetBIOS 名称。 这是 Active Directory 域的短域名(Windows 2000 之前的名称)。 这通常用于限定 AD 域中的帐户。 例如,如果域中的帐户被称为 CONTOSO\admin,则 CONTOSO 是 NETBIOS 域名。

      此字段可选。 如果未提供,则其值默认为 spec.activeDirectory.realm 字段的第一个标签。

      在大多数域环境中,此值设置为默认值,但某些域环境可能具有非默认值。 仅当域的 NetBIOS 名称与其完全限定名称的第一个标签不匹配时,才需要使用此字段。

    • spec.activeDirectory.domainControllers.secondaryDomainControllers[*].hostname AD 域中辅助域控制器的完全限定域名列表。

      如果域由多个域控制器提供,最好是在此列表中提供其完全限定的域名。 这可以实现 Kerberos 操作的高可用性。

      此字段是可选的,且不需要。 如果未提供值,系统将自动检测辅助域控制器。

    • spec.activeDirectory.dns.domainName 应将其 DNS 查找转发到 Active Directory DNS 服务器的 DNS 域名。

      任何属于此域或其子域的域名的 DNS 查找都将转发到 Active Directory。

      此字段可选。 如果未提供此值,则默认值是为转换为小写的 spec.activeDirectory.realm 提供的值。

    • spec.activeDirectory.dns.replicas DNS 代理服务的副本计数。 此字段是可选的,如果未提供,则默认为 1。

    • spec.activeDirectory.dns.preferK8sDnsForPtrLookups 指示针对 IP 地址查找的 Kubernetes DNS 服务器响应是否优于 AD DNS 服务器响应的标记。

      DNS 代理服务依赖于此字段来确定在进行 IP 地址查找时首选的上游 DNS 服务器组。

      此字段可选。 如果未提供此值,则默认为 true,即 IP 地址的 DNS 查找将首先转发到 Kubernetes DNS 服务器。 如果 Kubernetes DNS 服务器未能应答查找,则查询将转发到 AD DNS 服务器。 如果设置为 false,这些 DNS 查找将首先转发到 AD DNS 服务器,并在失败时返回到 Kubernetes。

在系统管理的密钥表模式下部署 Active Directory 连接器

若要部署 AD 连接器,请创建名为 active-directory-connector.yaml 的 YAML 规范文件。

下面提供了一个系统管理的密钥表 AD 连接器示例,该连接器使用名称为 CONTOSO.LOCAL 的 AD 域。 请确保将值替换为你的 AD 域的值。 adarc-dsa-secret 包含进行 AD 部署之前创建的 AD 域服务帐户。

注意

确保此处提供的域服务 AD 帐户的密码不包含特殊字符 !

apiVersion: v1 
kind: Secret 
type: Opaque 
metadata: 
  name: adarc-dsa-secret
  namespace: <namespace>
data: 
  password: <your base64 encoded password>
  username: <your base64 encoded username>
---
apiVersion: arcdata.microsoft.com/v1beta2
kind: ActiveDirectoryConnector
metadata:
  name: adarc
  namespace: <namespace>
spec:
  activeDirectory:
    realm: CONTOSO.LOCAL
    serviceAccountProvisioning: automatic
    ouDistinguishedName: "OU=arcou,DC=contoso,DC=local"
    domainServiceAccountSecret: adarc-dsa-secret
    domainControllers:
      primaryDomainController:
        hostname: dc1.contoso.local
      secondaryDomainControllers:
      - hostname: dc2.contoso.local
      - hostname: dc3.contoso.local
  dns:
    preferK8sDnsForPtrLookups: false
    nameserverIPAddresses:
      - <DNS Server 1 IP address>
      - <DNS Server 2 IP address>

以下命令部署 AD 连接器实例。 目前仅支持 kube 本机部署方法。

kubectl apply –f active-directory-connector.yaml

提交 AD 连接器实例部署后,可以使用以下命令检查部署状态。

kubectl get adc -n <namespace>