2017-08-30 5 views
3

J'ai une application de printemps. Une des méthodes lit un fichier de hdfs en utilisant webhdfs. Quand je le mets à l'essai, ça fonctionne. Mais après avoir construit le projet et déployé l'image docker sur la machine virtuelle localement ou sur un serveur connecté à hdfs, je reçois.docker kerberos webhdfs AuthenticationException: Non autorisé

AuthenticationException: Unauthorized 

Sur ma machine locale je dois initialiser le jeton avec regulary

kinit 

pour autentification. Si je ne le fais pas, j'ai la même erreur. J'ai testé l'application sans docker sur le serveur, ça marche aussi. Je pense, image docker ne voit pas le jeton. Mais je ne sais pas quoi faire à ce sujet.

Kerberos est utilisé pour la sécurité.

Un conseil?

Répondre

0

Okey. Je l'ai fait. Il y avait quelques problèmes, mais voici comment la variante finale semble.

Mon docker. krb5.conf et keytab sont dans le même dossier que mon fichier docker. Quand je construis le projet, ils sont ajoutés au récipient et le point d'entrée que j'utilise pour fournir l'emplacement krb5

-Djava.security.krb5.conf 

. Il y a aussi quelques options pour déboguer + je connecte 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"] 

Puis-je utiliser KerberosRestTemplate pour se connecter à webhdfs

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; 
    } 

Si vous voulez exécuter l'application sans docker, juste construire et ajouter le keytab dans la même direction que le pot. Changez ensuite /etc/evkuzmin.keytab pour qu'il pointe vers le nouvel emplacement.