Использование Ranger для Impala в Kubernetes

Требования

Шаг 1. Создание сервиса в Ranger

На данном шаге описывается создание сервиса с помощью REST API Ranger. Вы также можете создать сервис в веб-интерфейсе Ranger.

  1. Создайте конфигурацию сервиса в JSON-файле:

    ranger-impala-k8s.json
    {
      "isEnabled": true,
      "type": "hive",
      "name": "impala_k8s", (1)
      "displayName": "impala_k8s",
      "description": "Service for Kubernetes Impala",
      "configs": {
        "username": "impala", (2)
        "password": "bigdata",  (3)
        "ranger.plugin.audit.filters": "[ {'accessResult': 'DENIED', 'isAudited': true}, {'actions':['METADATA OPERATION'], 'isAudited': false}, {'users':['hive','hue'],'actions':['SHOW_ROLES'],'isAudited':false} ]",
        "jdbc.driverClassName": "org.apache.hive.jdbc.HiveDriver",
        "jdbc.url": "jdbc:impala://10.92.41.149:21050" (4)
      }
    }
    1 Наименование сервиса Impala в Ranger. Данное имя должно быть уникальным.
    2 Имя пользователя для сервиса.
    3 Пароль для сервиса.
    4 JDBC-строка подключения к Impala, предоставляемая балансировщиком нагрузки.
  2. Загрузите конфигурацию сервиса в Ranger:

    $ curl -u admin:<admin_pwd> -H "Content-Type: application/json" -X POST -d @ranger-impala-k8s.json http://<ranger-admin>:6080/service/public/v2/api/service

Шаг 2. Обновление секретов Kubernetes

  1. Подготовьте секреты (secret) с конфигурацией Hadoop. В текущем секрете конфигурации Hadoop уже должны быть ключи core-site.xml, hdfs-site.xml и hive-site.xml. Для интеграции с Ranger добавьте следующие ключи:

    • ranger-impala-security.xml — настройка плагина Ranger.

      ranger-impala-security.xml
      <?xml version="1.0" encoding="UTF-8"?>
      <configuration>
      	<property>
      		<name>ranger.plugin.impala.policy.cache.dir</name>
      		<value>/srv/ranger/impala/policycache</value>
      	</property>
      	<property>
      		<name>ranger.plugin.impala.service.name</name>
      		<value>impala_k8s</value> (1)
      	</property>
      	<property>
      		<name>ranger.plugin.impala.policy.rest.url</name>
      		<value>http://tsn-adps2-1.ru-central1.internal:6080</value> (2)
      	</property>
      	<property>
      		<name>ranger.plugin.impala.policy.source.impl</name>
      		<value>org.apache.ranger.admin.client.RangerAdminRESTClient</value>
      	</property>
      	<property>
      		<name>ranger.plugin.impala.username</name>
      		<value>impala</value> (3)
      	</property>
      	<property>
      		<name>ranger.plugin.impala.password</name>
      		<value>bigdata</value> (4)
      	</property>
      	<property>
      		<name>ranger.plugin.impala.use.rangerGroups</name>
      		<value>True</value>
      	</property>
      	<property>
      		<name>ranger.plugin.impala.use.only.rangerGroups</name>
      		<value>True</value>
      	</property>
      </configuration>
      1 Наименование сервиса Impala в Ranger.
      2 URL, по которому доступен Ranger Admin.
      3 Имя пользователя для сервиса.
      4 Пароль для сервиса.

      Если активен SSL, добавьте следующее свойство:

      <property>
          <name>ranger.plugin.impala.policy.rest.ssl.config.file</name>
          <value>/opt/impala/conf/ranger-impala-policymgr-ssl.xml</value> (1)
      </property>
      1 Наименование файла с настройками SSL для Ranger.
    • ranger-impala-audit.xml — настройки аудита Ranger.

      ranger-impala-audit.xml
      <configuration>
      	<property>
      		<name>xasecure.audit.destination.solr</name>
      		<value>true</value>
      	</property>
      	<property>
      		<name>xasecure.audit.destination.solr.batch.filespool.dir</name>
      		<value>/srv/ranger/impala_k8s/audit_solr_spool</value>
      	</property>
      	<property>
      		<name>xasecure.audit.destination.solr.zookeepers</name>
      		<value>tsn-adps2-1.ru-central1.internal:2181/Arenadata.Hadoop-3.solr.server</value> (1)
      	</property>
      	<property>
      		<name>xasecure.audit.is.enabled</name>
      		<value>True</value>
      	</property>
      </configuration>
      1 Строка подключения к ZooKeeper в формате <host-1>:<port-1>…​<host-N>:<port-N>/Arenadata.Hadoop-<cluster_id>.solr.server.

      Если активирован Kerberos, добавьте следующие свойства:

      <property>
          <name>xasecure.audit.jaas.Client.loginModuleControlFlag</name>
          <value>required</value>
      </property>
      <property>
          <name>xasecure.audit.jaas.Client.loginModuleName</name>
          <value>com.sun.security.auth.module.Krb5LoginModule</value>
      </property>
      <property>
          <name>xasecure.audit.jaas.Client.option.keyTab</name>
          <value>/opt/impala/kerberos/keytab</value> (1)
      </property>
      <property>
          <name>xasecure.audit.jaas.Client.option.principal</name>
          <value>impala/impala-cloud.ru-central1.internal@RU-CENTRAL1.INTERNAL</value> (2)
      </property>
      <property>
          <name>xasecure.audit.jaas.Client.option.serviceName</name>
          <value>solr</value>
      </property>
      <property>
          <name>xasecure.audit.jaas.Client.option.storeKey</name>
          <value>False</value>
      </property>
      <property>
          <name>xasecure.audit.jaas.Client.option.useKeyTab</name>
          <value>True</value>
      </property>
      1 Путь к keytab-файлу внутри пода.
      2 Имя принципала для сервиса Impala.
    • ranger-impala-policymgr-ssl.xml — настройки SSL для Ranger (если SSL активен).

      ranger-impala-policymgr-ssl.xml
      <configuration>
      	<property>
      		<name>xasecure.policymgr.clientssl.truststore</name>
      		<value>/etc/ssl/truststore.jks</value> (1)
      	</property>
      	<property>
      		<name>xasecure.policymgr.clientssl.truststore.credential.file</name>
      		<value>jceks://file/opt/impala/conf/ranger-impala.jceks</value> (2)
      	</property>
      </configuration>
      1 Путь к truststore.
      2 Путь к файлу с данными для доступа к truststore.
  2. Обновите секрет с конфигурацией Hadoop:

    $ kubectl delete secret <hadoop-config> -n <impala-cluster-ns>
    $ kubectl create secret generic <hadoop-config> -n <impala-cluster-ns> --from-file=<hadoop-conf-folder>

    где:

    • <hadoop-config> — название секрета с конфигурацией Hadoop.

    • <impala-cluster-ns> — пространство имен, используемое кластером Impala cluster.

    • <hadoop-conf-folder> — директория с файлами, из которых генерируется секрет. Если вы передаете секреты в виде строк в файле values.yaml, укажите путь к этому файлу.

Шаг 3. Обновление кластера Impala

  1. Обновите конфигурационный файл кластера Impala:

    impala-cluster-values.yaml
    image:
      registry: "<image_registry>"
      repository: "<image_repository>"
      tag: "<image_tag>"
      pullPolicy: Always
    
    useRanger: true
    clusterDomain: cluster.local
    configsSecretName: <hadoop-config>
    
    catalog:
    
    coordinator:
    
    executor:
      replicas: 2
    
    statestore:

    Все необходимые для работы кластера параметры уже должны быть объявлены в файле, однако необходимо присвоить параметру useRanger значение true.

  2. Обновите инсталляцию кластера Impala:

    $ helm upgrade --install impala-cluster oci://"$PRIVATE_REGISTRY"/adc-enterprise/charts/impala-cluster --version <version> -f impala-cluster-values.yaml --namespace <impala-cluster-ns> --create-namespace
  3. Удалите старые поды кластера, чтобы оператор Impala создал новые с обновленной конфигурацией:

    $ kubectl delete pods -n <impala-cluster-ns> -l app.kubernetes.io/instance=impala
  4. Проверьте, что все поды имеют состояние Running:

    $ kubectl get pods -n <impala-cluster-ns>

    Ожидаемый вывод:

    NAME                           READY   STATUS    RESTARTS   AGE
    impala-cluster-catalog-0       1/1     Running   0          65m
    impala-cluster-coordinator-0   1/1     Running   0          65m
    impala-cluster-executor-0      1/1     Running   0          65m
    impala-cluster-executor-1      1/1     Running   0          65m
    impala-cluster-statestore-0    1/1     Running   0          65m
Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней