Шифрование коммуникаций в контейнере Elasticsearch Docker
За исключением использования пробной лицензии, функции безопасности Elastic Stack требуют шифрования SSL/TLS для транспортного сетевого уровня.
Этот раздел демонстрирует простой способ начать работу с SSL/TLS для HTTPS и транспорта с использованием образа Elasticsearch Docker. Пример использует Docker Compose для управления контейнерами.
Для получения более подробной информации см. Настройка безопасности и доступные подписки.
Подготовьте среду
Установите Elasticsearch с Docker.
В новой пустой директории создайте следующие четыре файла:
instances.yml:
instances:
- name: es01
dns:
- es01
- localhost
ip:
- 127.0.0.1
- name: es02
dns:
- es02
- localhost
ip:
- 127.0.0.1 | Разрешить использование встроенных имён серверов Docker DNS. |
.env:
COMPOSE_PROJECT_NAME=es CERTS_DIR=/usr/share/elasticsearch/config/certificates ELASTIC_PASSWORD=PleaseChangeMe
| Использовать префикс | |
| Путь внутри образа Docker, где ожидается нахождение сертификатов. | |
| Начальный пароль для пользователя |
create-certs.yml:
version: '2.2'
services:
create_certs:
container_name: create_certs
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.28
command: >
bash -c '
if [[ ! -f /certs/bundle.zip ]]; then
bin/elasticsearch-certutil cert --silent --pem --in config/certificates/instances.yml -out /certs/bundle.zip;
unzip /certs/bundle.zip -d /certs;
fi;
chown -R 1000:0 /certs
'
user: "0"
working_dir: /usr/share/elasticsearch
volumes: ['certs:/certs', '.:/usr/share/elasticsearch/config/certificates']
volumes: {"certs"} | Новые сертификаты узла и сертификат+ключ CA размещаются в docker объеме |
docker-compose.yml:
version: '2.2'
services:
es01:
container_name: es01
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.28
environment:
- node.name=es01
- discovery.seed_hosts=es01,es02
- cluster.initial_master_nodes=es01,es02
- ELASTIC_PASSWORD=$ELASTIC_PASSWORD
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- xpack.license.self_generated.type=trial
- xpack.security.enabled=true
- xpack.security.http.ssl.enabled=true
- xpack.security.http.ssl.key=$CERTS_DIR/es01/es01.key
- xpack.security.http.ssl.certificate_authorities=$CERTS_DIR/ca/ca.crt
- xpack.security.http.ssl.certificate=$CERTS_DIR/es01/es01.crt
- xpack.security.transport.ssl.enabled=true
- xpack.security.transport.ssl.verification_mode=certificate
- xpack.security.transport.ssl.certificate_authorities=$CERTS_DIR/ca/ca.crt
- xpack.security.transport.ssl.certificate=$CERTS_DIR/es01/es01.crt
- xpack.security.transport.ssl.key=$CERTS_DIR/es01/es01.key
volumes: ['data01:/usr/share/elasticsearch/data', 'certs:$CERTS_DIR']
ports:
- 9200:9200
healthcheck:
test: curl --cacert $CERTS_DIR/ca/ca.crt -s https://localhost:9200 >/dev/null; if [[ $$? == 52 ]]; then echo 0; else echo 1; fi
interval: 30s
timeout: 10s
retries: 5
es02:
container_name: es02
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.28
environment:
- node.name=es02
- discovery.seed_hosts=es01,es02
- cluster.initial_master_nodes=es01,es02
- ELASTIC_PASSWORD=$ELASTIC_PASSWORD
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- xpack.license.self_generated.type=trial
- xpack.security.enabled=true
- xpack.security.http.ssl.enabled=true
- xpack.security.http.ssl.key=$CERTS_DIR/es02/es02.key
- xpack.security.http.ssl.certificate_authorities=$CERTS_DIR/ca/ca.crt
- xpack.security.http.ssl.certificate=$CERTS_DIR/es02/es02.crt
- xpack.security.transport.ssl.enabled=true
- xpack.security.transport.ssl.verification_mode=certificate
- xpack.security.transport.ssl.certificate_authorities=$CERTS_DIR/ca/ca.crt
- xpack.security.transport.ssl.certificate=$CERTS_DIR/es02/es02.crt
- xpack.security.transport.ssl.key=$CERTS_DIR/es02/es02.key
volumes: ['data02:/usr/share/elasticsearch/data', 'certs:$CERTS_DIR']
wait_until_ready:
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.28
command: /usr/bin/true
depends_on: {"es01": {"condition": "service_healthy"}}
volumes: {"data01", "data02", "certs"} | Запустить начальный | |
| Автоматически сгенерировать и применить пробную подписку для активации функций безопасности. | |
| Отключить проверку подлинности для межузловой коммуникации. Разрешает создание самоподписанных сертификатов без необходимости привязки конкретных внутренних IP-адресов. |
Запустите пример
-
Сгенерируйте сертификаты (необходимо только один раз):
docker-compose -f create-certs.yml run --rm create_certs
-
Запустите два узла Elasticsearch, настроенные для SSL/TLS:
docker-compose up -d
-
Доступ к API Elasticsearch по SSL/TLS с использованием пароля первоначальной настройки:
docker run --rm -v es_certs:/certs --network=es_default docker.elastic.co/elasticsearch/elasticsearch:7.17.28 curl --cacert /certs/ca/ca.crt -u elastic:PleaseChangeMe https://es01:9200
-
Инструмент
elasticsearch-setup-passwordsтакже может использоваться для генерации случайных паролей для всех пользователей:Пользователям Windows, не использующим PowerShell, необходимо удалить
\и объединить строки в приведённом ниже фрагменте.docker exec es01 /bin/bash -c "bin/elasticsearch-setup-passwords \ auto --batch \ --url https://localhost:9200"
Удалить всё
Для удаления всех Docker ресурсов, созданных примером, используйте:
docker-compose down -v
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/configuring-tls-docker.html