You need to enable JavaScript to run this app.
导航

配置 Kerberos 集群间跨域互信

最近更新时间2024.01.24 12:01:18

首次发布时间2023.10.30 14:42:01

两个 Kerberos 集群之间的服务访问,需要配置 Kerberos 集群间的跨域互信(Cross Realm)。在火山引擎 E-MapReduce(EMR)中,如果已有两个 Kerberos 集群 A、B,希望从集群 A 跨域访问集群 B 中的服务,您可以按照下面的步骤操作。

1 获取 Realm、FQDN 信息

登录到集群 A 和集群 B 的 Master 节点的命令行界面,从 /etc/krb5.conf 中分别获取集群 A 和集群 B 的 Realm 信息、FQDN 信息并做记录。其中 Realm 信息的格式为 xxx.EMR.COM。
登录方式详见登录集群

2 添加跨域认证的 Principal

  1. 登录到集群 A 的 Master 节点的命令行界面中,以 root 用户身份执行下面的命令:

注意

请确认您使用的 E-MapReduce 发行版本号。不同的发行版本号对应的命令不同

# EMR-3.8.0(含)之后的版本,使用 kadmin.local 命令。如下所示:
kadmin.local -q "addprinc -pw <新建一个自定义密码> krbtgt/<集群 B 的 Realm>@<集群 A 的 Realm>"

# EMR-3.8.0(不含)之前的版本,使用 kadmin 命令。如下所示:
kadmin -q "addprinc -pw <新建一个自定义密码> krbtgt/<集群 B 的 Realm>@<集群 A 的 Realm>"

说明

其中用尖括号(“<>”)括起来的内容(包含尖括号本身),需要根据实际场景替换为对应的实际取值。

  1. 登录到集群 B 的 Master 节点的命令行界面中,以 root 用户身份执行相同的命令(无需替换命令中的 Realm 顺序),如下所示:
# EMR-3.8.0(含)之后的版本,使用 kadmin.local 命令。如下所示:
kadmin.local -q "addprinc -pw <新建一个自定义密码> krbtgt/<集群 B 的 Realm>@<集群 A 的 Realm>"

# EMR-3.8.0(不含)之前的版本,使用 kadmin 命令。如下所示:
kadmin -q "addprinc -pw <新建一个自定义密码> krbtgt/<集群 B 的 Realm>@<集群 A 的 Realm>"

3 配置集群 A 的 krb5.conf 并重启集群 A 的 KDC 服务

登录到集群 A 的 Master 节点的命令行界面中,编辑 /etc/krb5.conf 配置文件,修改如下内容:

说明

其中用尖括号(“<>”)括起来的内容(包含尖括号本身),需要根据实际场景替换为对应的实际取值。

  1. [realms] 新增一项:

    <集群 B 的 Realm> = {
        kdc = <集群 B 的 Master 节点的 FQDN>:88
    }
    
  2. 新增 [capaths]

    [capaths]
        <集群 A 的 Realm> = {
            <集群 B 的 Realm> = .
        }
        <集群 B 的 Realm> = {
            <集群 A 的 Realm> = .
        }
    
  3. 新增 [domain_realm]

    [domain_realm]
        <集群 A 的第一个 Master 节点的 FQDN> = <集群 A 的 Realm>
        <集群 A 的第二个 Master 节点的 FQDN> = <集群 A 的 Realm>
        ...
        <集群 A 的第一个 Core 节点的 FQDN> = <集群 A 的 Realm>
        <集群 A 的第二个 Core 节点的 FQDN> = <集群 A 的 Realm>
        ...
        <集群 B 的第一个 Master 节点的 FQDN> = <集群 B 的 Realm>
        <集群 B 的第二个 Master 节点的 FQDN> = <集群 B 的 Realm>
        ...
        <集群 B 的第一个 Core 节点的 FQDN> = <集群 B 的 Realm>
        <集群 B 的第二个 Core 节点的 FQDN> = <集群 B 的 Realm>
        ...
    

配置完成后,重启 KDC。

4 验证

可以登录到集群 A 的节点中,访问集群 B 的服务。具体可以参考文档:使用 Kerberos 认证集群

注意

  1. 访问远程 Kerberos 集群上的服务时,需要使用 FQDN 来连接远程 Kerberos 集群上的节点。

  2. 如果被访问的集群(集群 B)的服务是 Kafka,还需要给集群 B 的 Kafka 服务增加一条配置,然后重启 Kafka 服务。
    增加的配置项如下(注:其中用尖括号(“<>”)括起来的内容(包含尖括号本身),需要根据实际场景替换为对应的实际取值):

    • 配置项:sasl.kerberos.principal.to.local.rules

    • 值:
      EMR-3.8.0(含)之后的版本,配置为:RULE:[2:$1@$0](.*@<源集群(集群 A)的 Realm>)s/@.*//,DEFAULT

    • EMR-3.8.0(不含)之前的版本,配置为:RULE:[1:$1@$0](.*@<源集群(集群 A)的 Realm>)s/@.*//,DEFAULT