Не удалось подключиться к кластеру с керберизацией из-за ошибки: ПРОСТАЯ аутентификация не включена - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть кластер Kerberized с HDFS, HBASE, YARN et c. Из моей Java программы (запущенной на моем p c) мне нужно подключиться к Yarn с помощью библиотеки yarn-client, чтобы получить информацию ResourceManager об очередях. Вот что я делаю:

Main:

System.setProperty("java.security.krb5.conf", "src/main/resources/krb5.conf"); //all
System.setProperty("java.security.krb5.realm", "XXXXX"); //all
System.setProperty("java.security.krb5.kdc", "manager01.xxxxxx"); //all
System.setProperty("javax.security.auth.useSubjectCredsOnly", "false"); //all
System.setProperty("sun.security.krb5.debug", "true");

  YarnClient yc = YarnClient.createYarnClient();
  yc.init(YarnClientConfiguration.getConfiguration());
  yc.start();
  System.out.println(yc.getQueueAclsInfo());

В YarnClientConfiguration:

public static Configuration getConfiguration(){
    Configuration config = new Configuration();
    config.set("hadoop.security.authentication", "kerberos");
    config.set("yarn.security.authentication", "kerberos");
    config.set("hadoop.zk.address", "master01.xxxxx:2181,master02.xxxxx:2181,master03.xxxx:2181");
    config.set("zookeeper.znode.parent", "/atsv2-hbase-secure");

    config.set("hadoop.rpc.protection", "authentication");
    config.set("hadoop.security.authorization", "true");

    config.set("hbase.master.kerberos.principal", "yarn-ats-hbase/_HOST@XXXXX");
    config.set("hbase.master.keytab.file", "/etc/security/keytabs/yarn-ats.xxxxxx.service.keytab");
    config.set("hbase.regionserver.kerberos.principal", "yarn-ats-hbase/_HOST@XXXXX");
    config.set("hbase.regionserver.keytab.file", "/etc/security/keytabs/xxxxx.keytab");

    config.set("yarn_ats_principal_name", "yarn-ats-xxxx@XXXXX");
    config.set("yarn_ats_user_keytab", "/etc/security/keytabs/yarn-ats.xxx.headless.keytab");

    config.set("yarn.resourcemanager.address", "xxxxxxx:8050");
    config.set("yarn.resourcemanager.admin.address", "xxxxxxx:8141");
    config.set("yarn.resourcemanager.hostname", "xxxxxxx");
    config.set("yarn.resourcemanager.scheduler.address", "xxxxxxx:8030");
    config.set("yarn.resourcemanager.resource-tracker.address", "xxxxxxx:8025");

    config.set("fs.defaultFS", "hdfs://xxxxxxx:8020");

    return config;
}

Я знаю некоторые из параметров, которые я установил в Конфигурации, бесполезны, но независимо от того, что дает мне, всегда одна и та же ошибка:

org.apache.hadoop.security.AccessControlException: SIMPLE authentication is not enabled.  Available:[TOKEN, KERBEROS], while invoking ApplicationClientProtocolPBClientImpl.getQueueUserAcls over null after 1 failover attempts. Trying to failover after sleeping for 15129ms.

Но с одним и тем же KRB5 я могу подключаться к HBASE и HDFS, используя олицетворение. Я попытался поместить код YarnClient в метод Run doAs() после получения UGI следующим образом:

UserGroupInformation login = UserGroupInformation.loginUserFromKeytabAndReturnUGI(
        Constants.PRINCIPAL,
        Constants.KEYTAB);
return UserGroupInformation.createProxyUser("test", login);

Но все равно не работает, Что мне не хватает? Использование одного и того же «материала» работает для HDFS и HBASE, поэтому не может быть проблемой Kerberos.

PS попытался также использовать класс YarnConfiguration вместо конфигурации, но это ничего не меняет.

...