GSSException: не предоставлены действительные учетные данные (уровень механизма: не удалось найти какой-либо протокол Kerberos) при подключении Polybase с помощью Kerberos

Мы хотим подключить наш SQL Server 2016 Enterprise через Polybase к нашему Kerberized OnPrem Hadoop-Cluster с Cloudera 5.14.

Я следил за Microsoft Руководство по PolyBase для настройки Polybase. Проработав несколько дней над этой темой, я не могу продолжить из-за исключения: javax.security.sasl.SaslException: GSS initiate failed [Причина GSSException: не предоставлены действительные учетные данные (уровень механизма: не удалось найти какие-либо Kerberos tgt)]

Microsoft имеет встроенный инструмент диагностики для устранение неполадок при подключении к PolyBase и Kerberos. В этом руководстве по устранению неполадок от Microsoft есть 4 контрольных точки, и я застрял на контрольной точке 4. Краткая информация о контрольных точках (где я добился успеха):

  • Контрольная точка 1: Успешно! аутентифицирован с помощью KDC и получил TGT
  • Контрольная точка 2: Успешно! Что касается руководства по устранению неполадок, PolyBase попытается получить доступ к HDFS и потерпит неудачу, поскольку запрос не содержит необходимого билета на обслуживание.
  • Контрольная точка 3: Успешно! Второй шестнадцатеричный дамп указывает на то, что SQL Server успешно использовал TGT и получил соответствующий служебный билет для SPN узла имени от KDC.
  • Контрольная точка 4: Не удалось. SQL Server был аутентифицирован Hadoop с помощью ST (Service Ticket), и был предоставлен сеанс для доступа к защищенному ресурсу.

файл krb5.conf

[libdefaults]
default_realm = COMPANY.REALM.COM
dns_lookup_kdc = false
dns_lookup_realm = false
ticket_lifetime = 86400
renew_lifetime = 604800
forwardable = true
default_tgs_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96
default_tkt_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96
permitted_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96
udp_preference_limit = 1
kdc_timeout = 3000
[realms]
COMPANY.REALM.COM = {
kdc = ipadress.kdc.host
admin_server = ipadress.kdc.host
}
[logging]
default = FILE:/var/log/krb5/kdc.log
kdc = FILE:/var/log/krb5/kdc.log
admin_server = FILE:/var/log/krb5/kadmind.log

core-site.xml для Polybase на SQL-сервере

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
  <property>
    <name>io.file.buffer.size</name>
    <value>131072</value>
  </property>
  <property>
    <name>ipc.client.connect.max.retries</name>
    <value>2</value>
  </property>
  <property>
    <name>ipc.client.connect.max.retries.on.timeouts</name>
    <value>2</value>
  </property>

<!-- kerberos security information, PLEASE FILL THESE IN ACCORDING TO HADOOP CLUSTER CONFIG -->
<property>
    <name>polybase.kerberos.realm</name>
    <value>COMPANY.REALM.COM</value>
  </property>
  <property>
    <name>polybase.kerberos.kdchost</name>
    <value>ipadress.kdc.host</value>
  </property>
  <property>
    <name>hadoop.security.authentication</name>
    <value>KERBEROS</value>
  </property>
</configuration>

hdfs-site.xml для Polybase на SQL-сервере

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
  <property>
    <name>dfs.block.size</name>
    <value>268435456</value> 
  </property>
  <!-- Client side file system caching is disabled below for credential refresh and 
       settting the below cache disabled options to true might result in 
       stale credentials when an alter credential or alter datasource is performed
  -->
  <property>
    <name>fs.wasb.impl.disable.cache</name>
    <value>true</value>
  </property>
  <property>
    <name>fs.wasbs.impl.disable.cache</name>
    <value>true</value>
  </property>
  <property>
    <name>fs.asv.impl.disable.cache</name>
    <value>true</value>
  </property>
  <property>
    <name>fs.asvs.impl.disable.cache</name>
    <value>true</value>
  </property>
  <property>
    <name>fs.hdfs.impl.disable.cache</name>
    <value>true</value>
  </property>
<!-- kerberos security information, PLEASE FILL THESE IN ACCORDING TO HADOOP CLUSTER CONFIG -->
  <property>
    <name>dfs.namenode.kerberos.principal</name>
    <value>hdfs/[email protected]</value> 
  </property>
</configuration>

Исключение Polybase

[2018-06-22 12:51:50,349] WARN  2872[main] - org.apache.hadoop.security.UserGroupInformation.hasSufficientTimeElapsed(UserGroupInformation.java:1156) - Not attempting to re-login since the last re-login was attempted less than 600 seconds before.
[2018-06-22 12:51:53,568] WARN  6091[main] - org.apache.hadoop.security.UserGroupInformation.hasSufficientTimeElapsed(UserGroupInformation.java:1156) - Not attempting to re-login since the last re-login was attempted less than 600 seconds before.
[2018-06-22 12:51:56,127] WARN  8650[main] - org.apache.hadoop.security.UserGroupInformation.hasSufficientTimeElapsed(UserGroupInformation.java:1156) - Not attempting to re-login since the last re-login was attempted less than 600 seconds before.
[2018-06-22 12:51:58,998] WARN 11521[main] - org.apache.hadoop.security.UserGroupInformation.hasSufficientTimeElapsed(UserGroupInformation.java:1156) - Not attempting to re-login since the last re-login was attempted less than 600 seconds before.
[2018-06-22 12:51:59,139] WARN 11662[main] - org.apache.hadoop.ipc.Client$Connection$1.run(Client.java:676) - Couldn't setup connection for [email protected] to IPADRESS_OF_NAMENODE:8020
javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]

Запись в журнале на NameNode

Socket Reader #1 for port 8020: readAndProcess from client IP-ADRESS_SQL-SERVER threw exception [javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: Failure unspecified at GSS-API level (Mechanism level: AES128 CTS mode with HMAC SHA1-96 encryption type not in permitted_enctypes list)]]

Auth failed for IP-ADRESS_SQL-SERVER:60484:null (GSS initiate failed) with true cause: (GSS initiate failed)

Меня сбивает с толку запись в журнале из нашего NameNode, потому что режим AES128 CTS с HMAC SHA1-96 уже находится в списке разрешенных типов enctypes, как показано в krb5.conf и в пользовательском интерфейсе Cloudera Manager.

Пользовательский интерфейс Cloudera Manager krb_enc_types

Мы ценим вашу помощь!


person Gigi    schedule 22.06.2018    source источник
comment
Возможно, вам лучше позвонить в службу поддержки напрямую в Microsoft.   -  person wBob    schedule 22.06.2018


Ответы (1)


Проблема исчезла после перезапуска кластера. Я думаю, проблема заключалась в том, что файл krb5.conf в нашем Hadoop-Cluster не мог быть распределен по всем узлам из-за некоторых запущенных служб. Также в Cloudera Manager было предупреждение об устаревшей конфигурации Kerberos. Всем огромное спасибо!

person Gigi    schedule 02.07.2018