1、创建新的 docker 网络。
docker network create elastic
2、拉取镜像
docker pull docker.elastic.co/elasticsearch/elasticsearch:8.12.2
2.1 修改镜像名称
docker tag docker.elastic.co/elasticsearch/elasticsearch:8.12.2 elasticsearch:8.12.2
docker rmi docker.elastic.co/elasticsearch/elasticsearch:8.12.2
3、配置es配置文件,文件名为 elasticsearch.yml
# 集群名称 cluster.name: pdes-es-cluster # 节点名 node.name: es01 #绑定到哪个网络接口 network.bind_host: 0.0.0.0 # 容器映射接口 http.port: 9202 # 外部连接接口 transport.port: 17001 # 安全规则 xpack.security.enrollment.enabled: true xpack.security.enabled: true xpack.security.transport.ssl.enabled: true xpack.security.transport.ssl.verification_mode: certificate xpack.security.transport.ssl.client_authentication: required # 证书配置 xpack.security.transport.ssl.keystore.path: elastic-certificates.p12 xpack.security.transport.ssl.truststore.path: elastic-certificates.p12 # 集群节点 cluster.initial_master_nodes: es01,es02,es03 # 可以连接到的其他节点的列表 discovery.seed_hosts: ["10.20.40.106:17002","10.20.40.106:17003"] # 内存锁定 #bootstrap.memory_lock: true # ingest-geoip插件可以对ip进行地理位置分析 ingest.geoip.downloader.enabled: false #允许跨源 REST 请求 http.cors.enabled: true # 跨源资源共享 http.cors.allow-origin: "*"
3.1 生成ca证书
使用已启动的elastic 来进行生成
出现提示时,接受默认文件名,即
elastic-stack-ca.p12
。此文件包含 CA 的公有证书和用于对每个节点的证书进行签名的私钥。输入 CA 的密码。如果不部署到生产环境,可以选择将密码留空。
docker exec -it elasticsearch /usr/share/elasticsearch/bin/elasticsearch-certutil ca或者下载官网压缩包里的
elasticsearch-certutil
工具进行生成
3.2 生成证书和密钥
-
输入 CA 的密码,如果未在上一步中配置密码,请按 Enter 键。
-
为证书创建密码并接受默认文件名。
输出文件是名为
elastic-certificates.p12
的密钥库。此文件包含节点证书、节点密钥和 CA 证书
docker exec -it elasticsearch /usr/share/elasticsearch/bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
3.3 在群集中的每个节点上,将 elastic-certificates.p12
文件复制到配置目录
docker cp elasticsearch:/usr/share/elasticsearch/elastic-certificates.p12 /home/pde/es-cluster/es01/config/
3.4添加以下设置以启用节点间通信并提供对节点证书的访问。
由于在群集中的每个节点上使用相同的 elastic-certificates.p12
文件,因此请将验证模式设置为 certificate
:
xpack.security.transport.ssl.enabled: true xpack.security.transport.ssl.verification_mode: certificate xpack.security.transport.ssl.client_authentication: required xpack.security.transport.ssl.keystore.path: elastic-certificates.p12 xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
4、启动容器
4.1 设置权限
chmod 777 -R 要挂载的路径
把配置和数据卷及日志等于做挂载 例: -v /home/pde/es-cluster/es01/config/elasticsearch.yml (本地机器路径):/usr/share/elasticsearch/config/elasticsearch.yml(容器内部路径)
4.1 启动 master 节点
docker run --name es01 --net elastic -v /home/pde/es-cluster/es01/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /home/pde/es-cluster/es01/data/:/usr/share/elasticsearch/data -v /home/pde/es-cluster/es01/config/elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12 -v /home/pde/es-cluster/es01/logs/:/usr/share/elasticsearch/logs -p 9202:9200 -p 17001:17001 -it -m 1GB elasticsearch:8.13.3
4.2 修改生成elastic密码
docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-reset-password -i -u elastic
4.4 设置 kibana_system
内置用户的密码。
docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-reset-password -i -u kibana_system
4.5 启动其他节点
配置相同的ca证书 相同的集群名称
5.安装kibana
kibana配置文件
# ES服务器主机地址 elasticsearch.hosts: ["http://10.20.40.106:9202"] # 服务端口 server.port: 5601 # 国际化 #i18n.locale: "zh-CN" # 访问ES服务器的账号 密码 elasticsearch.username: "kibana_system" # 密码就是上面4.4 生成的密码 elasticsearch.password: "pde888" # 服务主机名 server.name: pde_kibana server.host: "0.0.0.0" server.shutdownTimeout: "5s" monitoring.ui.container.elasticsearch.enabled: true
5.1 拉取镜像,kibana镜像要和es对应
docker pull docker.elastic.co/kibana/kibana:8.13.3
5.2 启动kibana容器
docker run --name kib01 --net elastic -p 5601:5601 docker.elastic.co/kibana/kibana:8.13.3
5.2 在安装 Kibana 的目录中,运行以下命令以创建 Kibana 密钥库并添加安全设置:
-
创建 Kibana 密钥库:
docker exec -it kib01 /usr/share/kibana/bin/bin/kibana-keystore create
-
将
kibana_system
用户的密码添加到 Kibana 密钥库:docker exec -it kib01 /usr/share/kibana/bin/kibana-keystore add elasticsearch.password
出现提示时,输入
kibana_system
用户的密码。重新启动kibana
docker stop kib01
docker start kib01
5.3 访问kibana
6 登录kibana调用api查看节点信息
get _cat/nodes
7 删除容器及网络
7.1 删除网络
docker network rm elastic
7.2 删除容器
docker rm es01 docker rm es02 docker rm kib01