Настройка LDAP и SSL для Trino в Kubernetes с помощью Helm
Требования
-
Установленный кластер ADH версии 4.2.0 или более поздней.
-
Кластер Trino, развернутый в Kubernetes согласно инструкции.
-
SSL активирован для кластера ADH. Данный шаг не является обязательным, но рекомендуется в целях безопасности. Дальнейшие шаги предполагают выполнение данного этапа.
|
ПРИМЕЧАНИЕ
Методы аутентификации Kerberos и LDAP являются взаимоисключающими.
|
Шаг 1. Обновление секретов Kubernetes
Развернутый ранее кластер Trino использует секрет Kubernetes с конфигурационными файлами ADH для взаимодействия с незащищенными ADH-сервисами. Для включения LDAP/SSL и обеспечения взаимодействия Trino с сервисами ADH, защищенными SSL, необходимо изменить конфигурационные файлы ADH в секретах Kubernetes.
-
Отредактируйте файл iceberg.properties. Обновленная версия должна содержать следующие свойства:
iceberg.propertiesconnector.name=iceberg hive.metastore.uri=thrift://tsn-adh-k8s-1.ru-central1.internal:9083 hive.metastore.authentication.type=NONE hive.metastore.thrift.client.ssl.trust-certificate=/etc/ssl/truststore.jks hive.metastore.thrift.client.ssl.trust-certificate-password=<password> hive.metastore.thrift.impersonation.enabled=true fs.hadoop.enabled=True hive.hdfs.authentication.type=NONE hive.hdfs.wire-encryption.enabled=true hive.hdfs.impersonation.enabled=True hive.config.resources=/opt/trino-server/etc/catalog/core-site.xml hive.metastore.thrift.client.ssl.enabled=True -
Если вы используете Trino с Ranger, обновите настройки Ranger согласно инструкции.
-
Создайте файл с настройками LDAP:
password-authenticatorpassword-authenticator.name=ldap ldap.url=<ldap_url> ldap.user-bind-pattern=<bind_pattern> ldap.ssl.truststore.path=<truststore> ldap.ssl.turststore.password=<password> ldap.allow-insecure=falseгде:
-
<ldap_url>— URL для подключения к LDAP. Например,ldaps://ad01.adsw.io:636. -
<bind_pattern>— шаблон имени пользователя в LDAP для поиска. Например,CN=${USER},OU=kerberos,OU=adh,DC=ad,DC=ranger-test. -
<truststore>— путь к truststore. -
<password>— пароль для truststore.
-
-
Пересоздайте секрет Kubernetes:
$ kubectl delete secret <trino-config> -n <trino-cluster-ns> $ kubectl create secret generic <trino-config> -n <trino-cluster-ns> --from-file=core-site.xml --from-file=iceberg.properties --from-file=password-authenticatorгде:
-
<trino-config>— имя секрета с конфигурацией Hadoop/Trino. -
<trino-cluster-ns>— пространство имен, используемое кластером Trino.
-
-
Создайте секрет для truststore:
$ kubectl create secret generic ca-certs -n <trino-cluster-ns> --from-file=truststore.jks=/etc/ssl/truststore.jks -
Для доступа к веб-интерфейсу Trino и JDBC-соединений сгенерируйте сертификат для Ingress:
$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout trino-cloud.ru-central1.internal.key -out trino-cloud.ru-central1.internal.crt -subj "/CN=trino-cloud.ru-central1.internal" -
Создайте секрет для входящих JDBC-соединений:
$ kubectl create secret tls trino-tls-secret -n <trino-cluster-ns> --cert=trino-cloud.ru-central1.internal.crt --key=trino-cloud.ru-central1.internal.key -
Создайте keystore для web TLS:
$ openssl pkcs12 -export -in trino-cloud.ru-central1.internal.crt -inkey trino-cloud.ru-central1.internal.key -out keystore.p12 -name trino-cloud.ru-central1.internal -
Создайте секрет для keystore:
$ kubectl create secret generic trino-web-tls -n <trino-cluster-ns> --from-file=keystore.p12=./keystore.p12 -
Настройте ваш Ingress-контроллер или балансировщик нагрузки для работы по протоколу HTTPS с использованием TLS-сертификата, хранящегося в секрете Kubernetes. Например, если используется Ingress-контроллер, добавьте следующие параметры в файл конфигурации Ingress:
tls: - hosts: - trino-cloud.ru-central1.internal (1) secretName: trino-tls-secret1 TLS-настройки для запросов, приходящих с данного хоста.
Шаг 2. Обновление конфигурации кластера Trino
-
Обновите конфигурационный файл trino_cluster_values.yaml, добавив блоки настроек LDAP, SSL и web TLS. Обновленный файл должен выглядеть следующим образом:
trino_cluster_values.yamlimage: registry: "<registry>" repository: "<image>" tag: "<tag>" useRanger: false 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 ldap: enabled: true ssl: (1) secretName: ca-certs trustStoreKey: truststore.jks trustStorePassword: bigdata webTLS: (2) secretName: trino-web-tls keystoreKey: keystore.p12 keystorePassword: bigdata1 Настройки SSL. 2 Настройки web TLS. -
Обновите инсталляцию кластера 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 ad-trino-cluster-coordinator-0 1/1 Running 0 4s ad-trino-cluster-worker-0 1/1 Running 0 17s ad-trino-cluster-worker-1 1/1 Running 0 4s
Шаг 3. Проверка JDBC-соединения
-
Подключитесь к кластеру Trino по JDBC, например, с помощью DBeaver. Строка подключения JDBC имеет следующий вид:
jdbc:trino://trino-cloud.ru-central1.internal:443?SSL=true&SSLTrustStorePath=<SSLTrustStorePath>&SSLTrustStorePassword=<SSLTrustStorePassword>&user=<USER>&password=<PWD>
где:
-
<USER>— имя пользователя в LDAP. -
<PWD>— пароль пользователя в LDAP. -
<SSLTrustStorePath>— путь к truststore-файлу с сертификатами, который использует DBeaver. -
<SSLTrustStorePassword>— пароль для доступа к truststore-файлу.
-
-
Установив подключение, выполните тестовую команду для проверки работоспособности кластера:
SHOW CATALOGS;Ожидаемый вывод:
Catalog | ----------+ iceberg | system |