# host c-mon-vmauth-vip.example.org is1-mon-vmauth-vip.example.org has address 10.0.77.120 # dig TXT is1-mon-vmauth-vip.example.org +short "250130. dmr. VIP for is1-mon-vmauth."
Пример организации получения TLS-сертификата для Virtual IP (VIP) на vmauth-узлах с автообновлением
Добавление записей в DNS для «основного» доменного имени
Добавление записей для Virtual IP
-
Добавьте в DNS-зону A-запись для нового Virtual IP с понятным именем.
-
Для двух узлов is1-mon-vmauth0[1-2]p выбрано имя is1-mon-vmauth-vip.
-
Добавьте в DNS-зону TXT-запись с датой, своим логином, кратким описанием цели создания этого IP, заключёнными в кавычки. "250304. dmr. VIP for is1-mon-vmauth."
-
Добавьте в DNS-зону PTR-запись, соответствующую ранее добавленной A-записи.
Результат
-
В результате этих действий упрощается отладка. При распознавании is1-vmauth.example.org получим исчерпывающий ответ:
Добавление «host» для Virtual IP во FreeIPA
Создание «Узла»
-
Добавьте во FreeIPA, в разделе «Hosts», узел для VIP с именем, как у ранее добавленной в DNS A-записи.
is1-mon-vmauth-vip.example.org
-
Добавьте к «узлу» в поле «Описание» краткое описание цели создания узла. Например:
250304. nifantiev. Для выпуска TLS-сертификата под vmauth в новом VictoriaMetrics-кластере. Так как Kerberos не нужен, то вместо создания «сервиса» было выбрано создание «узла».
-
Добавьте к созданному «узлу» is1-mon-vmauth-vip.example.org два реальных узла is1-mon-vmauth0[1-2]p.example.org , между которыми будет мигрировать VIP.
Запрос TLS-сертификата для основного dns-имени Virtual IP
Переменные для скриптов и запроса сертификата
-
Задайте общие переменные. В большинстве случаев ничего менять не требуется:
REQUEST_SHORT_NAME='vip' TLS_DIR="/etc/pki/tls" TLS_KEY_FILE="${TLS_DIR}/private/${REQUEST_SHORT_NAME}.key" TLS_CERT_FILE="${TLS_DIR}/certs/${REQUEST_SHORT_NAME}.crt" SCRIPT_DIR="/usr/local/lib/certmonger" SCRIPT_BEFORE="${REQUEST_SHORT_NAME}-before-savecert" SCRIPT_AFTER="${REQUEST_SHORT_NAME}-after-savecert" FULL_SCRIPT_BEFORE=${SCRIPT_DIR}/${SCRIPT_BEFORE} FULL_SCRIPT_AFTER=${SCRIPT_DIR}/${SCRIPT_AFTER}
Скрипты для автовыполнения перед и после получения сертификата
-
Выполните этот сценарий для создания двух скриптов, которые выполняются перед и после получения нового сертификата:
mkdir -p ${SCRIPT_DIR} cat << EOF > ${FULL_SCRIPT_BEFORE} #!/bin/bash set +e set -ux echo "The script ${SCRIPT_BEFORE} is launching..." KEY="${TLS_KEY_FILE}" CERT="${TLS_CERT_FILE}" # Your commands is here! cp \${KEY} "\${KEY}-\$(date +%y%m%d-%H%M%S).bak" cp \${CERT} "\${CERT}-\$(date +%y%m%d-%H%M%S).bak" # End of script echo "The script ${SCRIPT_BEFORE} has finished." EOF cat << EOF > ${FULL_SCRIPT_AFTER} #!/bin/bash # На сгенерированный ключ имеет права только root, # поэтому с помощью setfacl необходимо добавить право чтения # учётной записи, под которой работает сервис. set +e set -ux echo "The script ${SCRIPT_AFTER} is launching..." KEY="${TLS_KEY_FILE}" CERT="${TLS_CERT_FILE}" # Example for airflow #echo "airflow..." #/usr/bin/setfacl -m "u:airflow:r" \$KEY #/usr/bin/systemctl restart airflow-webserver # Example for nginx #echo "nginx..." #/usr/bin/setfacl -m "u:nginx:r" \$KEY #systemctl reload nginx # Your commands is here! /usr/bin/setfacl -m "u:vmauth:r" \$KEY systemctl restart vmauth # End of script echo "The script ${SCRIPT_AFTER} has finished." EOF FILES_PATH="${SCRIPT_DIR}/${REQUEST_SHORT_NAME}-*" chmod 700 ${FILES_PATH} chown root:root ${FILES_PATH}
Запрос TLS-сертификата для основного VIP-имени
-
Выполните запрос для основного имени заданного в переменной
VIP_HOSTNAME
:VIP_HOSTNAME='isbi-mon-vmauth-vip.data.corp' ipa-getcert request \ -I ${REQUEST_SHORT_NAME} \ --subject-name CN=${VIP_HOSTNAME} \ --principal host/${VIP_HOSTNAME} \ --keyfile "${TLS_KEY_FILE}" \ --certfile "${TLS_CERT_FILE}" \ --before-command="/bin/bash -c \"${FULL_SCRIPT_BEFORE} 2>&1 | /usr/bin/logger -t CERTMONGER\"" \ --after-command="/bin/bash -c \"${FULL_SCRIPT_AFTER} 2>&1 | /usr/bin/logger -t CERTMONGER\"" \ --key-owner root --key-perms 0600 \ --cert-owner root --cert-perms 0644 \ -w
Number of certificates and requests being tracked: 1. Request ID 'vip': status: MONITORING stuck: no key pair storage: type=FILE,location='/etc/pki/tls/private/vip.key',owner=root,perms=0600 certificate: type=FILE,location='/etc/pki/tls/certs/vip.crt',owner=root,perms=0644 CA: IPA issuer: CN=Certificate Authority,O=DATA.CORP subject: CN=isbi-mon-vmauth-vip.data.corp,O=DATA.CORP issued: 2025-03-04 17:22:17 MSK expires: 2027-03-05 17:22:17 MSK dns: isbi-mon-vmauth-vip.data.corp principal name: host/isbi-mon-vmauth-vip.data.corp@DATA.CORP key usage: digitalSignature,nonRepudiation,keyEncipherment,dataEncipherment eku: id-kp-serverAuth,id-kp-clientAuth pre-save command: /bin/bash -c "/usr/local/lib/certmonger/vip-before-savecert 2>&1 | /usr/bin/logger -t CERTMONGER" post-save command: /bin/bash -c "/usr/local/lib/certmonger/vip-after-savecert 2>&1 | /usr/bin/logger -t CERTMONGER" track: yes auto-renew: yes