2017-12-22 12 views
1

に失敗しました。 KerberosとZookeeperをセットアップするために私が従った手順を概説しましたhere。飼育係が動作しているようだ:飼育係/ SASLチェックサムは、私はこのエラーが発生し、問題を解決するにはどうすればよい

[email protected]:~/zk/zookeeper-3.4.11$ JVMFLAGS="-Djava.security.auth.login.config=/home/zookeeper/jaas/jaas.conf -Dsun.security.krb5.debug=true" bin/zkServer.sh start-foreground 
... 
>>> EType: sun.security.krb5.internal.crypto.Aes256CtsHmacSha1EType 
>>> KrbAsRep cons in KrbAsReq.getReply zookeeper/zookeeper-server-01 
2017-12-22 00:21:52,308 [myid:] - INFO [main:[email protected]] - Server successfully logged in. 
2017-12-22 00:21:52,312 [myid:] - INFO [main:[email protected]] - binding to port 0.0.0.0/0.0.0.0:2181 
2017-12-22 00:21:52,313 [myid:] - INFO [Thread-1:[email protected]] - TGT refresh thread started. 
2017-12-22 00:21:52,313 [myid:] - INFO [Thread-1:[email protected]] - TGT valid starting at:  Fri Dec 22 00:21:52 UTC 2017 
2017-12-22 00:21:52,313 [myid:] - INFO [Thread-1:[email protected]] - TGT expires:     Fri Dec 22 10:21:52 UTC 2017 
2017-12-22 00:21:52,314 [myid:] - INFO [Thread-1:[email protected]] - TGT refresh sleeping until: Fri Dec 22 08:25:59 UTC 2017 

私がしようとすると、しかし、それにzkCli.sh(別のEC2インスタンス上で実行されている)を接続するために、サーバーは接続を閉じ、上記のチェックサム・エラーを出力します。

飼育係のクライアントは、飼育係のサーバーに接続できるように表示されます。

JVMFLAGS="-Djava.security.auth.login.config=/home/admin/Downloads/zookeeper-3.4.11/conf/zookeeper-test-client-jaas.conf -Dsun.security.krb5.debug=true" bin/zkCli.sh -server zookeeper-server-01.eigenroute.com:2181 
Connecting to zookeeper-server-01.eigenroute.com:2181 
2017-12-22 00:27:12,779 [myid:] - INFO [main:[email protected]] - Client environment:zookeeper.version= 
3.4.11-37e277162d567b55a07d1755f0b31c32e93c01a0, built on 11/01/2017 18:06 GMT 
... 
2017-12-22 00:27:12,788 [myid:] - INFO [main:[email protected]] - Client environment:user.dir=/home/admin/Downloads/zookeeper-3.4.11 
2017-12-22 00:27:12,789 [myid:] - INFO [main:[email protected]] - Initiating client connection, connectString=zookeeper-server-01.eigenroute.com:2181 sessionTimeout=30000 [email protected] 
Welcome to ZooKeeper! 
JLine support is enabled 
... 
>>> KrbAsReq creating message 
[zk: zookeeper-server-01.eigenroute.com:2181(CONNECTING) 0] >>> KrbKdcReq send: kdc=kerberos-server-01.eigenroute.com UDP:88, timeout=30000, number of retries =3, #bytes=166 
>>> KDCCommunication: kdc=kerberos-server-01.eigenroute.com UDP:88, timeout=30000,Attempt =1, #bytes=166 
>>> KrbKdcReq send: #bytes read=310 
>>>Pre-Authentication Data: 
... 

クライアントが事前承認を必要とする程度の誤差を受けたが、その後正常にログインしているように見える(これは正常に認証を意味するのでしょうか?) Zookeeperサーバーに?またはKerberos?:

... 
KRBError received: NEEDED_PREAUTH 
KrbAsReqBuilder: PREAUTH FAILED/REQ, re-send AS-REQ 
Using builtin default etypes for default_tkt_enctypes 
default etypes for default_tkt_enctypes: 18 17 16 23. 
Looking for keys for: zktestclient/[email protected] 
Added key: 17version: 3 
Added key: 18version: 3 
Looking for keys for: zktestclient/[email protected] 
Added key: 17version: 3 
Added key: 18version: 3 
Using builtin default etypes for default_tkt_enctypes 
default etypes for default_tkt_enctypes: 18 17 16 23. 
>>> EType: sun.security.krb5.internal.crypto.Aes256CtsHmacSha1EType 
>>> KrbAsReq creating message 
>>> KrbKdcReq send: kdc=kerberos-server-01.eigenroute.com UDP:88, timeout=30000, number of retries =3, #bytes=253 
>>> KDCCommunication: kdc=kerberos-server-01.eigenroute.com UDP:88, timeout=30000,Attempt =1, #bytes=253 
>>> KrbKdcReq send: #bytes read=742 
>>> KdcAccessibility: remove kerberos-server-01.eigenroute.com 
Looking for keys for: zktestclient/[email protected] 
Added key: 17version: 3 
Added key: 18version: 3 
>>> EType: sun.security.krb5.internal.crypto.Aes256CtsHmacSha1EType 
>>> KrbAsRep cons in KrbAsReq.getReply zktestclient/eigenroute.com 
2017-12-22 00:27:13,286 [myid:] - INFO [main-SendThread(35.169.37.216:2181):[email protected]] - Client successfully logged in. 
... 

にログインしたクライアントは、飼育係サーバーへのソケット接続をオープンし、SASLへの試みは、それへの認証:

... 
2017-12-22 00:27:13,312 [myid:] - INFO [main-SendThread(35.169.37.216:2181):[email protected] 
5] - Opening socket connection to server 35.169.37.216/35.169.37.216:2181. Will attempt to SASL-authen 
ticate using Login Context section 'Client' 
2017-12-22 00:27:13,317 [myid:] - INFO [main-SendThread(35.169.37.216:2181):[email protected] 
] - Socket connection established to 35.169.37.216/35.169.37.216:2181, initiating session 
2017-12-22 00:27:13,359 [myid:] - INFO [main-SendThread(35.169.37.216:2181):[email protected]] - Session establishment complete on server 35.169.37.216/35.169.37.216:2181, sessionid = 0x1000436873a0001, negotiated timeout = 30000 

WATCHER:: 

WatchedEvent state:SyncConnected type:None path:null 
Found ticket for zktestclient/[email protected] to go to krbtgt/[email protected] 
COM expiring on Fri Dec 22 10:27:13 UTC 2017 
Entered Krb5Context.initSecContext with state=STATE_NEW 
Found ticket for zktestclient/[email protected] to go to krbtgt/[email protected] 
COM expiring on Fri Dec 22 10:27:13 UTC 2017 
Service ticket not found in the subject 
>>> Credentials acquireServiceCreds: same realm 
Using builtin default etypes for default_tgs_enctypes 
default etypes for default_tgs_enctypes: 18 17 16 23. 
>>> CksumType: sun.security.krb5.internal.crypto.RsaMd5CksumType 
>>> EType: sun.security.krb5.internal.crypto.Aes256CtsHmacSha1EType 
>>> KrbKdcReq send: kdc=kerberos-server-01.eigenroute.com UDP:88, timeout=30000, number of retries =3, #bytes=712 
>>> KDCCommunication: kdc=kerberos-server-01.eigenroute.com UDP:88, timeout=30000,Attempt =1, #bytes=712 
>>> KrbKdcReq send: #bytes read=678 
>>> KdcAccessibility: remove kerberos-server-01.eigenroute.com 
>>> EType: sun.security.krb5.internal.crypto.Aes256CtsHmacSha1EType 
>>> KrbApReq: APOptions are 00000000 00000000 00000000 00000000 
>>> EType: sun.security.krb5.internal.crypto.Aes256CtsHmacSha1EType 
Krb5Context setting mySeqNumber to: 50687702 
Krb5Context setting peerSeqNumber to: 0 
Created InitSecContextToken: 
0000: 01 00 6E 82 02 6B 30 82 02 67 A0 03 02 01 05 A1 ..n..k0..g...... 
... 
0260: 33 25 94 1F 60 93 E9 CF 7E EF 15 82 F8 6D ED 06 3%..`........m.. 
0270: 43             C 

2017-12-22 00:27:13,405 [myid:] - INFO [main-SendThread(35.169.37.216:2181):[email protected]] - Unable to read additional data from server sessionid 0x1000436873a0001, likely server has closed socket, closing socket connection and attempting reconnect 

WATCHER:: 

WatchedEvent state:Disconnected type:None path:null 

をだから、SASL認証は完全な失敗ではありませんが、 Zookeeperサーバーは(チェックサムの失敗のために)接続を閉じます。

UPDATE#1。 T-ヘロンさんのコメントに応えて、クライアントマシン上nslookup zookeeper-server-01.eigenroute.comの結果は以下のとおりです。zookeeper-server-01.eigenroute.comのためのDNSエントリがある

Server:  172.31.0.2 
Address: 172.31.0.2#53 

Non-authoritative answer: 
Name: zookeeper-server-01.eigenroute.com 
Address: 35.169.37.216 

クライアントマシンで
zookeeper-server-01.eigenroute.com 30 minutes A  
35.169.37.216 

enter image description here

/etc/hosts内容:

127.0.1.1 ip-172-31-95-211.ec2.internal ip-172-31-95-211 
127.0.0.1 localhost 
34.239.197.36 kerberos-server-02 

# The following lines are desirable for IPv6 capable hosts 
::1 ip6-localhost ip6-loopback 
fe00::0 ip6-localnet 
ff00::0 ip6-mcastprefix 
ff02::1 ip6-allnodes 
ff02::2 ip6-allrouters 
ff02::3 ip6-allhosts 

kerberos-server-02がmisnamedされ、それが結果は同じであるから、私はこの行をコメントする場合、KDCはありません)とのZooKeeperサーバー上、zookeeper-server-01.eigenroute.com/etc/hostsが含まれています

127.0.1.1 ip-172-31-88-14.ec2.internal ip-172-31-88-14 
127.0.0.1 localhost 
34.225.180.212 kerberos-server-01 

# The following lines are desirable for IPv6 capable hosts 
::1 ip6-localhost ip6-loopback 
fe00::0 ip6-localnet 
ff00::0 ip6-mcastprefix 
ff02::1 ip6-allnodes 
ff02::2 ip6-allrouters 
ff02::3 ip6-allhosts 

kerberos-server-01のエントリがありませんそこにいる必要があります - 私はそれを削除すると結果は同じです)。

誰かがチェックサムの失敗を解決する方法を説明できますか?ありがとう!ホスト名、私はzookeeper/[email protected]ために作成したkeytabをzookeeper-server-01.eigenroute.com使用されているのZooKeeperサーバーのJAASの構成では、

zookeeper/[email protected] 
zookeeper/[email protected] 

答えて

1

私のKDCは、次のプリンシパルを持っていました。

代わりにzookeeper/[email protected]のキータブを作成し、このキータブをZooKeeperサーバー用のJAAS構成で使用したところ、クライアントからのSASL認証が成功しました。

私はむしろ、IPアドレスではなく、Kerberosプリンシパルの名前に完全修飾ドメイン名(zookeeper-server-01.eigenroute.com)を使用します。誰かが私にその働きをさせる方法を教えてもらえれば、私はそれを答えとして受け入れます。それまではこれで十分です。

更新:私はそれを理解しました。 Zookeeperクライアントは、-server引数からFQDNを取得し、このFQDNのIPアドレスを検索し、これからInetSocketAddressオブジェクトを作成します(org.apache.zookeeper.client.StaticHostProvider)。ホスト名を取得するには、.getHostNameorg.apache.zookeeper.ClientCnxn.SendThread.startConnect)を呼び出します。

ec2-35-169-37-216.compute-1.amazonaws.com 

をし、私のクライアントAWS EC2インスタンス上で、これが返されます:私のローカルマシン上で、これは返し

35.169.37.216 

代わりに、私はそれがFQDNを返すことが期待されるとき。

zookeeper/[email protected] 

と私のローカルマシン上で、ZooKeeperのクライアントがためにチケットを取得しようとします::私のAWS EC2クライアントマシン上で、ZooKeeperのクライアントがためにチケットを取得しようとする理由はここにあり

zookeeper/[email protected] 

だから、35.169.37.216の逆DNSルックアップがzookeeper-server-01.eigenroute.comになるようにAWSが必要です。今まで私が見つけた解決策はto ask AWS to set up the mapping for the reverse DNSです。

理想的には、ZooKeeperにはこの逆DNSルックアップをスキップし、FQDNをホスト名として使用するのが理想的です(多分そうで、見つからないかもしれません)。

+0

私は今夜これを見てみましょう。 –

+1

クライアントマシンから、「nslookup zookeeper-server-01.eigenroute.com」の結果はどうなりますか?結果が35.169.37.216のAレコードでない場合は、それが問題です。私はこれを推測しています.IPはKerberosサービスプリンシパルのエントリの内部で動作しますが、ホスト名は動作しないからです。次に、結果はCNAMEではなくAレコードでなければなりません。必要に応じてDNSを修正します.DNSがすでに正しい場合は、クライアントマシンとサーバマシンの両方でzookeeper-server-01.eigenroute.comの不正なホストファイルエントリを確認してください。 KDCはうまくいくように聞こえる、btw。 –

+0

@ T-Heron:ありがとうございます - あなたが提供するように指示した情報を追加するための質問を編集しました。実際、DNSエントリはCNAMEではなくAレコードです。 '/ etc/hosts'ファイルは、クライアントマシンとサーバマシンの両方でうまく見えます(または、それらにエントリを追加する必要がありますか?)。 'nslookup zookeeper-server-01.eigenroute.com'の結果はOKですか? –

関連する問題