Дескрипторы топологий в 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

 

Ниже приведен пример файла топологии для кластера 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

 

Ниже приведен пример файла дескриптора топологии для кластера 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/"
      ]
    }
  ]
}
Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней