Настройка FreeIPA с помощью ADCM
Обзор
Для керберизации кластера с помощью FreeIPA выполните описанные ниже шаги:
-
В веб-интерфейсе ADCM перейдите на страницу Clusters. Выберите установленный и подготовленный кластер ADH, и запустите действие Manage Kerberos.
Manage Kerberos -
В появившемся окне выберите опцию Existing FreeIPA.
Выбор соответствующей опции -
Заполните Kerberos-параметры FreeIPA и приступайте к настройке Kerberos в кластере.
Kerberos-параметры FreeIPA -
Нажмите 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 principal |
Имя принципала для подключения через |
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:
$ 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
Запрос 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:
$ 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
Запрос 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},...