Развертывание веб-интерфейса Apache Kafka®
Вы можете установить веб-интерфейс Apache Kafka®
Развернуть веб-интерфейс Apache Kafka® можно двумя способами:
- В Docker-контейнере на виртуальной машине Yandex Cloud. Этот вариант дешевле, но менее надежный, поэтому подходит для знакомства с веб-интерфейсом Apache Kafka®.
- В кластере Yandex Managed Service for Kubernetes. Этот вариант дороже, но более надежный, поэтому подходит для постоянного и длительного использования веб-интерфейса.
Развертывание в Docker-контейнере
Чтобы развернуть веб-интерфейс Apache Kafka® в Docker-контейнере:
- Установите дополнительные зависимости.
- Создайте хранилище сертификатов TrustStore.
- Подготовьте веб-интерфейс Apache Kafka®.
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
Подготовьте инфраструктуру:
-
Настройте группу безопасности для кластера Managed Service for Apache Kafka® и ВМ так, чтобы к топикам можно было подключаться с ВМ в Облаке.
-
Создайте кластер Managed Service for Apache Kafka®. При создании укажите настроенную группу безопасности.
-
Создайте пользователя Apache Kafka®.
-
В той же сети, что и кластер Managed Service for Apache Kafka®, создайте ВМ с Ubuntu 22.04, публичным IP-адресом и настроенной группой безопасности.
-
Если у вас еще нет Terraform, установите его.
-
Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
-
Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
-
Скачайте в ту же рабочую директорию файл конфигурации kafka-ui-via-docker.tf
.В этом файле описаны:
-
сеть;
-
подсеть;
-
ВМ с Ubuntu 22.04;
-
группа безопасности по умолчанию и правила, необходимые для подключения к кластеру и виртуальной машине из интернета;
-
кластер Managed Service for Apache Kafka®;
-
пользователь Apache Kafka®.
-
-
Укажите значения переменных в файле
kafka-ui-via-docker.tf
. -
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Установите дополнительные зависимости
-
ssh <имя_пользователя>@<публичный_IP-адрес_ВМ>
Где
<имя_пользователя>
— имя учетной записи пользователя ВМ. Публичный IP-адрес ВМ доступен в консоли управления , на странице ВМ. -
Чтобы проверить доступность кластера Managed Service for Apache Kafka®, подключитесь к одному из его хостов с ролью
KAFKA
:telnet <FQDN_хоста> 9091
FQDN доступен в консоли управления:
- Перейдите на страницу кластера.
- Перейдите в раздел Хосты.
- Скопируйте значение в столбце FQDN хоста, в строке хоста с ролью
KAFKA
.
Если кластер доступен, появится сообщение:
Connected to <FQDN_хоста>
После этого выполнение команды можно прервать, так как далее она не завершается, а ожидает передачи данных.
-
Установите Docker:
sudo apt update && sudo apt install docker.io
-
Установите утилиту
keytool
для управления ключами и сертификатами:sudo apt install openjdk-19-jre-headless
Создайте хранилище сертификатов TrustStore
При развертывании Apache Kafka® в Docker-контейнере команды для TrustStore выполняются на ВМ.
TrustStore — это хранилище доверенных сертификатов, которое используется в файлах JKS (Java KeyStore). Оно применяется для аутентификации клиента при его подключении к серверу. Сервер валидирует клиента с помощью сертификатов, которые хранятся в TrustStore. При этом клиент хранит приватный ключ и сертификат на своей стороне, в хранилище KeyStore.
В примере ниже TrustStore используется, чтобы подключиться к кластеру Managed Service for Apache Kafka®. Без создания TrustStore в веб-интерфейсе Apache Kafka® не появится информация о кластере.
Чтобы использовать TrustStore:
-
Создайте SSL-сертификат:
sudo mkdir -p /usr/local/share/ca-certificates/Yandex/ && \ sudo wget "https://storage.yandexcloud.net/cloud-certs/CA.pem" \ --output-document /usr/local/share/ca-certificates/Yandex/YandexCA.crt && \ sudo chmod 0655 /usr/local/share/ca-certificates/Yandex/YandexCA.crt
-
Создайте директорию
/truststore
:mkdir /truststore
В ней будет храниться файл
truststore.jks
. Отдельная директория нужна, чтобы далее путь к файлу был корректно распознан в командах и конфигурационных файлах. -
Загрузите сертификат
YandexCA.crt
в файлtruststore.jks
:sudo keytool -import \ -file /usr/local/share/ca-certificates/Yandex/YandexCA.crt \ -alias "kafka-ui-cert" \ -keystore /truststore/truststore.jks
Команда предложит создать пароль. Запомните его — он понадобится для развертывания веб-интерфейса Apache Kafka®.
Подготовьте веб-интерфейс Apache Kafka®
-
В ВМ запустите Docker-контейнер, в котором будет развернут веб-интерфейс:
sudo docker run -it -p 8080:8080 \ -e DYNAMIC_CONFIG_ENABLED=true \ -e KAFKA_CLUSTERS_0_NAME=<имя_кластера> \ -e KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=<FQDN_хоста>:9091 \ -e KAFKA_CLUSTERS_0_PROPERTIES_SECURITY_PROTOCOL=SASL_SSL \ -e KAFKA_CLUSTERS_0_PROPERTIES_SASL_MECHANISM=PLAIN \ -e KAFKA_CLUSTERS_0_PROPERTIES_CLIENT_DNS_LOOKUP=use_all_dns_ips \ -e KAFKA_CLUSTERS_0_PROPERTIES_SASL_JAAS_CONFIG='org.apache.kafka.common.security.plain.PlainLoginModule required username="<логин_пользователя>" password="<пароль_пользователя>";' \ -e KAFKA_CLUSTERS_0_PROPERTIES_SSL_TRUSTSTORE_LOCATION=/truststore/truststore.jks \ -e KAFKA_CLUSTERS_0_PROPERTIES_SSL_TRUSTSTORE_PASSWORD=<пароль_для_TrustStore> \ -v /truststore/truststore.jks:/truststore/truststore.jks \ provectuslabs/kafka-ui
Укажите в переменных окружения:
KAFKA_CLUSTERS_0_NAME
— имя кластера Managed Service for Apache Kafka®.KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS
— FQDN хоста с рольюKAFKA
в кластере Managed Service for Apache Kafka®.KAFKA_CLUSTERS_0_PROPERTIES_SASL_JAAS_CONFIG
,username
— логин пользователя Apache Kafka®.KAFKA_CLUSTERS_0_PROPERTIES_SASL_JAAS_CONFIG
,password
— пароль пользователя Apache Kafka®.KAFKA_CLUSTERS_0_PROPERTIES_SSL_TRUSTSTORE_PASSWORD
— пароль, который вы задали во время создания файлаtruststore.jks
.
После запуска команда не завершается. Пока она работает, доступен веб-интерфейс Apache Kafka®.
-
На локальной машине в браузере перейдите по адресу
http://<публичный_IP-адрес_ВМ>:8080
. Откроется веб-интерфейс Apache Kafka® с данными о кластере Managed Service for Apache Kafka®.Публичный IP-адрес ВМ доступен в консоли управления, на странице ВМ.
Развертывание в кластере Managed Service for Kubernetes
Чтобы развернуть веб-интерфейс Apache Kafka® в кластере Managed Service for Kubernetes:
- Установите дополнительные зависимости.
- Создайте хранилище сертификатов TrustStore.
- Разверните приложение с веб-интерфейсом Apache Kafka® в поде Kubernetes.
- Проверьте результат.
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
Подготовьте инфраструктуру:
-
Настройте единую группу безопасности:
- Для кластера Managed Service for Apache Kafka® так, чтобы можно было подключаться к топикам через интернет.
- Для кластера и группы узлов Managed Service for Kubernetes.
-
Создайте кластер Managed Service for Apache Kafka®. При создании укажите настроенную группу безопасности.
-
Создайте пользователя Apache Kafka®.
-
В той же сети, что и кластер Managed Service for Apache Kafka®, создайте кластер Managed Service for Kubernetes. При создании укажите настроенную группу безопасности и предоставьте кластеру публичный адрес.
-
Создайте группу узлов в кластере Managed Service for Kubernetes. При создании укажите настроенную группу безопасности.
-
Если у вас еще нет Terraform, установите его.
-
Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
-
Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
-
Скачайте в ту же рабочую директорию файл конфигурации kafka-ui-via-kubernetes.tf
.В этом файле описаны:
-
Сеть.
-
Подсеть.
-
Группа безопасности по умолчанию и правила, необходимые для подключения из интернета:
- к кластеру Managed Service for Apache Kafka®;
- к кластеру Managed Service for Kubernetes;
- к группе узлов Managed Service for Kubernetes.
-
Кластер Managed Service for Apache Kafka®.
-
Пользователь Apache Kafka®.
-
Кластер Managed Service for Kubernetes.
-
Группа узлов Managed Service for Kubernetes.
-
-
Укажите значения переменных в файле
kafka-ui-via-kubernetes.tf
. -
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Установите дополнительные зависимости
На локальной машине:
-
Установите kubectl
и настройте его на работу с созданным кластером. -
Чтобы проверить доступность кластера Managed Service for Apache Kafka®, подключитесь к одному из его хостов с ролью
KAFKA
:telnet <FQDN_хоста> 9091
FQDN доступен в консоли управления:
- Перейдите на страницу кластера.
- Перейдите в раздел Хосты.
- Скопируйте значение в столбце FQDN хоста, в строке хоста с ролью
KAFKA
.
Если кластер доступен, появится сообщение:
Connected to <FQDN_хоста>
После этого выполнение команды можно прервать, так как далее она не завершается, а ожидает передачи данных.
-
Установите утилиту
keytool
для управления ключами и сертификатами:sudo apt update && sudo apt install openjdk-19-jre-headless
Создайте хранилище сертификатов TrustStore
При развертывании Apache Kafka® в кластере Managed Service for Kubernetes команды для TrustStore выполняются на локальной машине.
TrustStore — это хранилище доверенных сертификатов, которое используется в файлах JKS (Java KeyStore). Оно применяется для аутентификации клиента при его подключении к серверу. Сервер валидирует клиента с помощью сертификатов, которые хранятся в TrustStore. При этом клиент хранит приватный ключ и сертификат на своей стороне, в хранилище KeyStore.
В примере ниже TrustStore используется, чтобы подключиться к кластеру Managed Service for Apache Kafka®. Без создания TrustStore в веб-интерфейсе Apache Kafka® не появится информация о кластере.
Чтобы использовать TrustStore:
-
Создайте SSL-сертификат:
sudo mkdir -p /usr/local/share/ca-certificates/Yandex/ && \ sudo wget "https://storage.yandexcloud.net/cloud-certs/CA.pem" \ --output-document /usr/local/share/ca-certificates/Yandex/YandexCA.crt && \ sudo chmod 0655 /usr/local/share/ca-certificates/Yandex/YandexCA.crt
-
Создайте директорию
/truststore
:mkdir /truststore
В ней будет храниться файл
truststore.jks
. Отдельная директория нужна, чтобы далее путь к файлу был корректно распознан в командах и конфигурационных файлах. -
Загрузите сертификат
YandexCA.crt
в файлtruststore.jks
:sudo keytool -import \ -file /usr/local/share/ca-certificates/Yandex/YandexCA.crt \ -alias "kafka-ui-cert" \ -keystore /truststore/truststore.jks
Команда предложит создать пароль. Запомните его — он понадобится для развертывания веб-интерфейса Apache Kafka®.
Разверните приложение с веб-интерфейсом Apache Kafka® в поде Kubernetes
-
Чтобы передать поду Kubernetes файл
truststore.jks
, создайте секрет с этим файлом:kubectl create secret generic truststore --from-file=/truststore/truststore.jks
-
Создайте файл
kafka-ui-configMap.yaml
с конфигурацией configMap . Она содержит информацию о кластере Managed Service for Apache Kafka® и хранилище TrustStore:apiVersion: v1 kind: ConfigMap metadata: name: kafka-ui-values data: KAFKA_CLUSTERS_0_NAME: <имя_кластера_Apache Kafka®> KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: <FQDN_хоста>:9091 KAFKA_CLUSTERS_0_PROPERTIES_SECURITY_PROTOCOL: SASL_SSL KAFKA_CLUSTERS_0_PROPERTIES_SASL_MECHANISM: PLAIN KAFKA_CLUSTERS_0_PROPERTIES_CLIENT_DNS_LOOKUP: use_all_dns_ips KAFKA_CLUSTERS_0_PROPERTIES_SASL_JAAS_CONFIG: 'org.apache.kafka.common.security.plain.PlainLoginModule required username="<логин_пользователя>" password="<пароль_пользователя>";' KAFKA_CLUSTERS_0_PROPERTIES_SSL_TRUSTSTORE_LOCATION: /truststore/truststore.jks KAFKA_CLUSTERS_0_PROPERTIES_SSL_TRUSTSTORE_PASSWORD: <пароль_для_TrustStore> AUTH_TYPE: "DISABLED" MANAGEMENT_HEALTH_LDAP_ENABLED: "FALSE"
Укажите в переменных окружения:
KAFKA_CLUSTERS_0_NAME
— имя кластера Managed Service for Apache Kafka®.KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS
— FQDN хоста с рольюKAFKA
в кластере Managed Service for Apache Kafka®.KAFKA_CLUSTERS_0_PROPERTIES_SASL_JAAS_CONFIG
,username
— логин пользователя Apache Kafka®.KAFKA_CLUSTERS_0_PROPERTIES_SASL_JAAS_CONFIG
,password
— пароль пользователя Apache Kafka®.KAFKA_CLUSTERS_0_PROPERTIES_SSL_TRUSTSTORE_PASSWORD
— пароль, который вы задали во время создания файлаtruststore.jks
.
-
Создайте файл
kafka-ui-pod.yaml
с конфигурацией пода, в котором будет развернуто приложение с веб-интерфейсом Apache Kafka®:apiVersion: v1 kind: Pod metadata: name: kafka-ui-pod spec: containers: - name: kafka-ui-pod image: provectuslabs/kafka-ui envFrom: - configMapRef: name: kafka-ui-values volumeMounts: - name: truststore mountPath: "/truststore" readOnly: true volumes: - name: truststore secret: secretName: truststore - name: kafka-ui-configmap configMap: name: kafka-ui-values
-
Примените конфигурацию configMap:
kubectl apply -f kafka-ui-configMap.yaml
-
Примените конфигурацию пода:
kubectl apply -f kafka-ui-pod.yaml
Проверьте результат
-
Посмотрите логи пода и убедитесь, что веб-интерфейс Apache Kafka® развернут успешно:
kubectl logs kafka-ui-pod
Результат содержит строки:
_ _ ___ __ _ _ _ __ __ _ | | | |_ _| / _|___ _ _ /_\ _ __ __ _ __| |_ ___ | |/ /__ _ / _| |_____ | |_| || | | _/ _ | '_| / _ \| '_ / _` / _| ' \/ -_) | ' </ _` | _| / / _`| \___/|___| |_| \___|_| /_/ \_| .__\__,_\__|_||_\___| |_|\_\__,_|_| |_\_\__,| |_| 2024-01-23 12:13:25,648 INFO [background-preinit] o.h.v.i.u.Version: HV000001: Hibernate Validator 8.0.0.Final 2024-01-23 12:13:25,745 INFO [main] c.p.k.u.KafkaUiApplication: Starting KafkaUiApplication using Java 17.0.6 with PID 1 (/kafka-ui-api.jar started by kafkaui in /) 2024-01-23 12:13:25,746 DEBUG [main] c.p.k.u.KafkaUiApplication: Running with Spring Boot v3.0.6, Spring v6.0.8 2024-01-23 12:13:25,747 INFO [main] c.p.k.u.KafkaUiApplication: No active profile set, falling back to 1 default profile: "default"
-
Назначьте веб-интерфейс Apache Kafka® на порт
8080
:kubectl --namespace default port-forward kafka-ui-pod 8080:8080
-
В браузере перейдите по адресу
http://127.0.0.1:8080/
. Откроется веб-интерфейс Apache Kafka® с данными о кластере Managed Service for Apache Kafka®.
Удалите созданные ресурсы
Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать:
Удалите:
- Кластер Managed Service for Apache Kafka®.
- Виртуальную машину.
- Группу узлов Managed Service for Kubernetes.
- Кластер Managed Service for Kubernetes.
-
В терминале перейдите в директорию с планом инфраструктуры.
Важно
Убедитесь, что в директории нет Terraform-манифестов с ресурсами, которые вы хотите сохранить. Terraform удаляет все ресурсы, которые были созданы с помощью манифестов в текущей директории.
-
Удалите ресурсы:
-
Выполните команду:
terraform destroy
-
Подтвердите удаление ресурсов и дождитесь завершения операции.
Все ресурсы, которые были описаны в Terraform-манифестах, будут удалены.
-