Использование Ranger для Trino в Kubernetes
Требования
-
Установленный и функционирующий кластер ADPS версии 2.0.0 или более поздней.
-
Установленный и функционирующий кластер ADH версии 4.2.0 или более поздней.
-
Trino уже установлен согласно инструкции.
Шаг 1. Создание сервиса в Ranger
На данном шаге описывается создание сервиса с помощью REST API Ranger. Вы также можете создать сервис в веб-интерфейсе Ranger.
-
Создайте конфигурацию сервиса в JSON-файле:
ranger-trino-k8s.json{ "isEnabled": true, "type": "trino", "name": "trino_k8s", (1) "displayName": "trino_k8s", "description": "Service for Kubernetes Trino", "configs": { "username": "trino", (2) "password": "bigdata", (3) "ranger.plugin.audit.filters": "[{'accessResult':'DENIED','isAudited':true},{'isAudited':false,'resources':{'queryid':{'values':['*']}},'accessTypes':['execute']},{'isAudited':false,'resources':{'trinouser':{'values':['{USER}']}},'accessTypes':['impersonate']}]", "jdbc.driverClassName": "org.apache.hive.jdbc.HiveDriver", "jdbc.url": "jdbc:trino//10.92.42.219" (4) } }1 Наименование сервиса Trino в Ranger. Данное имя должно быть уникальным. 2 Имя пользователя для сервиса. 3 Пароль для сервиса. 4 JDBC-строка подключения к Trino. Эндпойнт для подключения выставляется Ingress или балансировщиком нагрузки. -
Загрузите конфигурацию сервиса в Ranger:
$ curl -u admin:<admin_pwd> -H "Content-Type: application/json" -X POST -d @ranger-trino-k8s.json http://<ranger-admin>:6080/service/public/v2/api/service
Шаг 2. Обновление секретов Kubernetes
-
Подготовьте секрет (secret) с конфигурацией Trino. Секрет уже должен иметь ключ core-site.xml. Для интеграции с Ranger добавьте следующие ключи:
-
ranger-trino-security.xml — настройка плагина Ranger.
ranger-trino-security.xml<?xml version="1.0" encoding="UTF-8"?> <configuration> <property> <name>ranger.plugin.trino.enable.implicit.userstore.enricher</name> <value>True</value> </property> <property> <name>ranger.plugin.trino.service.name</name> <value>trino_k8s</value> (1) </property> <property> <name>ranger.plugin.trino.policy.rest.url</name> <value>http://tsn-adps2-1.ru-central1.internal:6080</value> (2) </property> <property> <name>ranger.plugin.trino.policy.source.impl</name> <value>org.apache.ranger.admin.client.RangerAdminRESTClient</value> </property> <property> <name>ranger.plugin.trino.super.users</name> <value>rangerlookup</value> </property> <property> <name>ranger.plugin.trino.ugi.initialize</name> <value>True</value> </property> <property> <name>ranger.plugin.trino.username</name> <value>trino</value> (3) </property> <property> <name>ranger.plugin.trino.password</name> <value>bigdata</value> (4) </property> <property> <name>ranger.plugin.trino.use.rangerGroups</name> <value>True</value> </property> <property> <name>ranger.plugin.trino.use.only.rangerGroups</name> <value>True</value> </property> </configuration>1 Наименование сервиса Trino в Ranger. 2 URL, по которому доступен Ranger Admin. 3 Имя пользователя для сервиса. 4 Пароль для сервиса. Если активирован Kerberos, добавьте следующие свойства:
<property> <name>ranger.plugin.trino.ugi.keytab.file</name> <value>/opt/trino-server/kerberos/keytab</value> </property> <property> <name>ranger.plugin.trino.ugi.keytab.principal</name> <value>trino/trino-cloud.ru-central1.internal@RU-CENTRAL1.INTERNAL</value> </property> <property> <name>ranger.plugin.trino.ugi.login.type</name> <value>keytab</value> </property>Если активен SSL, добавьте следующее свойство:
<property> <name>ranger.plugin.trino.policy.rest.ssl.config.file</name> <value>/opt/trino-server/etc/catalog/ranger-trino-policymgr-ssl.xml</value> </property> -
ranger-trino-audit.xml — настройка аудита Ranger.
ranger-trino-audit.xml<?xml version="1.0" encoding="UTF-8"?> <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/trino_plugin/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.destination.solr.force.use.inmemory.jaas.config</name> <value>True</value> </property> <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/trino-server/kerberos/keytab</value> </property> <property> <name>xasecure.audit.jaas.Client.option.principal</name> <value>trino/trino-cloud.ru-central1.internal@RU-CENTRAL1.INTERNAL</value> </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> <property> <name>xasecure.audit.jaas.Client.option.useTicketCache</name> <value>True</value> </property> -
ranger-trino-policymgr-ssl.xml — настройка SSL для Ranger (если SSL активен).
ranger-trino-policymgr-ssl.xml<?xml version="1.0"?> <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/trino-server/etc/catalog/ranger-trino.jceks</value> (2) </property> </configuration>1 Путь к truststore. 2 Путь к файлу с данными для truststore.
-
-
Обновите секрет с конфигурацией Trino:
$ kubectl delete secret <trino-config> -n <trino-cluster-ns> $ kubectl create secret generic <trino-config> -n <trino-cluster-ns> --from-file=<trino-conf-folder>где:
-
<trino-config>— название секрета с конфигурацией Trino. -
<trino-cluster-ns>— пространство имен, используемое Trino. -
<trino-conf-folder>— директория с файлами, из которых генерируется секрет. Если вы передаете секреты в виде строк в файле values.yaml, укажите путь к этому файлу.
-
Шаг 3. Обновление кластера Trino
-
Обновите конфигурационный файл кластера Trino:
trino-cluster-values.yamlimage: registry: "<image_registry>" repository: "<image_repository>" tag: "<image_tag>" pullPolicy: Always useRanger: true configsSecretName: <trino-config> worker: replicas: 2 resources: requests: cpu: 500m memory: 1Gi limits: cpu: "2" memory: 4Gi coordinator: replicas: 1 resources: requests: cpu: 500m memory: 1Gi limits: cpu: "2" memory: 4GiВсе необходимые для работы кластера параметры уже должны быть объявлены в файле, однако необходимо присвоить параметру
useRangerзначениеtrue. -
Обновите инсталляцию кластера Trino:
$ helm upgrade --install trino-cluster oci://"$PRIVATE_REGISTRY"/adc-enterprise/charts/trino-cluster --version <version> -f trino-cluster-values.yaml --namespace <trino-cluster-ns> --create-namespace -
Удалите старые поды кластера, чтобы оператор Trino создал новые с обновленной конфигурацией:
$ kubectl delete pods -n <trino-cluster-ns> -l app.kubernetes.io/instance=trino-cluster -
Проверьте, что все поды имеют состояние
Running:$ kubectl get pods -n <trino-cluster-ns>Ожидаемый вывод:
NAME READY STATUS RESTARTS AGE trino-cluster-coordinator-0 1/1 Running 0 47m trino-cluster-worker-0 1/1 Running 0 47m trino-cluster-worker-1 1/1 Running 0 47m