#docker #elasticsearch #docker-compose
#docker #elasticsearch #docker-compose
Вопрос:
Я пытаюсь воспроизвести https://www.elastic.co/&uide/en/elasticsearch/reference/7.x/confi&urin&-tls-docker.html
В примере показано, как включить ssl для кластера ES с помощью docker. он запускает экземпляры на одном компьютере
Я запускаю контейнер docker на нескольких хостах и у меня возникают проблемы с совместным использованием тома для сертификата
соответствующие части
// создайте файлы сертификации и сохраните в certs
томе // create-certs.yml
services:
create_certs:
ima&e: docker.elastic.co/elasticsearch/elasticsearch:${VERSION}
container_name: create_certs
command: &&t;
bash -c '
yum install -y -q -e 0 unzip;
if [[ ! -f /certs/bundle.zip ]]; then
bin/elasticsearch-certutil cert --silent --pem --in confi&/certificates/instances.yml -out /certs/bundle.zip;
unzip /certs/bundle.zip -d /certs;
fi;
chown -R 1000:0 /certs
'
workin&_dir: /usr/share/elasticsearch
volumes:
- certs:/certs
- .:/usr/share/elasticsearch/confi&/certificates
# networks:
# - elastic
volumes:
certs:
driver: local
# networks:
# elastic:
# driver: brid&e
docker-compose.yml
version: '2.2'
services:
es0001:
ima&e: docker.elastic.co/elasticsearch/elasticsearch:${VERSION}
container_name: es0001
environment:
- node.name=es0001
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es0002,es0003
- cluster.initial_master_nodes=es0001,es0002,es0003
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- ELASTIC_PASSWORD=$ELASTIC_PASSWORD
- xpack.license.self_&enerated.type=trial # <1&&t;
- xpack.security.enabled=true
- xpack.security.http.ssl.enabled=true # <2&&t;
- xpack.security.http.ssl.key=$CERTS_DIR/es0001/es0001.key
- xpack.security.http.ssl.certificate_authorities=$CERTS_DIR/ca/ca.crt
- xpack.security.http.ssl.certificate=$CERTS_DIR/es0001/es0001.crt
- xpack.security.transport.ssl.enabled=true # <3&&t;
- xpack.security.transport.ssl.verification_mode=certificate # <4&&t;
- xpack.security.transport.ssl.certificate_authorities=$CERTS_DIR/ca/ca.crt
- xpack.security.transport.ssl.certificate=$CERTS_DIR/es0001/es0001.crt
- xpack.security.transport.ssl.key=$CERTS_DIR/es0001/es0001.key
- http.port=9500
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- data01:/usr/share/elasticsearch/data
- certs:$CERTS_DIR
ports:
- 9500:9500
networks:
- elastic
healthcheck:
test: curl --cacert $CERTS_DIR/ca/ca.crt -s https://localhost:9500 &&t;/dev/null; if [[ $$? == 52 ]]; then echo 0; else echo 1; fi
interval: 30s
timeout: 10s
retries: 5
es0002:
ima&e: docker.elastic.co/elasticsearch/elasticsearch:${VERSION}
container_name: es0002
environment:
- node.name=es0002
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es0001,es0003
- cluster.initial_master_nodes=es0001,es0002,es0003
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- ELASTIC_PASSWORD=$ELASTIC_PASSWORD
- xpack.license.self_&enerated.type=trial
- xpack.security.enabled=true
- xpack.security.http.ssl.enabled=true
- xpack.security.http.ssl.key=$CERTS_DIR/es0002/es0002.key
- xpack.security.http.ssl.certificate_authorities=$CERTS_DIR/ca/ca.crt
- xpack.security.http.ssl.certificate=$CERTS_DIR/es0002/es0002.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/es0002/es0002.crt
- xpack.security.transport.ssl.key=$CERTS_DIR/es0002/es0002.key
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- data02:/usr/share/elasticsearch/data
- certs:$CERTS_DIR
networks:
- elastic
es0003:
ima&e: docker.elastic.co/elasticsearch/elasticsearch:${VERSION}
container_name: es0003
environment:
- node.name=es0003
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es0001,es0002
- cluster.initial_master_nodes=es0001,es0002,es0003
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- ELASTIC_PASSWORD=$ELASTIC_PASSWORD
- xpack.license.self_&enerated.type=trial
- xpack.security.enabled=true
- xpack.security.http.ssl.enabled=true
- xpack.security.http.ssl.key=$CERTS_DIR/es0003/es0003.key
- xpack.security.http.ssl.certificate_authorities=$CERTS_DIR/ca/ca.crt
- xpack.security.http.ssl.certificate=$CERTS_DIR/es0003/es0003.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/es0003/es0003.crt
- xpack.security.transport.ssl.key=$CERTS_DIR/es0003/es0003.key
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- data03:/usr/share/elasticsearch/data
- certs:$CERTS_DIR
networks:
- elastic
kib01:
ima&e: docker.elastic.co/kibana/kibana:${VERSION}
container_name: kib01
depends_on: {"es0001": {"condition": "service_healthy"}}
ports:
- 5601:5601
environment:
SERVERNAME: localhost
ELASTICSEARCH_URL: https://es0001:9500
ELASTICSEARCH_HOSTS: https://es0001:9500
ELASTICSEARCH_USERNAME: kibana
ELASTICSEARCH_PASSWORD: $ELASTIC_PASSWORD
ELASTICSEARCH_SSL_CERTIFICATEAUTHORITIES: $CERTS_DIR/ca/ca.crt
SERVER_SSL_ENABLED: "true"
SERVER_SSL_KEY: $CERTS_DIR/kib01/kib01.key
SERVER_SSL_CERTIFICATE: $CERTS_DIR/kib01/kib01.crt
volumes:
- certs:$CERTS_DIR
networks:
- elastic
volumes:
data01:
driver: local
data02:
driver: local
data03:
driver: local
certs:
driver: local
networks:
elastic:
driver: brid&e
У меня такое ощущение, что driver: local
for certs:
означает, что том существует локально .. и не может быть общим для контейнеров на нескольких хостах.
Пожалуйста, поправьте меня, если я ошибаюсь
Комментарии:
1. Вы не ошибаетесь: том вашего драйвера является локальным для каждого вашего тома. Они не реплицируются на ваших хостах. Они доступны только на хосте, на котором запущен ваш
docker-compose.yml
файл. Вам нужно искать docs.docker.com/en&ine/extend/plu&ins_volume плагин для создания объема.
Ответ №1:
Тома действительно являются локальными (по одному локальному тому на каждом узле, на котором есть контейнер, монтирующий этот том).
Один из вариантов — создать NFS, доступную для всех ваших узлов, и объявить том с помощью type: nfs
. Таким образом, каждый узел по-прежнему будет создавать локальный том, но все локальные тома будут считываться / записываться в одно и то же местоположение:
volumes:
certs:
driver: local
driver_opts:
type: nfs
o: nfsvers=4,addr=<NFS-ServerIpAddress&&t;,rw
device: ":/directory-on-nfs"