name: kafka
service_id: 116
service_display_name: ApacheKafka
service_short_name: kafka
service_man: '# Инструкция по развертыванию Организация в Cloud Director через платформу
## 1. Общая информация
Сервис **Организация в Cloud Director** предназначен для управления изолированными организационными единицами (тенантами) внутри инфраструктуры Cloud Director. Он обеспечивает создание, модификацию и администрирование организаций, предоставление им облачных ресурсов, а также контроль уровня доступа. Сервис используется для организации рабочих окружений потребителей, управления жизненным циклом организаций и их сетевой инфраструктурой.
### Доступные операции
**create** — Создание новой организации с заданными характеристиками и типом доступа.
**delete** — Удаление организации после перехода в состояние suspend; приводит к удалению всех связанных сущностей.
**modify** — Изменение параметров внутри организации (на текущий момент поддерживается изменение ipSpaces).
**suspend** — Заморозка организации, ограничение возможности изменения и добавления сущностей.
**resume** — Разморозка организации, восстановление функций управления.
---
## 2. Параметры развертывания
Параметры входных данных операции **create**:
### Платформа для развертывания
Описание: платформа, на которой будет создана организация.
Пример значения: `ngcloud.ru`.
### Тип организации
Описание: тип создаваемой организации.
Варианты:
- `iaas` — организация с прямым доступом к облаку и авторизацией через Keycloak.
- `saas` — организация под управлением Nubes, без прямого доступа к облаку.
---
## 3. Рекомендованные характеристики
### Тестовое окружение
- Тип организации: `iaas` для обеспечения полного доступа к облачным ресурсам и самостоятельного управления.
### Промышленное окружение
- Тип организации: `saas` (упрощённая модель использования).
---
## 4. Выходные параметры
Услуга предоставляет следующие выходные параметры (формируются в процессе операций):
### Идентификатор организации
Уникальный идентификатор созданной организации. Используется для всех дальнейших API-операций.
### Статус организации
Отражает текущее состояние: active, suspended, modifying, deleting.
### Параметры сети
Выходные данные при наличии ipSpaces: список выделенных внешних IP, имя ip_space, количество IP.
---
## 5. Дополнительная информация
- Для конфигурации внешних IP внутри организации необходимо предварительно создать:
-- хотя бы один **Виртуальный датацентр (VDC)**;
-- хотя бы один **Сетевой шлюз периметра (Edge Gateway)**, привязанный к этой организации.
- Удаление организации возможно только через 14 дней после перевода в состояние suspend.
- Удаление организации приводит к удалению всех связанных сущностей: VDC, Edge Gateway, пулов IP, сетей, ВМок и иных объектов.
- Операция suspend не останавливает виртуальные машины, но блокирует любые изменения инфраструктуры внутри организации.
- Для iaas-организаций доступ осуществляется через Keycloak.
'
lifecycle:
suspend_on_destroy_default: true
adopt_existing_on_create_default: false
outputs:
params:
- code: state_params
type: map
- code: state_out
type: map
- code: state_params_flat
type: map
- code: state_out_flat
type: map
- code: vault_secrets
type: map
sensitive: true
- code: vault_url
type: string
- code: vault_user_path
type: string
- code: vault_fields
type: list
operations:
- name: create
id: 148
kind: instance
action: create
params:
- id: 1084
code: startupConfiguration
data_type: map-fixed
required: true
sort: 20
sub_params:
- id: 579
code: resourceRealm
data_type: string
required: true
default: ""
value_list:
- iot-naeel
- k8s-3-sandbox-nubes-ru
- k8s-4-sandbox-nubes-ru
- naeel-test-3
man: Кластер Kubernetes, на котором будет развернут экземпляр
is_modifiable: false
- id: 1085
code: clusterConfiguration
data_type: map-fixed
required: true
sort: 20
is_modifiable: true
sub_params:
- id: 580
code: cpu
data_type: integer > 0
required: true
default: "2000"
man: Указывается в Milicores
`1000` Mili == `1` Ядро
is_modifiable: false
- id: 581
code: memory
data_type: integer > 0
required: true
default: "2048"
is_modifiable: false
- id: 582
code: replicas
data_type: integer > 0
required: true
default: ""
value_list:
- "1"
- "3"
- "5"
- "7"
is_modifiable: false
- id: 583
code: disk
data_type: integer > 0
required: true
default: "1"
is_modifiable: false
- id: 1086
code: accessConfiguration
data_type: map-fixed
required: true
sort: 30
is_modifiable: true
sub_params:
- id: 584
code: allocationExternal
data_type: boolean
required: true
default: "false"
value_list:
- "false"
- "true"
is_modifiable: false
- id: 585
code: masterAccessList
data_type: json
required: true
default: '[]'
man: Необходимо настраивать, когда зарезервирован внешний адрес
Если передан пустой массив, доступ выделяется всем
is_modifiable: false
- name: create_topic
id: 165
kind: subresource
action: create
subresource: topic
man: '# Инструкция по управлению топиками Apache Kafka через платформу
## 1. Общая информация
---
Топик — это основная сущность в Apache Kafka, предназначенная для приёма сообщений от продюсеров и передачи их консюмерам.
Платформа позволяет создавать, удалять и изменять параметры топиков без прямого доступа к брокерам, обеспечивая удобное управление через интерфейс или API.
---
## Доступные операции
- **create_topic** — Создание топика
- **modify_topic** — Модификация топика
- **delete_topic** — Удаление топика
---
## 2. Параметры создания топика
Ниже перечислены параметры, которые необходимо указать при создании нового топика:
* **Имя топика**
Название топика.
Должно быть уникальным в пределах кластера.
Пример: `orders-events`.
* **Партиции**
Количество партиций топика.
Рекомендуется выбирать с учётом уровня параллелизма потребителей и предполагаемой нагрузки.
Пример: `6`. Здесь важно рассказать о том как происходит расчет оптимального количества
Обратите внимание: уменьшить количество партиций после создания невозможно, поэтому лучше закладывать небольшой запас на будущий рост нагрузки.
* **Реплики**
Количество реплик для каждой партиции.
Обычно равно количеству доступных брокеров или меньше.
Пример: `3`.
---
## 4. Параметры модификации топика
Для уже существующих топиков можно изменять параметры. Все параметры являются опциональными:
* **Имя топика**
Название топика.
Пример: `orders-events`.
* **Партиции**
Новое количество партиций.
Пример: `12`.
* **Реплики**
Новое количество реплик.
Пример: `2`.
---
## 5. Рекомендации
* Планируйте количество партиций с запасом — уменьшение их числа невозможно.
* Количество реплик должно соответствовать требуемому уровню отказоустойчивости, но не превышать количество брокеров.
* Изменение параметров топика в рабочем окружении может временно влиять на производительность. Рекомендуется проводить крупные изменения в периоды минимальной нагрузки.
---'
params:
- id: 523
code: nameTopic
data_type: string
required: true
descr: 'Пример: `orders-events`'
sort: 10
- id: 524
code: partitions
data_type: integer > 0
required: true
descr: Число партиций можно увеличить, но уменьшить их нельзя.
- id: 525
code: replicas
data_type: integer > 0
required: true
descr: Количество реплик не может привышать количество реплик брокера
sort: 20
- name: create_user
id: 168
kind: subresource
action: create
subresource: user
man: '# Инструкция по управлению пользователями Apache Kafka.
---
## 1. Общая информация
Пользователи в Apache Kafka используются для аутентификации и авторизации при подключении к кластеру.
Платформа позволяет создавать, удалять и изменять пользователей без прямого доступа к брокерам, а также настраивать права доступа к топикам и группам.
Это обеспечивает централизованное и безопасное управление доступом к ресурсам Kafka.
---
## Доступные операции
- **create_user** — Создание пользователя
- **modify_user** — Модификация пользователя
- **delete_user** — Удаление пользователя
---
## 2. Параметры создания пользователя
Ниже перечислены параметры, которые необходимо указать при создании нового пользователя:
* **Имя пользователя**
Имя создаваемого пользователя. Используется для подключения к Kafka и настройки прав.
Пример: `username-admin`
* **Топик**
Название топика, к которому будут назначены права для данного пользователя.
Пример: `orders-events`.
Использовать маску нельзя (`orders*`), только полное название или `*`.
* **Операции**
Список разрешённых операций на указанном топике.
Пример: `Describe, Read, Write`
* **Группа**
Имя группы, которой разрешён доступ. Используется при настройке консюмер-групп.
Пример: `order-consumers`.
* **Разрешённые хосты**
Список хостов или подсетей, с которых разрешено подключение пользователя.
Пример: `192.168.1.0/24` или `*`.
---
## 3. Параметры модификации пользователя
Ниже перечислены параметры, которые необходимо указать при модификации пользователя:
* **Имя пользователя**
Имя создаваемого пользователя. Используется для подключения к Kafka и настройки прав.
Пример: `username-admin`
* **Топик**
Название топика, к которому будут назначены права для данного пользователя.
Пример: `orders-events`.
Использовать маску нельзя (`orders*`), только полное название или `*`.
* **Операции**
Список разрешённых операций на указанном топике.
Пример: `Describe, Read, Write`
* **Группа**
Имя группы, которой разрешён доступ. Используется при настройке консюмер-групп.
Пример: `order-consumers`.
* **Разрешённые хосты**
Список хостов или подсетей, с которых разрешено подключение пользователя.
Пример: `192.168.1.0/24` или `*`.
---
## 4. Параметры удалении пользователя
Ниже перечислены параметры, которые необходимо указать при удалении пользователя:
* **Имя пользователя**
Имя удаляемого пользователя.
Пример: `username-admin`
## 5. Выходные параметры
После успешного создания пользователя платформа возвращает параметры, необходимые для подключения:
* **ca.crt**
Корневой сертификат (Certificate Authority), используемый для проверки подлинности сервера при TLS-подключении.
Файл содержит публичный ключ удостоверяющего центра, которому доверяют брокеры и клиенты. Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo ''<содержание поля>'' | base64 -d > <название>.crt
```
* **ca.p12**
PKCS#12-хранилище с корневым сертификатом (Certificate Authority), используемое для проверки подлинности сервера при TLS-подключении.
Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo ''<содержание поля>'' | base64 -d > <название>.p12
```
* **ca.password**
Пароль для доступа к хранилищу `ca.p12`. Выдаеться в чистом виде. Раскодировать не нужно.
* **user.crt**
Клиентский сертификат, подтверждающий личность пользователя при подключении к Kafka.
Используется совместно с приватным ключом `user.key` для аутентификации.
Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo ''<содержание поля>'' | base64 -d > <название>.crt
```
* **user.key**
Приватный ключ пользователя, применяемый для установления защищённого TLS-соединения и подтверждения подлинности.
Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo ''<содержание поля>'' | base64 -d > <название>.key
```
* **user.p12**
PKCS#12-хранилище с клиентским сертификатом и приватным ключом, предназначенное для аутентификации пользователя в Kafka.
Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo "<содержание поля>" | base64 -d > <название>.p12
```
* **user.password**
Пароль для доступа к хранилищу `user.p12`. Выдаеться в чистом виде. Раскодировать не нужно.
Эти параметры используются для настройки TLS-подключения.
---
## 6. Пример конфигурации клиента внутри кластера
Пример пода:
```yaml
apiVersion: v1
kind: Pod
metadata:
name: kafka-4
spec:
volumes:
- name: work
emptyDir: {}
containers:
- name: kcat
image: quay.io/strimzi/kafka:latest-kafka-4.0.0
command: ["sleep", "5600"]
volumeMounts:
- name: work
mountPath: /work
restartPolicy: Never
```
Создаём под и сохраняем сертификаты:
```bash
kubectl cp user.p12 kafka-4:/work/
kubectl cp ca.p12 kafka-4:/work/
```
Создаём файлы конфигурации:
```bash
cat > /work/user-read.properties <<''EOF''
security.protocol=SSL
ssl.keystore.type=PKCS12
ssl.keystore.location=/work/user.p12
ssl.keystore.password=<user.password>
ssl.truststore.type=PKCS12
ssl.truststore.location=/work/ca.p12
ssl.truststore.password=<ca.password>
EOF
```
```bash
cat > /work/user-write.properties <<''EOF''
security.protocol=SSL
ssl.keystore.type=PKCS12
ssl.keystore.location=/work/user-write.p12
ssl.keystore.password=<user.password>
ssl.truststore.type=PKCS12
ssl.truststore.location=/work/ca.p12
ssl.truststore.password=<ca.password>
EOF
```
Листинг доступных топиков:
```bash
/opt/kafka/bin/kafka-topics.sh \
--bootstrap-server kafkak8s-bootstrap-external:9093 \
--command-config /work/user-read.properties \
--list
```
Запись сообщений:
```bash
/opt/kafka/bin/kafka-console-producer.sh \
--bootstrap-server <адрес сервис брокера>:9093 \
--topic <topic> \
--producer.config /work/user-write.properties
```
Чтение сообщений:
```bash
/opt/kafka/bin/kafka-console-consumer.sh \
--bootstrap-server <адрес сервис брокера>:9093 \
--topic <topic> \
--from-beginning \
--group <group> \
--consumer.config /work/user-read.properties \
--max-messages 50
```
---
## 7. Пример внешнего подключения с использованием **kcat**
**Листинг топиков**
```bash
kcat -b <externalConnect.bootstrap.fqdn>:9093 \
-L \
-X security.protocol=SSL \
-X ssl.ca.location=./ca.crt \
-X ssl.certificate.location=./user-read.crt \
-X ssl.key.location=./user-read.key \
-X ssl.endpoint.identification.algorithm=none
```
**Запись сообщения**
```bash
echo "hello from kcat" | kcat -P \
-b <externalConnect.bootstrap.fqdn>:9093 \
-t write-test \
-X security.protocol=SSL \
-X ssl.ca.location=./ca.crt \
-X ssl.certificate.location=./user-write.crt \
-X ssl.key.location=./user-write.key \
-X ssl.endpoint.identification.algorithm=none
```
**Чтение сообщений**
```bash
kcat -C \
-b <externalConnect.bootstrap.fqdn>:9093 \
-t write-test \
-o beginning \
-q \
-X security.protocol=SSL \
-X ssl.ca.location=./ca.crt \
-X ssl.certificate.location=./user-read.crt \
-X ssl.key.location=./user-read.key \
-X ssl.endpoint.identification.algorithm=none
```
---
## 9. Рекомендации
* Минимизируйте набор разрешённых операций для повышения безопасности.
* Используйте отдельные учётные записи для продюсеров, консюмеров и системных сервисов.
* Ограничивайте доступ по IP или подсетям с помощью параметра **Разрешённые хосты**.
* После изменения прав или групп пользователя рекомендуется проверить подключение и доступ к топикам.
---'
params:
- id: 530
code: username
data_type: string
required: true
descr: 'Пример: `username-admin`'
- id: 531
code: nameTopic
data_type: string
required: true
descr: 'Пример: `orders-events`. Использовать маску нельзя(`orders*`), только полное название или `*`'
- id: 532
code: operations
data_type: array
required: true
value_list:
- Create
- Describe
- Read
- Write
descr: 'Пример: `Create, Describe, Read, Write`'
- id: 533
code: group
data_type: string
required: true
default: '*'
descr: 'Пример: `order-consumers` или `*`'
- id: 534
code: accessHosts
data_type: string
required: true
default: '*'
descr: 'Пример: `192.168.1.0/24` или `*`'
- name: delete
id: 149
kind: instance
action: delete
params: []
- name: delete_topic
id: 167
kind: subresource
action: delete
subresource: topic
params:
- id: 529
code: nameTopic
data_type: string
required: true
descr: Необходимо выбрать топик, который необходимо удалить
- name: delete_user
id: 170
kind: subresource
action: delete
subresource: user
man: '# Инструкция по управлению пользователями Apache Kafka.
---
## 1. Общая информация
Пользователи в Apache Kafka используются для аутентификации и авторизации при подключении к кластеру.
Платформа позволяет создавать, удалять и изменять пользователей без прямого доступа к брокерам, а также настраивать права доступа к топикам и группам.
Это обеспечивает централизованное и безопасное управление доступом к ресурсам Kafka.
---
## Доступные операции
- **create_user** — Создание пользователя
- **modify_user** — Модификация пользователя
- **delete_user** — Удаление пользователя
---
## 2. Параметры создания пользователя
Ниже перечислены параметры, которые необходимо указать при создании нового пользователя:
* **Имя пользователя**
Имя создаваемого пользователя. Используется для подключения к Kafka и настройки прав.
Пример: `username-admin`
* **Топик**
Название топика, к которому будут назначены права для данного пользователя.
Пример: `orders-events`.
Использовать маску нельзя (`orders*`), только полное название или `*`.
* **Операции**
Список разрешённых операций на указанном топике.
Пример: `Describe, Read, Write`
* **Группа**
Имя группы, которой разрешён доступ. Используется при настройке консюмер-групп.
Пример: `order-consumers`.
* **Разрешённые хосты**
Список хостов или подсетей, с которых разрешено подключение пользователя.
Пример: `192.168.1.0/24` или `*`.
---
## 3. Параметры модификации пользователя
Ниже перечислены параметры, которые необходимо указать при модификации пользователя:
* **Имя пользователя**
Имя создаваемого пользователя. Используется для подключения к Kafka и настройки прав.
Пример: `username-admin`
* **Топик**
Название топика, к которому будут назначены права для данного пользователя.
Пример: `orders-events`.
Использовать маску нельзя (`orders*`), только полное название или `*`.
* **Операции**
Список разрешённых операций на указанном топике.
Пример: `Describe, Read, Write`
* **Группа**
Имя группы, которой разрешён доступ. Используется при настройке консюмер-групп.
Пример: `order-consumers`.
* **Разрешённые хосты**
Список хостов или подсетей, с которых разрешено подключение пользователя.
Пример: `192.168.1.0/24` или `*`.
---
## 4. Параметры удалении пользователя
Ниже перечислены параметры, которые необходимо указать при удалении пользователя:
* **Имя пользователя**
Имя удаляемого пользователя.
Пример: `username-admin`
## 5. Выходные параметры
После успешного создания пользователя платформа возвращает параметры, необходимые для подключения:
* **ca.crt**
Корневой сертификат (Certificate Authority), используемый для проверки подлинности сервера при TLS-подключении.
Файл содержит публичный ключ удостоверяющего центра, которому доверяют брокеры и клиенты. Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo ''<содержание поля>'' | base64 -d > <название>.crt
```
* **ca.p12**
PKCS#12-хранилище с корневым сертификатом (Certificate Authority), используемое для проверки подлинности сервера при TLS-подключении.
Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo ''<содержание поля>'' | base64 -d > <название>.p12
```
* **ca.password**
Пароль для доступа к хранилищу `ca.p12`. Выдаеться в чистом виде. Раскодировать не нужно.
* **user.crt**
Клиентский сертификат, подтверждающий личность пользователя при подключении к Kafka.
Используется совместно с приватным ключом `user.key` для аутентификации.
Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo ''<содержание поля>'' | base64 -d > <название>.crt
```
* **user.key**
Приватный ключ пользователя, применяемый для установления защищённого TLS-соединения и подтверждения подлинности.
Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo ''<содержание поля>'' | base64 -d > <название>.key
```
* **user.p12**
PKCS#12-хранилище с клиентским сертификатом и приватным ключом, предназначенное для аутентификации пользователя в Kafka.
Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo "<содержание поля>" | base64 -d > <название>.p12
```
* **user.password**
Пароль для доступа к хранилищу `user.p12`. Выдаеться в чистом виде. Раскодировать не нужно.
Эти параметры используются для настройки TLS-подключения.
---
## 6. Пример конфигурации клиента внутри кластера
Пример пода:
```yaml
apiVersion: v1
kind: Pod
metadata:
name: kafka-4
spec:
volumes:
- name: work
emptyDir: {}
containers:
- name: kcat
image: quay.io/strimzi/kafka:latest-kafka-4.0.0
command: ["sleep", "5600"]
volumeMounts:
- name: work
mountPath: /work
restartPolicy: Never
```
Создаём под и сохраняем сертификаты:
```bash
kubectl cp user.p12 kafka-4:/work/
kubectl cp ca.p12 kafka-4:/work/
```
Создаём файлы конфигурации:
```bash
cat > /work/user-read.properties <<''EOF''
security.protocol=SSL
ssl.keystore.type=PKCS12
ssl.keystore.location=/work/user.p12
ssl.keystore.password=<user.password>
ssl.truststore.type=PKCS12
ssl.truststore.location=/work/ca.p12
ssl.truststore.password=<ca.password>
EOF
```
```bash
cat > /work/user-write.properties <<''EOF''
security.protocol=SSL
ssl.keystore.type=PKCS12
ssl.keystore.location=/work/user-write.p12
ssl.keystore.password=<user.password>
ssl.truststore.type=PKCS12
ssl.truststore.location=/work/ca.p12
ssl.truststore.password=<ca.password>
EOF
```
Листинг доступных топиков:
```bash
/opt/kafka/bin/kafka-topics.sh \
--bootstrap-server kafkak8s-bootstrap-external:9093 \
--command-config /work/user-read.properties \
--list
```
Запись сообщений:
```bash
/opt/kafka/bin/kafka-console-producer.sh \
--bootstrap-server <адрес сервис брокера>:9093 \
--topic <topic> \
--producer.config /work/user-write.properties
```
Чтение сообщений:
```bash
/opt/kafka/bin/kafka-console-consumer.sh \
--bootstrap-server <адрес сервис брокера>:9093 \
--topic <topic> \
--from-beginning \
--group <group> \
--consumer.config /work/user-read.properties \
--max-messages 50
```
---
## 7. Пример внешнего подключения с использованием **kcat**
**Листинг топиков**
```bash
kcat -b <externalConnect.bootstrap.fqdn>:9093 \
-L \
-X security.protocol=SSL \
-X ssl.ca.location=./ca.crt \
-X ssl.certificate.location=./user-read.crt \
-X ssl.key.location=./user-read.key \
-X ssl.endpoint.identification.algorithm=none
```
**Запись сообщения**
```bash
echo "hello from kcat" | kcat -P \
-b <externalConnect.bootstrap.fqdn>:9093 \
-t write-test \
-X security.protocol=SSL \
-X ssl.ca.location=./ca.crt \
-X ssl.certificate.location=./user-write.crt \
-X ssl.key.location=./user-write.key \
-X ssl.endpoint.identification.algorithm=none
```
**Чтение сообщений**
```bash
kcat -C \
-b <externalConnect.bootstrap.fqdn>:9093 \
-t write-test \
-o beginning \
-q \
-X security.protocol=SSL \
-X ssl.ca.location=./ca.crt \
-X ssl.certificate.location=./user-read.crt \
-X ssl.key.location=./user-read.key \
-X ssl.endpoint.identification.algorithm=none
```
---
## 9. Рекомендации
* Минимизируйте набор разрешённых операций для повышения безопасности.
* Используйте отдельные учётные записи для продюсеров, консюмеров и системных сервисов.
* Ограничивайте доступ по IP или подсетям с помощью параметра **Разрешённые хосты**.
* После изменения прав или групп пользователя рекомендуется проверить подключение и доступ к топикам.
---'
params:
- id: 540
code: username
data_type: string
required: true
descr: 'Пример: `username-admin`'
- name: modify
id: 162
kind: instance
action: modify
params:
- id: 1087
code: clusterConfiguration
data_type: map-fixed
required: true
sort: 10
sub_params:
- id: 586
code: cpu
data_type: integer > 0
required: true
default: "2000"
is_modifiable: false
- id: 587
code: memory
data_type: integer > 0
required: true
default: "2048"
is_modifiable: false
- id: 588
code: replicas
data_type: integer > 0
required: true
default: "1"
value_list:
- "1"
- "3"
- "5"
- "7"
is_modifiable: false
- id: 589
code: disk
data_type: integer > 0
required: true
default: "1"
is_modifiable: false
- id: 1088
code: accessConfiguration
data_type: map-fixed
required: true
sort: 10
sub_params:
- id: 590
code: allocationExternal
data_type: boolean
required: true
default: "false"
value_list:
- "false"
- "true"
is_modifiable: false
- id: 591
code: masterAccessList
data_type: json
required: true
default: '[]'
is_modifiable: false
- name: modify_topic
id: 166
kind: subresource
action: modify
subresource: topic
man: '# Инструкция по управлению топиками Apache Kafka через платформу
## 1. Общая информация
---
Топик — это основная сущность в Apache Kafka, предназначенная для приёма сообщений от продюсеров и передачи их консюмерам.
Платформа позволяет создавать, удалять и изменять параметры топиков без прямого доступа к брокерам, обеспечивая удобное управление через интерфейс или API.
---
## Доступные операции
- **create_topic** — Создание топика
- **modify_topic** — Модификация топика
- **delete_topic** — Удаление топика
---
## 2. Параметры создания топика
Ниже перечислены параметры, которые необходимо указать при создании нового топика:
* **Имя топика**
Название топика.
Должно быть уникальным в пределах кластера.
Пример: `orders-events`.
* **Партиции**
Количество партиций топика.
Рекомендуется выбирать с учётом уровня параллелизма потребителей и предполагаемой нагрузки.
Пример: `6`. Здесь важно рассказать о том как происходит расчет оптимального количества
Обратите внимание: уменьшить количество партиций после создания невозможно, поэтому лучше закладывать небольшой запас на будущий рост нагрузки.
* **Реплики**
Количество реплик для каждой партиции.
Обычно равно количеству доступных брокеров или меньше.
Пример: `3`.
---
## 4. Параметры модификации топика
Для уже существующих топиков можно изменять параметры. Все параметры являются опциональными:
* **Имя топика**
Название топика.
Пример: `orders-events`.
* **Партиции**
Новое количество партиций.
Пример: `12`.
* **Реплики**
Новое количество реплик.
Пример: `2`.
---
## 5. Рекомендации
* Планируйте количество партиций с запасом — уменьшение их числа невозможно.
* Количество реплик должно соответствовать требуемому уровню отказоустойчивости, но не превышать количество брокеров.
* Изменение параметров топика в рабочем окружении может временно влиять на производительность. Рекомендуется проводить крупные изменения в периоды минимальной нагрузки.
---'
params:
- id: 526
code: nameTopic
data_type: string
required: true
descr: 'Пример: `orders-events`'
sort: 10
- id: 527
code: partitions
required: false
descr: Число партиций на кластер ≤ 100 × (число брокеров) × (фактор репликации). Пример `50`
sort: 30
- id: 528
code: replicas
required: false
descr: Количество партиций ≤ (число брокеров). Пример `2`
sort: 20
- name: modify_user
id: 169
kind: subresource
action: modify
subresource: user
man: '# Инструкция по управлению пользователями Apache Kafka.
---
## 1. Общая информация
Пользователи в Apache Kafka используются для аутентификации и авторизации при подключении к кластеру.
Платформа позволяет создавать, удалять и изменять пользователей без прямого доступа к брокерам, а также настраивать права доступа к топикам и группам.
Это обеспечивает централизованное и безопасное управление доступом к ресурсам Kafka.
---
## Доступные операции
- **create_user** — Создание пользователя
- **modify_user** — Модификация пользователя
- **delete_user** — Удаление пользователя
---
## 2. Параметры создания пользователя
Ниже перечислены параметры, которые необходимо указать при создании нового пользователя:
* **Имя пользователя**
Имя создаваемого пользователя. Используется для подключения к Kafka и настройки прав.
Пример: `username-admin`
* **Топик**
Название топика, к которому будут назначены права для данного пользователя.
Пример: `orders-events`.
Использовать маску нельзя (`orders*`), только полное название или `*`.
* **Операции**
Список разрешённых операций на указанном топике.
Пример: `Describe, Read, Write`
* **Группа**
Имя группы, которой разрешён доступ. Используется при настройке консюмер-групп.
Пример: `order-consumers`.
* **Разрешённые хосты**
Список хостов или подсетей, с которых разрешено подключение пользователя.
Пример: `192.168.1.0/24` или `*`.
---
## 3. Параметры модификации пользователя
Ниже перечислены параметры, которые необходимо указать при модификации пользователя:
* **Имя пользователя**
Имя создаваемого пользователя. Используется для подключения к Kafka и настройки прав.
Пример: `username-admin`
* **Топик**
Название топика, к которому будут назначены права для данного пользователя.
Пример: `orders-events`.
Использовать маску нельзя (`orders*`), только полное название или `*`.
* **Операции**
Список разрешённых операций на указанном топике.
Пример: `Describe, Read, Write`
* **Группа**
Имя группы, которой разрешён доступ. Используется при настройке консюмер-групп.
Пример: `order-consumers`.
* **Разрешённые хосты**
Список хостов или подсетей, с которых разрешено подключение пользователя.
Пример: `192.168.1.0/24` или `*`.
---
## 4. Параметры удалении пользователя
Ниже перечислены параметры, которые необходимо указать при удалении пользователя:
* **Имя пользователя**
Имя удаляемого пользователя.
Пример: `username-admin`
## 5. Выходные параметры
После успешного создания пользователя платформа возвращает параметры, необходимые для подключения:
* **ca.crt**
Корневой сертификат (Certificate Authority), используемый для проверки подлинности сервера при TLS-подключении.
Файл содержит публичный ключ удостоверяющего центра, которому доверяют брокеры и клиенты. Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo ''<содержание поля>'' | base64 -d > <название>.crt
```
* **ca.p12**
PKCS#12-хранилище с корневым сертификатом (Certificate Authority), используемое для проверки подлинности сервера при TLS-подключении.
Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo ''<содержание поля>'' | base64 -d > <название>.p12
```
* **ca.password**
Пароль для доступа к хранилищу `ca.p12`. Выдаеться в чистом виде. Раскодировать не нужно.
* **user.crt**
Клиентский сертификат, подтверждающий личность пользователя при подключении к Kafka.
Используется совместно с приватным ключом `user.key` для аутентификации.
Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo ''<содержание поля>'' | base64 -d > <название>.crt
```
* **user.key**
Приватный ключ пользователя, применяемый для установления защищённого TLS-соединения и подтверждения подлинности.
Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo ''<содержание поля>'' | base64 -d > <название>.key
```
* **user.p12**
PKCS#12-хранилище с клиентским сертификатом и приватным ключом, предназначенное для аутентификации пользователя в Kafka.
Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo "<содержание поля>" | base64 -d > <название>.p12
```
* **user.password**
Пароль для доступа к хранилищу `user.p12`. Выдаеться в чистом виде. Раскодировать не нужно.
Эти параметры используются для настройки TLS-подключения.
---
## 6. Пример конфигурации клиента внутри кластера
Пример пода:
```yaml
apiVersion: v1
kind: Pod
metadata:
name: kafka-4
spec:
volumes:
- name: work
emptyDir: {}
containers:
- name: kcat
image: quay.io/strimzi/kafka:latest-kafka-4.0.0
command: ["sleep", "5600"]
volumeMounts:
- name: work
mountPath: /work
restartPolicy: Never
```
Создаём под и сохраняем сертификаты:
```bash
kubectl cp user.p12 kafka-4:/work/
kubectl cp ca.p12 kafka-4:/work/
```
Создаём файлы конфигурации:
```bash
cat > /work/user-read.properties <<''EOF''
security.protocol=SSL
ssl.keystore.type=PKCS12
ssl.keystore.location=/work/user.p12
ssl.keystore.password=<user.password>
ssl.truststore.type=PKCS12
ssl.truststore.location=/work/ca.p12
ssl.truststore.password=<ca.password>
EOF
```
```bash
cat > /work/user-write.properties <<''EOF''
security.protocol=SSL
ssl.keystore.type=PKCS12
ssl.keystore.location=/work/user-write.p12
ssl.keystore.password=<user.password>
ssl.truststore.type=PKCS12
ssl.truststore.location=/work/ca.p12
ssl.truststore.password=<ca.password>
EOF
```
Листинг доступных топиков:
```bash
/opt/kafka/bin/kafka-topics.sh \
--bootstrap-server kafkak8s-bootstrap-external:9093 \
--command-config /work/user-read.properties \
--list
```
Запись сообщений:
```bash
/opt/kafka/bin/kafka-console-producer.sh \
--bootstrap-server <адрес сервис брокера>:9093 \
--topic <topic> \
--producer.config /work/user-write.properties
```
Чтение сообщений:
```bash
/opt/kafka/bin/kafka-console-consumer.sh \
--bootstrap-server <адрес сервис брокера>:9093 \
--topic <topic> \
--from-beginning \
--group <group> \
--consumer.config /work/user-read.properties \
--max-messages 50
```
---
## 7. Пример внешнего подключения с использованием **kcat**
**Листинг топиков**
```bash
kcat -b <externalConnect.bootstrap.fqdn>:9093 \
-L \
-X security.protocol=SSL \
-X ssl.ca.location=./ca.crt \
-X ssl.certificate.location=./user-read.crt \
-X ssl.key.location=./user-read.key \
-X ssl.endpoint.identification.algorithm=none
```
**Запись сообщения**
```bash
echo "hello from kcat" | kcat -P \
-b <externalConnect.bootstrap.fqdn>:9093 \
-t write-test \
-X security.protocol=SSL \
-X ssl.ca.location=./ca.crt \
-X ssl.certificate.location=./user-write.crt \
-X ssl.key.location=./user-write.key \
-X ssl.endpoint.identification.algorithm=none
```
**Чтение сообщений**
```bash
kcat -C \
-b <externalConnect.bootstrap.fqdn>:9093 \
-t write-test \
-o beginning \
-q \
-X security.protocol=SSL \
-X ssl.ca.location=./ca.crt \
-X ssl.certificate.location=./user-read.crt \
-X ssl.key.location=./user-read.key \
-X ssl.endpoint.identification.algorithm=none
```
---
## 9. Рекомендации
* Минимизируйте набор разрешённых операций для повышения безопасности.
* Используйте отдельные учётные записи для продюсеров, консюмеров и системных сервисов.
* Ограничивайте доступ по IP или подсетям с помощью параметра **Разрешённые хосты**.
* После изменения прав или групп пользователя рекомендуется проверить подключение и доступ к топикам.
---'
params:
- id: 535
code: nameTopic
data_type: string
required: false
default: '*'
descr: 'Пример: `orders-events`. Использовать маску нельзя(`orders*`), только полное название или `*`'
- id: 536
code: operations
data_type: array
required: false
value_list:
- Create
- Describe
- Read
- Write
descr: 'Пример: `Create, Describe, Read, Write`'
- id: 537
code: group
data_type: string
required: false
default: '*'
descr: 'Пример: `order-consumers` или `*`'
- id: 538
code: accessHosts
data_type: string
required: false
default: '*'
descr: 'Пример: `192.168.1.0/24` или `*`'
- id: 539
code: username
data_type: string
required: true
descr: 'Пример: `username-admin`'
sort: 10
- name: resume
id: 161
kind: instance
action: resume
params: []
- name: suspend
id: 160
kind: instance
action: suspend
params: []