Настройка LDAP и SSL для Impala в Kubernetes с помощью Helm
Требования
-
Установленный кластер ADH версии 4.2.0 или более поздней.
-
Кластер Impala, развернутый в Kubernetes согласно инструкции.
-
SSL активирован для кластера ADH.
Для доступа к веб-интерфейсу Impala и JDBC-соединений сгенерируйте сертификаты для Ingress и балансировщика нагрузки:
$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout impala-cloud.ru-central1.internal.key -out impala-cloud.ru-central1.internal.crt -subj "/CN=impala-cloud.ru-central1.internal"
$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout impala-jdbc.ru-central1.internal.key -out impala-jdbc.ru-central1.internal.crt -subj "/CN=impala-jdbc.ru-central1.internal"
|
ПРИМЕЧАНИЕ
Методы аутентификации Kerberos и LDAP являются взаимоисключающими. Попытка предоставить конфигурацию обоих методов приведет к отклонению Helm-чарта.
|
Шаг 1. Обновление секретов Kubernetes
-
Создайте секрет для truststore:
$ kubectl create secret generic ca-store -n <impala-cluster-ns> --from-file=truststore.jks=/etc/ssl/truststore.jks -
Создайте секрет для входящих JDBC-соединений:
$ kubectl create secret generic impala-tls -n <impala-cluster-ns> --from-file=cert.crt=impala-jdbc.ru-central1.internal.crt --from-file=crt.key=impala-jdbc.ru-central1.internal.key -
Создайте секрет для CA-сертификата:
$ kubectl create secret generic impala-ca -n <impala-cluster-ns> --from-file=ldap-ca.pem=<ca_cert>где
<ca_cert>— путь к CA-сертификату, например, /etc/ssl/ldap-ca.pem. -
Создайте секрет для web TLS:
$ kubectl create secret generic web-tls-secret -n <impala-cluster-ns> --from-file=cert.crt=impala-cloud.ru-central1.internal.crt --from-file=crt.key=impala-cloud.ru-central1.internal.key -
Измените конфигурационный файл hive-site.xml. Обновленная версия должна содержать следующие свойства:
hive-site.xml<?xml version="1.0"?> <configuration> <property> <name>hive.metastore.uris</name> <value>thrift://tsn-adh-k8s-1.ru-central1.internal:9083</value> </property> <property> <name>metastore.use.SSL</name> <value>True</value> </property> <property> <name>metastore.truststore.password</name> <value>bigdata</value> </property> <property> <name>metastore.truststore.path</name> <value>/etc/ssl/truststore.jks</value> </property> <property> <name>hive.metastore.sasl.enabled</name> <value>False</value> </property> </configuration> -
Если вы используете Impala с Ranger, обновите настройки Ranger согласно инструкции.
-
Пересоздайте секрет Kubernetes:
$ kubectl delete secret <hadoop-conf> -n <impala-cluster-ns> $ kubectl create secret generic <hadoop-conf> -n <impala-cluster-ns> --from-file=core-site.xml --from-file=hdfs-site.xml --from-file=hive-site.xmlгде:
-
<hadoop-conf>— имя секрета с конфигурационными файлами ADH. -
<impala-cluster-ns>— пространство имен, используемое кластером Impala.
-
Шаг 2. Обновление конфигурации кластера Impala
-
Обновите конфигурационный файл impala_cluster_values.yaml, добавив блоки настроек LDAP, SSL, TLS, CA и web TLS. Обновленный файл должен выглядеть следующим образом:
impala_cluster_values.yamlimage: registry: <registry> repository: <repository> tag: <tag> pullSecret: name: "" ## List of secrets to create for image pulling in all product namespaces credentials: {} # registry: private-docker-registry # username: user # password: pass useRanger: false clusterDomain: cluster.local configsSecretName: "hadoop-conf" ldap: enabled: true url: <ldap_url> (1) userBindPattern: <bind_pattern> (2) ssl: (3) secretName: ca-store trustStoreKey: truststore.jks trustStorePassword: bigdata tls: (4) secretName: impala-tls certificateKey: cert.crt privateKey: crt.key webTLS: (5) secretName: web-tls-secret certificateKey: cert.crt privateKey: crt.key ca: (6) secretName: impala-ca certificateKey: ldap-ca.pem securityContext: {} # capabilities: # drop: # - ALL # readOnlyRootFilesystem: true # runAsNonRoot: true # runAsUser: 1000 catalog: coordinator: executor: replicas: 2 statestore:1 URL для подключения к LDAP. Например, ldaps://ad01.adsw.io:636.2 Шаблон имени пользователя для поиска. Например, cn=#UID,cn=Peoples,dc=ad,dc=ranger-test.3 Настройки SSL. 4 Настройки TLS. 5 Настройки web TLS. 6 Настройки CA. -
Обновите инсталляцию кластера 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 -
Удалите старые поды кластера, чтобы оператор Impala создал новые с обновленной конфигурацией:
$ kubectl delete pods -n <impala-cluster-ns> -l app.kubernetes.io/instance=impala-cluster -
Проверьте, что все поды имеют состояние
Running:$ kubectl get pods -n <impala-cluster-ns>The expected output is:
NAME READY STATUS RESTARTS AGE impala-cluster-catalog-0 1/1 Running 0 5s impala-cluster-coordinator-0 1/1 Running 0 5s impala-cluster-executor-0 1/1 Running 0 5s impala-cluster-executor-1 1/1 Running 0 5s impala-cluster-statestore-0 1/1 Running 0 5s
Шаг 3. Проверка JDBC-соединения
-
Подключитесь к кластеру Impala через JDBC, например, с помощью DBeaver. После активации LDAP и SSL строка подключения JDBC имеет следующий вид:
jdbc:impala://impala-jdbc.ru-central1.internal:21050/default;AuthMech=3;UID=<UID>;PWD=<PWD>;SSL=1;SSLTrustStore=<SSLTrustStore>;SSLTrustStorePwd=<SSLTrustStorePwd>;httpPath=cliservice
где:
-
<UID>— имя пользователя в LDAP. -
<PWD>— пароль пользователя в LDAP. -
<SSLTrustStore>— путь к truststore-файлу с сертификатами для использования DBeaver. -
<SSLTrustStorePwd>— пароль для доступа к truststore-файлу.
-
-
Установив подключение, выполните тестовую команду для проверки работоспособности кластера:
SHOW DATABASES;Ожидаемый вывод:
name |comment | ----------------+--------------------------------------------+ _impala_builtins|System database for Impala builtin functions| default |Default Hive database |