- Добавлены SSL поля в KafkaConfig структуру - Реализована SSL поддержка в KafkaOutput с TLS транспортом - Добавлена поддержка переменных окружения для SSL настроек - Обновлен config.yaml с SSL конфигурацией - Создан env.example с SSL переменными - Добавлена документация по SSL в docs/kafka_ssl.md - Обновлен README.md с ссылкой на SSL документацию Поддерживаемые SSL параметры: - ssl_enabled, ssl_keystore_location, ssl_keystore_password - ssl_key_password, ssl_truststore_location, ssl_truststore_password - ssl_client_auth, ssl_endpoint_identification_algorithm Автор: Сергей Антропов, сайт: https://devops.org.ru
7.3 KiB
7.3 KiB
Kafka SSL поддержка в SensusAgent
Автор: Сергей Антропов, сайт: https://devops.org.ru
Обзор
SensusAgent теперь поддерживает SSL/TLS подключения к Kafka для обеспечения безопасной передачи метрик. Эта функциональность позволяет использовать зашифрованные соединения между агентом и Kafka брокером.
Конфигурация SSL
1. Настройка в config.yaml
kafka:
enabled: true
brokers: ["10.99.0.90:9093"] # SSL порт
topic: "sensus.metrics"
client_id: "sensusagent"
enable_tls: false # Устаревшая настройка, используйте ssl_enabled
timeout: "5s"
# SSL настройки
ssl_enabled: true
ssl_keystore_location: "/var/ssl/private/kafka.client.keystore.jks"
ssl_keystore_password: "kafka123"
ssl_key_password: "kafka123"
ssl_truststore_location: "/var/ssl/private/kafka.client.truststore.jks"
ssl_truststore_password: "kafka123"
ssl_client_auth: "none" # none, required, requested
ssl_endpoint_identification_algorithm: "https" # https, none
2. Настройка через переменные окружения
# Основные настройки
KAFKA_BROKERS=kafka:9093
KAFKA_TOPIC=sensus.metrics
KAFKA_CLIENT_ID=sensusagent
# SSL настройки
KAFKA_SSL_ENABLED=true
KAFKA_SSL_KEYSTORE_PASSWORD=kafka123
KAFKA_SSL_KEY_PASSWORD=kafka123
KAFKA_SSL_TRUSTSTORE_PASSWORD=kafka123
KAFKA_SSL_CLIENT_AUTH=none
KAFKA_SSL_ENDPOINT_IDENTIFICATION_ALGORITHM=https
Параметры SSL конфигурации
Параметр | Описание | Возможные значения | По умолчанию |
---|---|---|---|
ssl_enabled |
Включение SSL подключения | true , false |
false |
ssl_keystore_location |
Путь к клиентскому keystore | Путь к файлу | /var/ssl/private/kafka.client.keystore.jks |
ssl_keystore_password |
Пароль keystore | Строка | kafka123 |
ssl_key_password |
Пароль приватного ключа | Строка | kafka123 |
ssl_truststore_location |
Путь к клиентскому truststore | Путь к файлу | /var/ssl/private/kafka.client.truststore.jks |
ssl_truststore_password |
Пароль truststore | Строка | kafka123 |
ssl_client_auth |
Требование аутентификации клиента | none , required , requested |
none |
ssl_endpoint_identification_algorithm |
Алгоритм идентификации endpoint | https , none |
https |
Docker конфигурация
1. В docker-compose.yml
sensus-agent:
environment:
KAFKA_SSL_ENABLED: "true"
KAFKA_SSL_KEYSTORE_PASSWORD: "kafka123"
KAFKA_SSL_KEY_PASSWORD: "kafka123"
KAFKA_SSL_TRUSTSTORE_PASSWORD: "kafka123"
KAFKA_SSL_CLIENT_AUTH: "none"
KAFKA_SSL_ENDPOINT_IDENTIFICATION_ALGORITHM: "https"
volumes:
- ./kafka-ssl:/var/ssl/private:ro
2. Структура SSL сертификатов
kafka-ssl/
├── kafka.client.keystore.jks # Клиентский keystore
├── kafka.client.truststore.jks # Клиентский truststore
├── kafka.server.keystore.jks # Серверный keystore (для брокера)
├── kafka.server.truststore.jks # Серверный truststore (для брокера)
├── ca-cert # CA сертификат
└── ca-key # CA приватный ключ
Генерация SSL сертификатов
Используйте скрипт из SensusInfra для генерации сертификатов:
cd ../SensusInfra
./kafka-ssl/generate-ssl.sh
Безопасность
Рекомендации для production:
- Измените пароли по умолчанию - никогда не используйте
kafka123
в production - Используйте сильные пароли - минимум 16 символов с различными типами символов
- Ограничьте доступ к сертификатам - установите права доступа 600
- Регулярно обновляйте сертификаты - установите напоминание о сроке действия
- Используйте
ssl_client_auth: "required"
для строгой аутентификации
Пример безопасной конфигурации:
kafka:
ssl_enabled: true
ssl_client_auth: "required"
ssl_endpoint_identification_algorithm: "https"
ssl_keystore_password: "StrongPassword123!@#"
ssl_key_password: "StrongPassword123!@#"
ssl_truststore_password: "StrongPassword123!@#"
Диагностика
Логи SSL подключения
При включенном SSL в логах будут отображаться:
INFO kafka ssl enabled endpoint_identification=https client_auth=none
INFO kafka connected brokers=[kafka:9093] topic=sensus.metrics ssl_enabled=true
Проверка подключения
# Проверка доступности SSL порта
telnet kafka 9093
# Проверка сертификатов
keytool -list -keystore kafka-ssl/kafka.client.keystore.jks -storepass kafka123
Устранение неполадок
Частые проблемы:
-
"SSL handshake failed"
- Проверьте правильность паролей
- Убедитесь, что сертификаты не истекли
- Проверьте соответствие CN в сертификате
-
"Connection refused"
- Убедитесь, что используете SSL порт (9093)
- Проверьте, что Kafka брокер настроен на SSL
-
"Certificate verification failed"
- Установите
ssl_endpoint_identification_algorithm: "none"
для тестирования - Проверьте, что truststore содержит правильный CA сертификат
- Установите
Отладка:
# Включите debug логирование
LOG_LEVEL=debug
# Проверьте конфигурацию
docker exec sensus-agent cat /bin/agent/config.yaml
Миграция с обычного подключения
- Сгенерируйте SSL сертификаты
- Обновите
config.yaml
или переменные окружения - Измените порт с 9092 на 9093
- Установите
ssl_enabled: true
- Перезапустите агент
Совместимость
- Kafka версии: 2.8+ (рекомендуется 3.0+)
- Go версия: 1.19+
- kafka-go библиотека: последняя версия
Поддержка
При возникновении проблем:
- Проверьте логи агента
- Убедитесь в правильности конфигурации
- Проверьте доступность Kafka брокера
- Обратитесь к документации Kafka SSL