Дескрипторы топологий в Knox
Топология Knox
Топология Knox — это файл конфигурации, который определяет, какие кластерные сервисы доступны через прокси, как клиенты могут к ним обращаться и какие правила безопасности к ним применяются. Все топологии хранятся в директории /lib/knox/conf/topologies в виде XML-файлов.
Обычно файл топологии имеет следующую структуру:
<topology> (1)
<gateway> (2)
<provider> (3)
<role></role>
<name></name>
...
</provider>
...
</gateway>
<service> (4)
<role></role>
<url></url>
...
</service>
...
</topology>
1 | Корневой элемент, содержащий все настройки топологии. |
2 | Корневой элемент для провайдеров, определяющих поведение Knox Gateway при получении запроса. |
3 | Настройки провайдеров. Подробнее см. в разделе Провайдеры. |
4 | Настройки сервисов. Блоки <service> содержат информацию о URL-адресах или других параметрах, специфичных для тех сервисов, которые проксируются через Knox. Knox имеет множество предопределенных сервисов, но если нужный вам сервис отсутствует, вы можете определить его вручную и использовать так же как предопределенный. |
Ниже приведен пример файла топологии для кластера ADH, в котором настраивается аутентификация пользователей через Kerberos и проксирование API-запросов и пользовательского интерфейса.
<topology>
<generated>true</generated>
<gateway>
<provider>
<role>authentication</role>
<name>HadoopAuth</name>
<enabled>true</enabled>
<param>
<name>config.prefix</name>
<value>hadoop.auth.config</value>
</param>
<param>
<name>hadoop.auth.config.cookie.domain</name>
<value>ru-central1.internal</value>
</param>
<param>
<name>hadoop.auth.config.cookie.path</name>
<value>/</value>
</param>
<param>
<name>hadoop.auth.config.kerberos.keytab</name>
<value>/etc/security/keytabs/HTTP.service.keytab</value>
</param>
<param>
<name>hadoop.auth.config.kerberos.name.rules</name>
<value>DEFAULT</value>
</param>
<param>
<name>hadoop.auth.config.kerberos.principal</name>
<value>HTTP/stikhomirov-adps.ru-central1.internal@AD.RANGER-TEST</value>
</param>
<param>
<name>hadoop.auth.config.signature.secret</name>
<value>password</value>
</param>
<param>
<name>hadoop.auth.config.simple.anonymous.allowed</name>
<value>false</value>
</param>
<param>
<name>hadoop.auth.config.token.validity</name>
<value>1800</value>
</param>
<param>
<name>hadoop.auth.config.type</name>
<value>kerberos</value>
</param>
</provider>
</gateway>
<service>
<role>HDFSUI</role>
<url>http://tsn-adh-2.ru-central1.internal:14000/webhdfs/</url>
</service>
<service>
<role>HIVE</role>
<url>http://tsn-adh-2.ru-central1.internal:10002/</url>
</service>
<service>
<role>NAMENODE</role>
<url>http://tsn-adh-1.ru-central1.internal:9870</url>
<url>http://tsn-adh-3.ru-central1.internal:9870</url>
</service>
<service>
<role>RESOURCEMANAGER</role>
<url>http://tsn-adh-2.ru-central1.internal:8088/ws/</url>
</service>
<service>
<role>WEBHBASE</role>
<url>http://tsn-adh-2.ru-central1.internal:60080/</url>
</service>
<service>
<role>WEBHDFS</role>
<url>http://tsn-adh-2.ru-central1.internal:14000/</url>
</service>
</topology>
Такие файлы топологий можно создавать вручную и загружать в Knox через REST API, либо они могут быть автоматически сгенерированы из дескриптора топологии, который можно настроить в интерфейсе Knox.
Провайдеры
Провайдеры определяют, как Knox Gateway обрабатывает запросы. Доступны провайдеры для следующих сценариев использования:
-
Authentication (аутентификация). Knox поддерживает множество методов аутентификации: LDAP, PAM, Kerberos, SSO, SSO Cookie, JSON Web Tokens, CAS, OAuth, SAML, OpenID Connect, а также анонимную аутентификацию.
-
Authorization (авторизация). Вы можете ограничить доступ к сервисам для определенных пользователей, групп или хостов, настроив ACL.
-
Identity assertion (установление личности). Такие провайдеры позволяют имперсонировать пользователей или преобразовывать их имена в ожидаемый формат перед передачей запроса в backend-сервис.
-
Web application security (безопасность веб-приложений). Вы можете использовать следующие технологии при проксировании запросов к сервисам кластера:
-
Cross-Site Request Forgery
-
Cross-Origin Resource Sharing
-
X-Frame-Options
-
X-Content-Type-Options
-
Strict Transport Security
-
X-XSS-Protection
-
-
High availability (высокая доступность). С этим провайдером вы можете вручную указать параметры отказоустойчивости для определенных сервисов.
-
Host mapping (преобразование хостов). Этот провайдер может динамически изменять имя хоста, порт или схему URL-адресов сервисов перед перенаправлением запросов, что может быть полезно при балансировке нагрузки.
Дескриптор топологии
Дескриптор топологии — это JSON-файл, на основе которого может быть автоматически сгенерирован файл топологии. Такие файлы находятся в каталоге /lib/knox/conf/descriptors.
Типичная структура файла дескриптора представлена ниже:
{
"provider-config-ref": <provider_name>, (1)
"services": [ (2)
{
"name": <service_name>,
"urls": [
<service_urls>
],
...
},
...
]
}
1 | Имя провайдера, настроенного в Knox. |
2 | Список сервисов кластера, которые должны проксироваться через Knox Gateway. |
Ниже приведен пример файла дескриптора топологии для кластера ADH. Топология из примера выше была автоматически сгенерирована Knox на основе этого провайдера.
{
"provider-config-ref": "my-provider",
"services": [
{
"name": "HIVE",
"urls": [
"http://tsn-adh-2.ru-central1.internal:10002/"
]
},
{
"name": "RESOURCEMANAGER",
"urls": [
"http://tsn-adh-2.ru-central1.internal:8088/ws/"
]
},
{
"name": "WEBHBASE",
"urls": [
"http://tsn-adh-2.ru-central1.internal:60080/"
]
},
{
"name": "NAMENODE",
"urls": [
"http://tsn-adh-1.ru-central1.internal:9870",
"http://tsn-adh-3.ru-central1.internal:9870"
]
},
{
"name": "HDFSUI",
"urls": [
"http://tsn-adh-2.ru-central1.internal:14000/webhdfs/"
]
},
{
"name": "WEBHDFS",
"urls": [
"http://tsn-adh-2.ru-central1.internal:14000/"
]
}
]
}