两个 Kerberos 集群之间的服务访问,需要配置 Kerberos 集群间的跨域互信(Cross Realm)。在火山引擎 E-MapReduce(EMR)中,如果已有两个 Kerberos 集群 A、B,希望从集群 A 跨域访问集群 B 中的服务,您可以按照下面的步骤操作。
登录到集群 A 和集群 B 的 Master 节点的命令行界面,从 /etc/krb5.conf
中分别获取集群 A 和集群 B 的 Realm 信息、FQDN 信息并做记录。其中 Realm 信息的格式为 xxx.EMR.COM。
登录方式详见登录集群。
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>"
说明
其中用尖括号(“<>”)括起来的内容(包含尖括号本身),需要根据实际场景替换为对应的实际取值。
# 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>"
登录到集群 A 的 Master 节点的命令行界面中,编辑 /etc/krb5.conf
配置文件,修改如下内容:
说明
其中用尖括号(“<>”)括起来的内容(包含尖括号本身),需要根据实际场景替换为对应的实际取值。
[realms]
新增一项:
<集群 B 的 Realm> = { kdc = <集群 B 的 Master 节点的 FQDN>:88 }
新增 [capaths]
:
[capaths] <集群 A 的 Realm> = { <集群 B 的 Realm> = . } <集群 B 的 Realm> = { <集群 A 的 Realm> = . }
新增 [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。
可以登录到集群 A 的节点中,访问集群 B 的服务。具体可以参考文档:使用 Kerberos 认证集群。
注意
访问远程 Kerberos 集群上的服务时,需要使用 FQDN 来连接远程 Kerberos 集群上的节点。
如果被访问的集群(集群 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