Настройка LDAP и SSL для Impala в Kubernetes с помощью Helm

Требования

Для доступа к веб-интерфейсу 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

  1. Создайте секрет для truststore:

    $ kubectl create secret generic ca-store -n <impala-cluster-ns> --from-file=truststore.jks=/etc/ssl/truststore.jks
  2. Создайте секрет для входящих 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
  3. Создайте секрет для 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.

  4. Создайте секрет для 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
  5. Измените конфигурационный файл 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>
  6. Если вы используете Impala с Ranger, обновите настройки Ranger согласно инструкции.

  7. Пересоздайте секрет 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

  1. Обновите конфигурационный файл impala_cluster_values.yaml, добавив блоки настроек LDAP, SSL, TLS, CA и web TLS. Обновленный файл должен выглядеть следующим образом:

    impala_cluster_values.yaml
    image:
      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.
  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-cluster
  4. Проверьте, что все поды имеют состояние 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-соединения

  1. Подключитесь к кластеру 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-файлу.

  2. Установив подключение, выполните тестовую команду для проверки работоспособности кластера:

    SHOW DATABASES;

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

    name            |comment                                     |
    ----------------+--------------------------------------------+
    _impala_builtins|System database for Impala builtin functions|
    default         |Default Hive database                       |
Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней