- Authors

- Name
- Youngju Kim
- @fjvbn20031
Background
Kerberosが適用された2つのHadoopクラスタのREALMが異なる場合、理論的には2つのクラスタ間のデータ移動は不可能です。しかし、Cross Realm Trustを設定すれば、クラスタ間のデータを照会したり自由に移動することも可能になります。
Prerequisite
Kerberosが既に適用されたAとBという2つのクラスタがあると仮定します。Aクラスタは UBUNTU.YJ.COM というRealmに属しており、Bクラスタは CENTOS.YJ.COM というRealmに属しています。また、各クラスタはZookeeper、HDFS、HBase、YARNコンポーネントを持っています。
Steps
1. krbtgtの作成
Cross Realmでは、krbtgtという名前のPrincipalが非常に重要です。
UBUNTU.YJ.COM KDCに以下の2つのprincipalを登録します。
krbtgt/UBUNTU.YJ.COM@CENTOS.YJ.COM
krbtgt/CENTOS.YJ.COM@UBUNTU.YJ.COM
同様に、CENTOS.YJ.COM KDCに以下の2つのprincipalを登録します。
krbtgt/UBUNTU.YJ.COM@CENTOS.YJ.COM
krbtgt/CENTOS.YJ.COM@UBUNTU.YJ.COM
上記4つのprincipalのencryption type、password、kvnoはすべて同一でなければなりません。
2. /etc/krb5.conf、/etc/hostsの更新
UBUNTU.YJ.COM realmに属するサーバーの/etc/krb5.confには、CENTOS.YJ.COM関連の設定を以下のように追加する必要があります。
[libdefaults]
default_realm = UBUNTU.YJ.COM
[realms]
UBUNTU.YJ.COM = {
kdc = kdc01.hadoop.example.com:88
admin_server = kdc01.hadoop.example.com:749
default_domain = ubuntu.yj.com
}
CENTOS.YJ.COM = {
kdc = kdc01.example.com:88
admin_server = kdc01.example.com:749
default_domain = centos.yj.com
}
[domain_realm]
.ubuntu.yj.com = UBUNTU.YJ.COM
ubuntu.yj.com = UBUNTU.YJ.COM
.centos.yj.com = CENTOS.YJ.COM
centos.yj.com = CENTOS.YJ.COM
CENTOS.YJ.COM realmに属するサーバーの/etc/krb5.confには、UBUNTU.YJ.COM関連の設定を以下のように追加する必要があります。
[libdefaults]
default_realm = CENTOS.YJ.COM
[realms]
CENTOS.YJ.COM = {
kdc = kdc01.example.com:88
admin_server = kdc01.example.com:749
default_domain = centos.yj.com
}
UBUNTU.YJ.COM = {
kdc = kdc01.hadoop.example.com:88
admin_server = kdc01.hadoop.example.com:749
default_domain = ubuntu.yj.com
}
[domain_realm]
.centos.yj.com = CENTOS.YJ.COM
centos.yj.com = CENTOS.YJ.COM
.ubuntu.yj.com = UBUNTU.YJ.COM
ubuntu.yj.com = UBUNTU.YJ.COM
また、/etc/hostsに相手方クラスタサーバーの情報を追加します。
3. kvnoテスト
Aクラスタでkeytabで認証を受け、Bクラスタのサーバーにkvnoでアクセスできるかテストします。
kinit -kt <A keytab> <A principal>
kvno <B principal>
Bクラスタでkeytabで認証を受け、Aクラスタのサーバーにkvnoでアクセスできるかテストします。
kvnoの値が整数として正常に出力されれば、cross realmの構成が正常に完了したことになります。
4. auth to local Ruleの追加
/etc/krb5.confが変更されると、関連するすべてのコンポーネント(HBase、HDFS、YARN)を再起動する必要があります。この時、Aクラスタのcore-site.xmlに以下のconfigを追加する必要があります。
<property>
<name>hadoop.security.auth_to_local</name>
<value>RULE: [1:$1@$0](.*@\QCENTOS.YJ.COM\E$)s/@\QCENTOS.YJ.COM\E$//
RULE: [2:$1@$0](.*@\QCENTOS.YJ.COM\E$)s/@\QCENTOS.YJ.COM$//
DEFAULT</value>
</property>
Bクラスタには以下を追加します。
<property>
<name>hadoop.security.auth_to_local</name>
<value>RULE: [1:$1@$0](.*@\QUBUNTU.YJ.COM\E$)s/@\QUBUNTU.YJ.COM\E$//
RULE: [2:$1@$0](.*@\QUBUNTU.YJ.COM\E$)s/@\QUBUNTU.YJ.COM$//
DEFAULT</value>
</property>
auth_to_localの文法についてはこちらを参照してください。
5. テスト
再起動が完了したら、AクラスタからBクラスタへ、またはBクラスタからAクラスタへのexport snapshot、replication設定、verify replicationなどのmigration作業を進めることができます。
Reference
- https://docs.cloudera.com/documentation/enterprise/6/6.3/topics/cm_sg_kdc_def_domain_s2.html
- https://www.youngju.dev/blog/202211/KDC_server_install
- https://community.cloudera.com/t5/Community-Articles/Auth-to-local-Rules-Syntax/ta-p/245316
クイズ
Q1: 「Cross Realm Trust HBase設定方法」の主なトピックは何ですか?
Cross Realm Trust HBase設定方法
Q2: krbtgtの作成とは何ですか?
Cross Realmでは、krbtgtという名前のPrincipalが非常に重要です。 UBUNTU.YJ.COM
KDCに以下の2つのprincipalを登録します。 krbtgt/UBUNTU.YJ.COM@CENTOS.YJ.COM
krbtgt/CENTOS.YJ.COM@UBUNTU.YJ.COM 同様に、CENTOS.YJ.COM KDCに以下の2つのprincipalを登録します。
Q3: /etc/krb5.conf、/etc/hostsの更新の核心的な概念を説明してください。
UBUNTU.YJ.COM
realmに属するサーバーの/etc/krb5.confには、CENTOS.YJ.COM関連の設定を以下のように追加する必要があります。
CENTOS.YJ.COM
realmに属するサーバーの/etc/krb5.confには、UBUNTU.YJ.COM関連の設定を以下のように追加する必要があります。
また、/etc/hostsに相手方クラスタサーバーの情報を追加します。
Q4: kvnoテストの主な特徴は何ですか?
Aクラスタでkeytabで認証を受け、Bクラスタのサーバーにkvnoでアクセスできるかテストします。
Bクラスタでkeytabで認証を受け、Aクラスタのサーバーにkvnoでアクセスできるかテストします。
kvnoの値が整数として正常に出力されれば、cross realmの構成が正常に完了したことになります。
Q5: auth to local Ruleの追加はどのように機能しますか?
/etc/krb5.confが変更されると、関連するすべてのコンポーネント(HBase、HDFS、YARN)を再起動する必要があります。この時、Aクラスタのcore-site.xmlに以下のconfigを追加する必要があります。
Bクラスタには以下を追加します。 auth_to_localの文法についてはこちら>)を参照してください。