Настройка FreeIPA с помощью ADCM

Обзор

Для керберизации кластера с помощью FreeIPA выполните описанные ниже шаги:

  1. В веб-интерфейсе ADCM перейдите на страницу Clusters. Выберите установленный и подготовленный кластер ADH, и запустите действие Manage Kerberos.

    Действие Manage Kerberos
    Manage Kerberos
  2. В появившемся окне выберите опцию Existing FreeIPA.

    Выбор соответствующей опции
    Выбор соответствующей опции
  3. Заполните Kerberos-параметры FreeIPA и приступайте к настройке Kerberos в кластере.

    Kerberos-параметры FreeIPA
    Kerberos-параметры FreeIPA
  4. Нажмите Run и дождитесь окончания действия. Затем приступайте к настройке Kerberos в кластере.

    Запуск действия
    Запуск действия

Kerberos-параметры FreeIPA

Следующая таблица содержит описания параметров, необходимых для керберизации ADH-кластера с помощью FreeIPA. Актуальные значения для этих параметров можно получить, выполнив команду ipa user-find <ipa_admin> на FreeIPA-сервере, где <ipa_admin> — имя пользователя IPA Admin.

Параметр Описание

Authentication on WEB UIs

Включает аутентификацию Kerberos для веб-интерфейсов

KDC hosts

Один или более хостов, на которых запущен(ы) FreeIPA-сервер(а). Допустим только FQDN

Realm

Kerberos realm для подключения к FreeIPA-серверу

Domains

Один или более доменов, привязанных к FreeIPA

Kadmin server

Адрес хоста, на котором запущен kadmin. Допустим только FQDN

Kadmin principal

Имя принципала для подключения через kadmin, например admin@RU-CENTRAL1.INTERNAL

Kadmin password

Пароль пользователя IPA Admin

Keytabs directory

Директория keytab-файла, содержащего записи одного или нескольких принципалов и их ключи

Additional realms

Дополнительные сети Kerberos realm

IpaClient No NTP Autoconf

Отключает настройку NTP при установке IPA-клиентов

IpaClient No DNS Lookup

Отключает поиск сервера FreeIPA по DNS при установке IPA-клиентов

Number of retries for kinit invocation attempts

Количество повторных попыток вызова kinit

Проверка интеграции с FreeIPA

После успешной керберизации выполнение hadoop-команд на узлах кластера возможно только после получения соответствующего тикета Kerberos. Ниже приведены примеры доступа к незащищенному кластеру, а также к кластеру, керберизованному с помощью FreeIPA.

Доступ к HDFS до керберизации

HDFS CLI

 

Листинг корневой директории HDFS:

$ hdfs dfs -ls /

Пример вывода:

Found 4 items
drwxrwxrwt   - yarn hadoop          0 2023-01-31 16:46 /logs
drwxr-xr-x   - hdfs hadoop          0 2023-01-31 16:43 /system
drwxrwxrwx   - hdfs hadoop          0 2023-01-31 21:46 /tmp
drwxr-xr-x   - hdfs hadoop          0 2023-01-31 17:00 /user
HDFS HttpFS

 

Запрос curl к HttpFS на листинг корневой директории HDFS:

$ curl "http://ka-adh-2.ru-central1.internal:14000/webhdfs/v1/?op=LISTSTATUS&user=admin"

Пример HTTP-ответа:

{"FileStatuses":{"FileStatus":[{"pathSuffix":"logs","type":"DIRECTORY","length":0,"owner":"yarn","group":"hadoop","permission":"1777","accessTime":0,"modificationTime":1675183594965,"blockSize":0,"replication":0},...

Доступ к HDFS после керберизации с FreeIPA

HDFS CLI

 

Листинг корневой директории HDFS:

$ hdfs dfs -ls /

Пример вывода (доступ запрещен):

2023-02-01 21:15:51,819 WARN ipc.Client: Exception encountered while connecting to the server : org.apache.hadoop.security.AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS]
2023-02-01 21:15:51,831 WARN ipc.Client: Exception encountered while connecting to the server : org.apache.hadoop.security.AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS]
2023-02-01 21:15:51,832 INFO retry.RetryInvocationHandler: java.io.IOException: DestHost:destPort ka-adh-3.ru-central1.internal:8020 , LocalHost:localPort ka-adh-1.ru-central1.internal/10.92.17.141:0. Failed on local exception: java.io.IOException: org.apache.hadoop.security.AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS], while invoking ClientNamenodeProtocolTranslatorPB.getFileInfo over ka-adh-3.ru-central1.internal/10.92.16.90:8020 after 1 failover attempts. Trying to failover after sleeping for 518ms
...

Чтобы пройти аутентификацию, UNIX-пользователь, от имени которого выполняется команда hdfs dfs …​ (admin в нашем случае), должен получить тикет Kerberos:

$ kinit admin

После получения тикета команда hdfs dfs -ls / выводит содержимое корневой директории HDFS, что подтверждает успешную аутентификацию:

Found 4 items
drwxrwxrwt   - yarn hadoop          0 2023-01-31 16:46 /logs
drwxr-xr-x   - hdfs hadoop          0 2023-01-31 16:43 /system
drwxrwxrwx   - hdfs hadoop          0 2023-01-31 21:46 /tmp
drwxr-xr-x   - hdfs hadoop          0 2023-01-31 17:00 /user
HDFS HttpFS

 

Запрос curl к HttpFS:

$ curl "http://ka-adh-2.ru-central1.internal:14000/webhdfs/v1/?op=LISTSTATUS&user=admin"

HTTP-ответ (доступ запрещен):

<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>Error 401 Authentication required</title>
</head>
<body><h2>HTTP ERROR 401</h2>
<p>Problem accessing /webhdfs/v1/. Reason:
<pre>    Authentication required</pre></p>
</body>
</html>

Чтобы пройти аутентификацию, UNIX-пользователь, от имени которого запускается curl (admin в нашем случае), должен получить тикет Kerberos.

$ kinit admin

Запрос curl к HttpFS:

$ curl --negotiate -u : "http://ka-adh-2.ru-central1.internal:14000/webhdfs/v1/?op=LISTSTATUS&user=admin"
РЕКОМЕНДАЦИЯ
Флаг --negotiate активирует SPNEGO для доступа curl к ресурсу, защищенному Kerberos.

HTTP-ответ (доступ разрешен):

{"FileStatuses":{"FileStatus":[{"pathSuffix":"logs","type":"DIRECTORY","length":0,"owner":"yarn","group":"hadoop","permission":"1777","accessTime":0,"modificationTime":1675183594965,"blockSize":0,"replication":0},{"pathSuffix":"system","type":"DIRECTORY","length":0,"owner":"hdfs","group":"hadoop","permission":"755","accessTime":0,"modificationTime":1675183407542,"blockSize":0,"replication":0},...
Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней