2024 Год эксплуатации и обслуживания облачных сервисов Настоящий бой Документация 99 оригинальный проект Нет. 015 Глава |Docker оптимальный Настоящий бой「2024」Сериал Нет. 010 Глава
Привет,добро пожаловать вКвалифицирован в эксплуатации и обслуживании。
Контент, которым сегодня поделились, Docker оптимальный Настоящий бой「2024」 в серии документов Docker Развертывание одного узла ElasticSearch Настоящий бой。
В этой статье будет подробно описано, как использовать Docker Контейнеры и Docker Compose Развертывание одного узла ElasticSearch и настройка на основе x-pack сертификация и TLS шифрование.
Настоящий бой Служитьустройство Конфигурация (Архитектура 1:1 Реплицируйте мелкомасштабную производственную среду, конфигурация немного другая)
имя хоста | IP | ЦП (ядро) | Память (ГБ) | Системный диск (ГБ) | Диск с данными (ГБ) | использовать |
---|---|---|---|---|---|---|
docker-node-1 | 192.168.9.81 | 4 | 16 | 40 | 100 | Докер-узел 1 |
docker-node-2 | 192.168.9.82 | 4 | 16 | 40 | 100 | Докер-узел 2 |
docker-node-3 | 192.168.9.83 | 4 | 16 | 40 | 100 | Докер-узел 3 |
общий | 3 | 12 | 48 | 120 | 300 |
Настоящий бойсвязанные с окружающей средойи软件版本信息
echo "vm.max_map_count=262144" >> /etc/sysctl.conf
sysctl -w vm.max_map_count=262144
Во всех конфигурациях, включающих пароли в этой статье, используются общие пароли. PleaseChangeMe。
производственная среда,Пожалуйста, сгенерируйте парольустройствогенерировать20 человек и болеебез специальных символовСодержит только прописные и строчные буквы и цифры.Смешанный составпароль。
mkdir -p /data/containers/elasticsearch/{data,plugins,logs}
chown 1000:0 /data/containers/elasticsearch/{data,logs}
mkdir -p /data/containers/elasticsearch/config/certs
Существует два варианта реализации пользовательской конфигурации службы ElasticSearch:
В этой статье выбраны два типа Нет., премьер elasticsearch.yml
Конфигурационный файл, смонтированный в контейнер /usr/share/elasticsearch/config
Схема каталогов.
создавать Конфигурациядокумент,vi /data/containers/elasticsearch/config/elasticsearch.yml
# базовый Конфигурация
cluster.name: es-cluster
discovery.type: single-node
network.host: 0.0.0.0
http.port: 9200
# давать возможность xpack и TLS
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
# Сертификат Конфигурация
xpack.security.transport.ssl.keystore.type: PKCS12
xpack.security.transport.ssl.truststore.type: PKCS12
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12
#xpack.security.transport.ssl.keystore.password: PleaseChangeMe
#xpack.security.transport.ssl.truststore.password: PleaseChangeMe
# другой Конфигурация
# Запрещать geoip
ingest.geoip.downloader.enabled: false
# давать возможностьаудит
xpack.security.audit.enabled: true
cd /data/containers/elasticsearch
docker run -it --rm \
-v ./config/certs:/usr/share/elasticsearch/config/certs \
elasticsearch:7.17.20 \
bin/elasticsearch-certutil ca --out config/certs/elastic-stack-ca.p12 --pass "PleaseChangeMe"
проиллюстрировать:
--pass Производственную среду необходимо заменить собственным паролем.
После правильного выполнения результат вывода будет следующим:
[root@docker-node-1 elasticsearch]# docker run -it --rm \
> -v ./config/certs:/usr/share/elasticsearch/config/certs \
> elasticsearch:7.17.20 \
> bin/elasticsearch-certutil ca --out config/certs/elastic-stack-ca.p12 --pass "PleaseChangeMe"
This tool assists you in the generation of X.509 certificates and certificate
signing requests for use with SSL/TLS in the Elastic stack.
The 'ca' mode generates a new 'certificate authority'
This will create a new X.509 certificate and private key that can be used
to sign certificate when running in 'cert' mode.
Use the 'ca-dn' option if you wish to configure the 'distinguished name'
of the certificate authority
By default the 'ca' mode produces a single PKCS#12 output file which holds:
* The CA certificate
* The CA's private key
If you elect to generate PEM format certificates (the -pem option), then the output will
be a zip file containing individual files for the CA certificate and private key
[root@docker-node-1 elasticsearch]# ls config/certs/
elastic-stack-ca.p12
docker run -it --rm \
-v ./config/certs:/usr/share/elasticsearch/config/certs \
elasticsearch:7.17.20 \
bin/elasticsearch-certutil cert --silent --ca config/certs/elastic-stack-ca.p12 --out config/certs/elastic-certificates.p12 --ca-pass "PleaseChangeMe" --pass "PleaseChangeMe"
проиллюстрировать:
--ca-pass CA Пароль сертификата
--pass p12 Пароль сертификата
После правильного выполнения результат вывода будет следующим:
[root@docker-node-1 elasticsearch]# docker run -it --rm \
> -v ./config/certs:/usr/share/elasticsearch/config/certs \
> elasticsearch:7.17.20 \
> bin/elasticsearch-certutil cert --silent --ca config/certs/elastic-stack-ca.p12 --out config/certs/elastic-certificates.p12 --ca-pass "PleaseChangeMe" --pass "PleaseChangeMe"
[root@docker-node-1 elasticsearch]# ls config/certs/
elastic-certificates.p12 elastic-stack-ca.p12
chown -R 1000.0 config/certs/
По умолчанию Elasticsearch 自动генерировать用于安全设置的密钥存储库документelasticsearch.keystore
。
Целью этого файла является хранение данных, которые необходимо зашифровать. key/value Данные конфигурации. Однако по умолчанию документ просто запутан, и команда шифрования отсутствует. elasticsearch-keystore list
можно легко прочитатьдокументсодержание。Рекомендуется шифровать производственную среду.。
elasticsearch.keystore
документdocker run -it --rm \
-v ./config:/usr/share/elasticsearch/config \
elasticsearch:7.17.20 \
bin/elasticsearch-keystore create -p
После правильного выполнения результат вывода будет следующим:
[root@docker-node-1 elasticsearch]# docker run -it --rm \
> -v ./config:/usr/share/elasticsearch/config \
> elasticsearch:7.17.20 \
> bin/elasticsearch-keystore create -p
Enter new password for the elasticsearch keystore (empty for no password):
Enter same password again:
Created elasticsearch keystore in /usr/share/elasticsearch/config/elasticsearch.keystore
[root@docker-node-1 elasticsearch]# ls config/
certs elasticsearch.keystore elasticsearch.yml
Уведомление: Во время выполнения команды,Нужно нажатьнамекатьВведите пароль дважды
# keystore.secure_password
docker run -it --rm \
-v ./config:/usr/share/elasticsearch/config \
elasticsearch:7.17.20 \
bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
# truststore.secure_password
docker run -it --rm \
-v ./config:/usr/share/elasticsearch/config \
elasticsearch:7.17.20 \
bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
После правильного выполнения результат вывода будет следующим:
# Правильное выполнение без какого-либо вывода
[root@docker-node-1 elasticsearch]# docker run -it --rm \
> -v ./config:/usr/share/elasticsearch/config \
> elasticsearch:7.17.20 \
> bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
Enter password for the elasticsearch keystore :
Enter value for xpack.security.transport.ssl.keystore.secure_password:
[root@docker-node-1 elasticsearch]# docker run -it --rm \
> -v ./config:/usr/share/elasticsearch/config \
> elasticsearch:7.17.20 \
> bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
Enter password for the elasticsearch keystore :
Enter value for xpack.security.transport.ssl.truststore.secure_password:
Уведомление:
Во время выполнения команды,Пожалуйста, нажмитенамекатьВведите пароль дважды Нет.Одноразовый пароль
elasticsearch.keystore
документпароль, Нет. Вторичный пароль.secure_password
пароль
docker run -it --rm \
-v ./config/:/usr/share/elasticsearch/config \
elasticsearch:7.17.20 \
bin/elasticsearch-keystore list
После правильного выполнения результат вывода будет следующим:
[root@docker-node-1 elasticsearch]# docker run -it --rm \
> -v ./config/:/usr/share/elasticsearch/config \
> elasticsearch:7.17.20 \
> bin/elasticsearch-keystore list
Enter password for the elasticsearch keystore :
keystore.seed
xpack.security.transport.ssl.keystore.secure_password
xpack.security.transport.ssl.truststore.secure_password
Уведомление: намекать Enter password for the elasticsearch keystore : После ввода правильного пароля отображается содержимое документа, указывающее, что документ был зашифрован.
создавать Конфигурациядокумент,vi /data/containers/elasticsearch/docker-compose.yml
name: 'elasticsearch'
services:
elasticsearch:
restart: always
image: elasticsearch:7.17.20
container_name: es-single
ulimits:
nproc: 65535
memlock:
soft: -1
hard: -1
environment:
- TZ=Asia/Shanghai
- ES_JAVA_OPTS=-Xms2048m -Xmx2048m
- KEYSTORE_PASSWORD=PleaseChangeMe
volumes:
- ./data:/usr/share/elasticsearch/data
- ./plugins:/usr/share/elasticsearch/plugins
- ./logs:/usr/share/elasticsearch/logs
- ./config/certs/:/usr/share/elasticsearch/config/certs
- ./config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
- ./config/elasticsearch.keystore:/usr/share/elasticsearch/config/elasticsearch.keystore
networks:
- app-tier
ports:
- 9200:9200
- 9300:9300
networks:
app-tier:
name: app-tier
driver: bridge
#external: true
#ipam:
# config:
# - subnet: 172.22.1.0/24
проиллюстрировать:
ES_JAVA_OPTS Необходимо настроить в соответствии с фактической конфигурацией сервера. JAVA_OPTS Конфигурация
KEYSTORE_PASSWORD Должен быть зашифрован с помощью сгенерированного elasticsearch.keystore Используйте пароль последовательно, когда документ, в противном случае ES Запуск не удастся
ipam Конфигурация Понятно app-tier сетевой адрес,Эта статья аннотирует,производственная среда Рекомендуется правильное планирование Конфигурация。
external: true, Другие службы на том же сервере уже создали сеть.
app-tier
когда, создать elasticsearch Во время обслуживания будет сообщено об ошибке. Вы можете включить этот параметр.
cd /data/containers/elasticsearch
docker compose up -d
[root@docker-node-1 elasticsearch]# docker compose up -d
[+] Running 1/2
⠸ Network app-tier Created 0.4s
✔ Container es-single Started
[root@docker-node-1 elasticsearch]# docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
es-single elasticsearch:7.17.20 "/bin/tini -- /usr/l…" elasticsearch 16 seconds ago Up Less than a second 0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9300->9300/tcp
# По журналу elasticsearch Есть ли какие-либо отклонения? Результаты опущены.
docker compose logs -f
Выполните следующую команду:
docker exec -it es-single bin/elasticsearch-setup-passwords auto
После правильного выполнения результат вывода будет следующим:
[root@docker-node-1 elasticsearch]# docker exec -it es-single bin/elasticsearch-setup-passwords auto
Enter password for the elasticsearch keystore :
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user.
The passwords will be randomly generated and printed to the console.
Please confirm that you would like to continue [y/N]y
Changed password for user apm_system
PASSWORD apm_system = dFeUZ5kSgq3Gh4GNVZSJ
Changed password for user kibana_system
PASSWORD kibana_system = YUuHRRQ9NX7ZbdGj40hY
Changed password for user kibana
PASSWORD kibana = YUuHRRQ9NX7ZbdGj40hY
Changed password for user logstash_system
PASSWORD logstash_system = oCqLt1l1ZWCB9eWkKoMS
Changed password for user beats_system
PASSWORD beats_system = iMGY5hLUJBCBHPUrBm2k
Changed password for user remote_monitoring_user
PASSWORD remote_monitoring_user = 7YJ8pTA1fIiTJEGKcHIT
Changed password for user elastic
PASSWORD elastic = Uhfiv3zGRvGsNN58shT0
проиллюстрировать:
Обязательный ввод при выполнении команды
elasticsearch keystore
документпароль Пожалуйста, запишите и правильно сохраните автоматически сгенерированный пароль.
Создайте пользовательского администратора для ежедневного управления.
Выполните следующую команду:
docker exec -it es-single bin/elasticsearch-users useradd elasticadmin -p PleaseChangeMe -r superuser
Выполните следующую команду:
curl -X GET -u elasticadmin "localhost:9200/_cat/nodes?v=true&pretty"
После правильного выполнения результат вывода будет следующим:
[root@docker-node-1 elasticsearch]# curl -X GET -u elasticadmin "localhost:9200/_cat/nodes?v=true&pretty"
Enter host password for user 'elasticadmin':
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
172.20.0.2 16 45 0 0.04 0.14 0.34 cdfhilmrstw * 5e53c312d114
проиллюстрировать: Введите пользователя намекать
elasticadmin
пароль。
es-single | {"type": "server", "timestamp": "2024-05-07T10:00:22,991+08:00", "level": "ERROR", "component": "o.e.i.g.GeoIpDownloader", "cluster.name": "es-cluster", "node.name": "163ac8cb28d7", "message": "exception during geoip databases update", "cluster.uuid": "BenkNlbKQ3a7IiqU5shtOw", "node.id": "iu7VycUqTXyXbsjSGpotVw" ,
es-single | "stacktrace": ["java.net.UnknownHostException: geoip.elastic.co",
es-single | "at sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:567) ~[?:?]",
es-single | "at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) ~[?:?]",
es-single | "at java.net.Socket.connect(Socket.java:751) ~[?:?]",
es-single | "at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:304) ~[?:?]",
es-single | "at sun.net.NetworkClient.doConnect(NetworkClient.java:178) ~[?:?]",
es-single | "at sun.net.www.http.HttpClient.openServer(HttpClient.java:531) ~[?:?]",
es-single | "at sun.net.www.http.HttpClient.openServer(HttpClient.java:636) ~[?:?]",
es-single | "at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:264) ~[?:?]",
es-single | "at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:377) ~[?:?]",
es-single | "at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:193) ~[?:?]",
es-single | "at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1237) ~[?:?]",
es-single | "at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1123) ~[?:?]",
es-single | "at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:179) ~[?:?]",
es-single | "at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1675) ~[?:?]",
es-single | "at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1599) ~[?:?]",
es-single | "at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:531) ~[?:?]",
es-single | "at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:307) ~[?:?]",
es-single | "at org.elasticsearch.ingest.geoip.HttpClient.lambda$get$0(HttpClient.java:55) ~[ingest-geoip-7.17.20.jar:7.17.20]",
es-single | "at java.security.AccessController.doPrivileged(AccessController.java:571) ~[?:?]",
es-single | "at org.elasticsearch.ingest.geoip.HttpClient.doPrivileged(HttpClient.java:97) ~[ingest-geoip-7.17.20.jar:7.17.20]",
es-single | "at org.elasticsearch.ingest.geoip.HttpClient.get(HttpClient.java:49) ~[ingest-geoip-7.17.20.jar:7.17.20]",
es-single | "at org.elasticsearch.ingest.geoip.HttpClient.getBytes(HttpClient.java:40) ~[ingest-geoip-7.17.20.jar:7.17.20]",
es-single | "at org.elasticsearch.ingest.geoip.GeoIpDownloader.fetchDatabasesOverview(GeoIpDownloader.java:159) ~[ingest-geoip-7.17.20.jar:7.17.20]",
es-single | "at org.elasticsearch.ingest.geoip.GeoIpDownloader.updateDatabases(GeoIpDownloader.java:147) ~[ingest-geoip-7.17.20.jar:7.17.20]",
es-single | "at org.elasticsearch.ingest.geoip.GeoIpDownloader.runDownloader(GeoIpDownloader.java:284) [ingest-geoip-7.17.20.jar:7.17.20]",
es-single | "at org.elasticsearch.ingest.geoip.GeoIpDownloaderTaskExecutor.nodeOperation(GeoIpDownloaderTaskExecutor.java:100) [ingest-geoip-7.17.20.jar:7.17.20]",
es-single | "at org.elasticsearch.ingest.geoip.GeoIpDownloaderTaskExecutor.nodeOperation(GeoIpDownloaderTaskExecutor.java:46) [ingest-geoip-7.17.20.jar:7.17.20]",
es-single | "at org.elasticsearch.persistent.NodePersistentTasksExecutor$1.doRun(NodePersistentTasksExecutor.java:42) [elasticsearch-7.17.20.jar:7.17.20]",
es-single | "at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:777) [elasticsearch-7.17.20.jar:7.17.20]",
es-single | "at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:26) [elasticsearch-7.17.20.jar:7.17.20]",
es-single | "at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) [?:?]",
es-single | "at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) [?:?]",
es-single | "at java.lang.Thread.run(Thread.java:1583) [?:?]"] }
Не используется в автономной среде geoip функция, в elasticsearch.yml
серединадобавить вследующее Конфигурация Запрещать geoip downloader:
ingest.geoip.downloader.enabled: false
При добавлении нового пользователя-администратора ошибка следующая:
[root@1--2--3--1--2--3--0006 elasticsearch]# docker run -it --rm \
> -v ./config:/usr/share/elasticsearch/config \
> elasticsearch:7.17.20 \
> bin/elasticsearch-users useradd elastic -p elasticPWD -r superuser
ERROR: Invalid username [elastic]... Username [elastic] is reserved and may not be used.
elastic принадлежать elasticsearch Встроенные имена учетных записей не допускаются. Просто измените свое имя пользователя.
Ошибка возникает при запуске контейнера ElasticSearch.
es-single | Exception in thread "main" java.lang.IllegalStateException: Keystore passphrase required but none provided.
es-single | at org.elasticsearch.bootstrap.Bootstrap.readPassphrase(Bootstrap.java:305)
es-single | at org.elasticsearch.bootstrap.Bootstrap.loadSecureSettings(Bootstrap.java:261)
es-single | at org.elasticsearch.bootstrap.Bootstrap.loadSecureSettings(Bootstrap.java:247)
es-single | at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:364)
es-single | at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:169)
es-single | at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:160)
es-single | at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:77)
es-single | at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:112)
es-single | at org.elasticsearch.cli.Command.main(Command.java:77)
es-single | at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:125)
es-single | at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:80)
редактировать docker-compose.yml
,существовать environment Добавлен в пункт Конфигурация. KEYSTORE_PASSWORD=PleaseChangeMe
。
Вышеупомянутое — это то, чем мы поделились сегодня. В следующем выпуске мы расскажем, как использовать Docker для развертывания Kibana и подключения к кластеру ElasticSearch. Пожалуйста, продолжайте обращать внимание! ! !
Отказ от ответственности:
Получить эту статью Настоящий бой видео(пожалуйста, обрати внимание,Асинхронный выпуск документального видео,пожалуйста, сначаласосредоточиться на)
Если вам понравилась эта статья, поделитесь, добавьте в избранное, поставьте лайк и прокомментируйте! Пожалуйста, продолжайте обращать внимание @Operation&Maintenance Юшу, жди новых хороших статей!
Добро пожаловать присоединиться «Планета знаний|Навыки эксплуатации и технического обслуживания» , получи больше KubeSphere, Kubernetes, облачная эксплуатация и обслуживание, автоматизированная эксплуатация и обслуживание, искусственный интеллект Большие модели и т.п. бой Навык。В будущей карьере оператора и технического обслуживания я всегда буду сидеть в роли вашего второго пилота.。
Заявление об авторских правах