2017-08-30 19 views
3

私は春のアプリを持っています。メソッドの1つはwebhdfsを使ってhdfsからファイルを読み込みます。アイデアで試してみると、うまくいきます。しかし、私がプロジェクトをビルドし、バーチャルマシンにローカルまたはhdfsに接続されたサーバー上にドッカーイメージを展開した後、私は取得します。私のローカルマシン上ドッカーkerberos webhdfs認証:無許可

AuthenticationException: Unauthorized 

私はregulary autentificationため

kinit 

でトークンを初期化する必要があります。私がしなければ、私は同じエラーが発生します。私はサーバー上のドッカーなしでアプリをテストしましたが、それも動作します。私は、ドッカーのイメージはトークンを見ていないと思う。しかし、私はそれについて何をすべきかわかりません。

セキュリティのためにKerberosが使用されています。

アドバイスはありますか?

答えて

0

Okey。やったよ。いくつかの問題がありましたが、これが最終的な変種の外観です。

私のドッカー。 krb5.confとkeytabは私のドッカーファイルと同じフォルダにあります。私がプロジェクトをビルドするとき、彼らはコンテナに追加され、私は使用するエントリーポイントで

-Djava.security.krb5.conf 

にkrb5の位置を提供します。また、デバッグ+私はmongoに接続するためのいくつかのオプションがあります。

FROM java:8 
ADD report.jar report.jar 
ADD krb5.conf /etc/krb5.conf 
ADD evkuzmin.keytab /etc/evkuzmin.keytab 
RUN sh -c 'touch report.jar' 
ENTRYPOINT ["java","-Dspring.data.mongodb.uri=mongodb://audpro_mongo/report","-Djavax.net.debug=all","-Dsun.security.spnego.debug=true","-Dsun.security.krb5.debug=true","-Djava.security.krb5.conf=/etc/krb5.conf","-jar","/report.jar"] 

それから私は、あなたがそれを構築し、jarファイルと同じ方向にキータブを追加し、ドッキングウィンドウなしでアプリを実行したい場合は

public String getReportJSON() throws URISyntaxException { 
    KerberosRestTemplate restTemplate = new 
     KerberosRestTemplate("/etc/evkuzmin.keytab", "[email protected]"); 
    URI uri = new URI("http" + "://" + host + ":" + port + "/webhdfs/v1" + path + "?op=OPEN"); 
    String json = restTemplate.getForObject(uri, String.class); 
    return json; 
    } 

をwebhdfsに接続するKerberosRestTemplateを使用しています。次に、新しい場所を指すように/etc/evkuzmin.keytabを変更します。