Требования к SSL-сертификатам

Для реализации шифрования между узлами выполните шаги, описанные ниже.

  1. Создайте сертификат для каждого узла, используя алгоритм RSA. Длина ключа должна быть 2048 бит, значение CN должно содержать FQDN соответствующего узла. Не рекомендуется использовать алгоритм DSA, а также алгоритм ECDSA из-за того, что этот алгоритм не очень широко поддерживается сертификационными центрами.

    Длина ключа, равная 2048 битам, является необходимой и достаточной для реализации надежного шифрования.

  2. Создайте хранилище ключей trustore.jks, которое будет содержать необходимые сертификаты. Путь к этому хранилищу должен быть указан для запуска SSL.

    ПРИМЕЧАНИЕ
    • Сертификаты должны быть подписаны ключом, принадлежащим одному из доверенных корневых сертификатов, включенных в хранилище сертификатов Java.

    • Самоподписанные сертификаты разрешены. В этом случае корневой сертификат должен быть добавлен в хранилище trustore.jks.

    • Nginx требует OpenSSL-сертификаты. Если ваш кластер использует Nginx (с Hive TezUI или Airflow), сгенерируйте ключи и сертификаты OpenSSL. OpenSSL-сертфикат для вашего хоста необходимо добавить в хранилище ca-bundle.crt.

    • Учетная запись, используемая для установки сертификатов, должна иметь права на запись в следующие директории:

      • /etc/pki/tls/certs/

      • /etc/pki/java/

    • В качестве alias ключа в keystore.jks используйте FQDN, а не короткое имя.

  3. Включите трафик между узлами в соответствии с приведенной ниже таблицей.

    Приведенный ниже скрипт создает все необходимые сущности и может быть использован для справки:

    #!/bin/bash
    
    # Script for generate and import self-signet certificates to java keystore
    # Edit NUMHOSTS and HOSTS as it will be suitable for your case.
    
    
    declare -a NUMHOSTS
    declare -a HOSTS
    
    SSH_OPTS='-o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
    NUMHOSTS=(1 2 3)
    HOSTS=$(for i in "${NUMHOSTS[@]}"; do echo "adh-$i.ru-central1.internal"; done)
    
    echo Generate keystore.jks on each host
    for HOST in $HOSTS; do
    	ssh $SSH_OPTS $HOST "keytool -genkey -noprompt -keyalg RSA -alias $HOST -dname \"CN=$HOST, OU=AD, O=AD, L=MSK, S=MO, C=RU\" -keystore /tmp/keystore.jks -storepass bigdata -keypass bigdata -validity 360 -keysize 2048";
    done
    
    echo
    echo Export certificates
    for HOST in $HOSTS;do
    	ssh $SSH_OPTS $HOST "keytool -export -file /tmp/$HOST.crt -keystore /tmp/keystore.jks -storepass bigdata -alias $HOST -rfc";
    done
    
    echo
    echo Collect all certificates
    for HOST in $HOSTS; do
    	scp $SSH_OPTS $HOST:/tmp/$HOST.crt /tmp/
    done
    
    echo
    echo Transfer certificates on hosts
    for HOST in $HOSTS; do
    	scp $SSH_OPTS /tmp/*.crt $HOST:/tmp/
    done
    
    echo
    echo Import certificates on each host
    for HOST in $HOSTS; do
    	ssh $SSH_OPTS $HOST "for CERT in $(echo ${HOSTS[*]}); do
    	    keytool -import -noprompt -alias \$CERT -file /tmp/\$CERT.crt -keystore /tmp/truststore.jks -storepass bigdata;
    	    sudo bash -c \"cat /tmp/\$CERT.crt >> /etc/pki/tls/certs/ca-bundle.crt\";
    	done";
    done
    
    echo
    echo Import truststore to Java CA store
    for HOST in $HOSTS; do
    	ssh $SSH_OPTS $HOST "sudo keytool -importkeystore -noprompt -srckeystore /tmp/truststore.jks -destkeystore /etc/pki/java/cacerts -deststorepass changeit -srcstorepass bigdata"
    done
    Сопоставление портов и служб HTTP/HTTPS
    Сервис Компонент/Сервер Порт Протокол Описание

    Airflow

    Server

    8080/8080

    HTTP/HTTPS

    Порт веб-интерфейса Airflow Server

    Server/Worker

    8793/8793

    HTTP/HTTPS

    Порт для доступа к Celery Worker API

    Server/Flower

    5555/5555

    HTTP/HTTPS

    Порт веб-интерфейса Flower

    Flink

    Job Manager

    8081/8081

    HTTP/HTTPS

    Порт веб-интерфейса Flink Job Manager

    HBase

    HBase Region

    16030/16030

    HTTP/HTTPS

    Порт веб-интерфейса HBase Region Server

    Phoenix Query Server

    8765/8765

    HTTP/HTTPS

    Порт для доступа к API

    HBase REST Server

    60080/60080

    HTTP/HTTPS

    Порт для доступа к API

    HBase REST Server

    8085/8085

    HTTP/HTTPS

    Web UI Port

    HBase Master

    16010/16010

    HTTP/HTTPS

    Порт веб-интерфейса HBase Master

    HBaseThrift2Server

    Trift2 Server

    9095/9095

    HTTP/HTTPS

    Порт веб-интерфейса Thrift2 Server

    HDFS

    NameNode

    9870/9871

    HTTP/HTTPS

    Порт веб-интерфейса NameNode

    DataNode

    9864/9865

    HTTP/HTTPS

    Порт веб-интерфейса DataNode

    JournalNode

    8480/8481

    HTTP/HTTPS

    Порт веб-интерфейса JournalNode

    HTTPfs server

    14000/14000

    HTTP/HTTPS

    Порт для доступа к HTTPfs API

    Hive

    Hive Server

    10002/10002

    HTTP/HTTPS

    Порт веб-интерфейса Hive Server

    Tez

    9999/9999

    HTTP/HTTPS

    Порт веб-интерфейса Tez

    Knox

    Knox Gateway

    8443

    HTTPS

    Порт шлюза

    Ranger

    Ranger Admin

    6080/6182

    HTTP/HTTPS

    Порт для доступа к API и веб-интерфейсу Ranger Admin

    Ranger KMS

    9292/9393

    HTTP/HTTPS

    Порт для Ranger KMS

    Solr

    Solr Server

    8983/8985

    HTTP/HTTPS

    Порт для доступа к веб-интерфейсу и API Solr Server

    Spark

    History Server

    18082/18082

    HTTP/HTTPS

    Порт веб-интерфейса History Server

    Thrift Server

    4040/4040

    HTTP/HTTPS

    Порт веб-интерфейса Thrift Server

    Livy Server

    8998/8998

    HTTP/HTTPS

    Порт веб-интерфейса Livy Server

    YARN

    Resource Manager

    8088/8090

    HTTP/HTTPS

    Порт веб-интерфейса Resource Manager

    Node Manager

    8042/8044

    HTTP/HTTPS

    Порт веб-интерфейса Node Manager

    MapReduce History Server

    19888/19890

    HTTP/HTTPS

    Порт веб-интерфейса History Server

    Timeline Server

    8188/8190

    HTTP/HTTPS

    Порт веб-интерфейса Timeline Server

    Zeppelin

    Server

    8180/8180

    HTTP/HTTPS

    Порт веб-интерфейса Zeppelin

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней