Установка ограничений на клиенты и пользователей#
С помощью ansible#
Для того, чтобы получить список ограничений на клиентах/пользователях, необходимо на сервере, с которого производилась установка, выполнить команду:
только для определенных client.id:
/bin/kafka-configs.sh --command-config config/producer.properties --bootstrap-server host1:port1,host2:port2,host3:port3 --describe --entity-type clients
только для определенных пользователей (идентификация пользователя осуществляется по DN сертификата):
/bin/kafka-configs.sh --command-config config/producer.properties --bootstrap-server host1:port1,host2:port2,host3:port3 --describe --entity-type users
для пользователей (идентификация пользователя осуществляется по сертификату) и клиентов, где ограничения установлены для них одновременно:
/bin/kafka-configs.sh --command-config config/producer.properties --bootstrap-server host1:port1,host2:port2,host3:port3 --describe --entity-type users --entity-type clients
Для добавления ограничения на клиентах/пользователях необходимо на сервере, с которого производилась установка, выполнить команду:
для клиентов и пользователей одновременно:
./bin/kafka-configs.sh --command-config config/producer.properties --bootstrap-server host1:port1,host2:port2,host3:port3 --alter --add-config 'producer_byte_rate=1024000,consumer_byte_rate=1024000' --entity-type users --entity-name "CN=XXX.YYYY,OU=XXX,O=XXXX,L=Moscow,C=RU" --entity-type clients --entity-name <client.id>
только для определенных пользователей:
./bin/kafka-configs.sh --command-config config/producer.properties --bootstrap-server host1:port1,host2:port2,host3:port3 --alter --add-config 'producer_byte_rate=1024000,consumer_byte_rate=1024000' --entity-type users --entity-name "CN=XXX.YYYY,OU=XXX,O=XXXX,L=Moscow,C=RU"
только для определенных client.id:
./bin/kafka-configs.sh --command-config config/producer.properties --bootstrap-server host1:port1,host2:port2,host3:port3 --alter --add-config 'producer_byte_rate=1024000,consumer_byte_rate=1024000' --entity-type clients --entity-name <client.id>
Для удаления ограничений на клиентах/пользователях необходимо на сервере, с которого производилась установка, выполнить команду:
только для определенных client.id:
./bin/kafka-configs.sh --command-config config/producer.properties --bootstrap-server host1:port1,host2:port2,host3:port3 --alter --delete-config 'producer_byte_rate, consumer_byte_rate' --entity-type clients --entity-name <client.id>
только для определенных пользователей (идентификация пользователя осуществляется по DN сертификата):
./bin/kafka-configs.sh --command-config config/producer.properties --bootstrap-server host1:port1,host2:port2,host3:port3 --alter --delete-config 'producer_byte_rate, consumer_byte_rate' --entity-type users --entity-name "CN=XXX.YYYY,OU=XXX,O=XXXX,L=Moscow,C=RU"
для пользователей (идентификация пользователя осуществляется по сертификату) и клиентов, где ограничения установлены для них одновременно:
./bin/kafka-configs.sh --command-config config/producer.properties --bootstrap-server host1:port1,host2:port2,host3:port3 --alter --delete-config 'producer_byte_rate, consumer_byte_rate' --entity-type users --entity-name "CN=XXX.YYYY,OU=XXX,O=XXXX,L=Moscow,C=RU" --entity-type clients --entity-name <client.id>
С помощью Jenkins#
Работа с ограничениями на клиенты и/или пользователей осуществляется с помощью Jenkins job SYN_custom_kafka с использованием playbook kafka_limits.yml.
Предварительно в конфигурационном файле vars.yml необходимо заполнить блок:
kafka_limits:
# - producer_byte_rate: "1024000" # ограничения для producer, в байтах
# consumer_byte_rate: "1024000" # ограничения для consumer, в байтах
# dn_name: <имя сертификата, например user2> # dn сертификата пользователя
# client_id: <имя клиента, например client2> # client.id из настроек producer/consumer
# erase: false # параметр для удаления ограничения. Допустимые значения: false и true. В случае необходимости удаления лимитов перед запуском задания Jenkins необходимо устанавливить значение true.
Процесс создания Jenkins job SYN_custom_kafka описан в документе Руководство по установке, раздел Создание Jenkins Job для автоматической установки.
Настраиваемые параметры SYN_custom_kafka:
job_config_renew— обновление Jenkins Job. При установке приложения должен быть выключен (false). Для обновления текущих параметров и сохранения значений по умолчанию должен быть включен (true);inventory— имя inventory для установки;nexusUrl— ссылка на переданный дистрибутив ./EVTD-kafka-[version]-distrib.zip;nexusUrlKafka— полный путь до дистрибутива KFKA или дистрибутива Apache Kafka;playbook— необходимый сценарий установки;tags— список тегов для playbookkafka_limits.yml:erase_limits — удаление ограничений;
get_limits — получить запрос текущих ограничений;
set_limits — установка ограничений;
select_all_hosts– выполнение playbook на всех серверах из выбранного inventory;only_on_host– выполнение playbook на выбранных серверах;emailto— список адресов электронной почты для отправки результатов (письмо исполнителю упадет автоматически);custom_vault_password– ручной ввод пароля для Ansible Vault;jenkins_slave— выбор Jenkins Slave;ansible_branch— ветка скриптов развертывания;ansible_version— версия ansible. Например, значение ansible29;nexus_user_cred— Jenkins Username with Password credential ID для выкачивания дистрибутива. При заданииsecman_url– полный путь в HashiCorp Vault до имени пользователя и пароля. Например:{Jenkins *Vault App Role credential* ID для получения секретов из HashiCorp Vault}|path/to/nexus:{user},{password};vault_cred— Jenkins secret file credential ID со строкой для расшифровки паролей (ansible vault). При заданииsecman_url– полный путь в HashiCorp Vault до пароля. Например:{Jenkins *Vault App Role credential* ID_1}|/path/to/vault:{password_1}, {Jenkins *Vault App Role credential* ID_2}|/path/to/vault:{password_2}В качестве пароля можно использовать не строку, а файл в base64 формате с ключом секрета, заканчивающимся на Base64. Например myVaultBase64;server_ssh_cred– Jenkins SSH Username with private key credential ID для подключения к серверам. При задании параметраsecman_url— укажите полный путь в Hashicorp Vault до секрета. Например:{Jenkins *Vault App Role Credential* ID для получения секретов из HashiCorp Vault}|/.../KV/ssh:{user},{key},{passphrase}. В качестве ключа можно использовать не строку, а файл в base64 формате с ключом секрета, заканчивающимся на Base64. Например myPrivateKeyBase64;secman_url— URL для подключения к HashiCorp Vault;jdk_tool— указание Jenkins Tool с нужной версией JDK;ssl_verify— проверка, являются ли сертификаты HashiCorp Vault/Nexus доверенными;inventories_repo— репозиторий с inventory. Данный пункт применим, если inventory были созданы в другом репозитории, отличным от того, где лежат скрипты;inventories_branch— ветка репозитория, где находятся inventory. Данный пункт применим, если inventory были созданы в другом репозитории, отличным от того, где лежат скрипты;inventories_path— путь до inventories от корня репозитория (значениеAnsible/inventories).
Если не выбран ни один из параметров only_on_host, select_all_hosts, выполнение Jenkins job прервется с ошибкой Не выбраны сервера.