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を追加する必要があります。
RULE: [2:$1@$0](.*@\QCENTOS.YJ.COM\E$)s/@\QCENTOS.YJ.COM$//
DEFAULT</value>
Bクラスタには以下を追加します。
RULE: [2:$1@$0](.*@\QUBUNTU.YJ.COM\E$)s/@\QUBUNTU.YJ.COM$//
DEFAULT</value>
`auth_to_local`の文法については[こちら](https://community.cloudera.com/t5/Community-Articles/Auth-to-local-Rules-Syntax/ta-p/245316)を参照してください。
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
クイズ
Cross Realm Trust HBase設定方法
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を登録します。
UBUNTU.YJ.COM
realmに属するサーバーの/etc/krb5.confには、CENTOS.YJ.COM関連の設定を以下のように追加する必要があります。
CENTOS.YJ.COM
realmに属するサーバーの/etc/krb5.confには、UBUNTU.YJ.COM関連の設定を以下のように追加する必要があります。
また、/etc/hostsに相手方クラスタサーバーの情報を追加します。
Aクラスタでkeytabで認証を受け、Bクラスタのサーバーにkvnoでアクセスできるかテストします。
Bクラスタでkeytabで認証を受け、Aクラスタのサーバーにkvnoでアクセスできるかテストします。
kvnoの値が整数として正常に出力されれば、cross realmの構成が正常に完了したことになります。
/etc/krb5.confが変更されると、関連するすべてのコンポーネント(HBase、HDFS、YARN)を再起動する必要があります。この時、Aクラスタのcore-site.xmlに以下のconfigを追加する必要があります。
Bクラスタには以下を追加します。 auth_to_localの文法についてはこちら>)を参照してください。
현재 단락 (1/79)
Kerberosが適用された2つのHadoopクラスタのREALMが異なる場合、理論的には2つのクラスタ間のデータ移動は不可能です。しかし、Cross Realm Trustを設定すれば、クラスタ間の...