Установка ограничений на клиенты и пользователей#

С помощью ansible#

  1. Для того, чтобы получить список ограничений на клиентах/пользователях, необходимо на сервере, с которого производилась установка, выполнить команду:

  • только для определенных 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
  1. Для добавления ограничения на клиентах/пользователях необходимо на сервере, с которого производилась установка, выполнить команду:

  • для клиентов и пользователей одновременно:

./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>
  1. Для удаления ограничений на клиентах/пользователях необходимо на сервере, с которого производилась установка, выполнить команду:

  • только для определенных 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 — список тегов для playbook kafka_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 прервется с ошибкой Не выбраны сервера.