docker elasticsearch集群部署认证,keystore生成与密码设置

原创 创建时间:2020-04-02 访问量:28 赞:0 踩:0

1、docker部署elasticsearch 7.5.1

docker run -dit --name elasticsearch-9200 -p 9200:9200 -p 9300:9300 -v /opt/elasticsearch/data/9200:/usr/share/elasticsearch/data -v /opt/elasticsearch/logs/9200:/usr/share/elasticsearch/logs -v /opt/elasticsearch/config/9200:/usr/share/elasticsearch/config -v /etc/timezone:/etc/timezone:ro -v /etc/localtime:/etc/localtime:ro --hostname=elasticsearch-9200 --privileged=true --privileged=true --restart=always -m 16G --oom-kill-disable=true elasticsearch

docker run -dit --name elasticsearch-9201 -p 9201:9200 -p 9301:9300 -v /opt/elasticsearch/data/9201:/usr/share/elasticsearch/data -v /opt/elasticsearch/logs/9201:/usr/share/elasticsearch/logs -v /opt/elasticsearch/config/9201:/usr/share/elasticsearch/config -v /etc/timezone:/etc/timezone:ro -v /etc/localtime:/etc/localtime:ro --hostname=elasticsearch-9201 --privileged=true --privileged=true --restart=always -m 16G --oom-kill-disable=true elasticsearch

docker run -dit --name elasticsearch-9202 -p 9202:9200 -p 9302:9300 -v /opt/elasticsearch/data/9202:/usr/share/elasticsearch/data -v /opt/elasticsearch/logs/9202:/usr/share/elasticsearch/logs -v /opt/elasticsearch/config/9202:/usr/share/elasticsearch/config -v /etc/timezone:/etc/timezone:ro -v /etc/localtime:/etc/localtime:ro --hostname=elasticsearch-9202 --privileged=true --privileged=true --restart=always -m 16G --oom-kill-disable=true elasticsearch

这里部署了三个节点,端口分别为9200(9300)、9201(9301)、9202(9302)

三个节点的配置文件目录/opt/elasticsearch/config/9200..9202并挂载到容器、三个节点的数据目录/opt/elasticsearch/data/9200..9202并挂载到容器,日志目录也一样。

注意权限:

chmod -R 777 config/ data/ logs/

如果启动出错,有些目录是容器启动后创建的,所以在启动后再执行一次chmod。

注意配置文件目录:

主机上配置文件目录中的相关文件首先准备好

drwxrwxrwx 2 root root 4096 Apr  2 19:55 certificates
-rwxrwxrwx 1 root root  341 Apr  2 19:55 elasticsearch.keystore
-rwxrwxrwx 1 root root  683 Apr  2 22:06 elasticsearch.yml
-rwxrwxrwx 1 root root 2204 Apr  1 19:27 jvm.options
-rwxrwxrwx 1 root root 7860 Apr  1 19:27 log4j2.properties
-rwxrwxrwx 1 root root  473 Apr  1 19:27 role_mapping.yml
-rwxrwxrwx 1 root root  197 Apr  1 19:27 roles.yml
-rwxrwxrwx 1 root root    0 Apr  1 19:27 users
-rwxrwxrwx 1 root root    0 Apr  1 19:27 users_roles

上面的文件是我先启动了一个容器并挂载个数据目录然后从容器中拷出来的。

这三个容器的配置文件elasticsearch.yml如下:

node.name: node-9200
node.data: true
cluster.name: "es-cluster"
cluster.initial_master_nodes: node-9200
discovery.zen.minimum_master_nodes: 1
discovery.zen.ping.unicast.hosts: ["172.26.104.170:9300", "172.26.104.170:9301", "172.26.104.170:9302"]
network.host: 0.0.0.0
--------------------------------------------
node.name: node-9201
node.data: true
cluster.name: "es-cluster"
cluster.initial_master_nodes: node-9200
discovery.zen.minimum_master_nodes: 1
discovery.zen.ping.unicast.hosts: ["172.26.104.170:9300", "172.26.104.170:9301", "172.26.104.170:9302"]
network.host: 0.0.0.0
--------------------------------------------
node.name: node-9202
node.data: true
cluster.name: "es-cluster"
cluster.initial_master_nodes: node-9200
discovery.zen.minimum_master_nodes: 1
discovery.zen.ping.unicast.hosts: ["172.26.104.170:9300", "172.26.104.170:9301", "172.26.104.170:9302"]
network.host: 0.0.0.0

注意这个时候的集群是没有认证的,可以正常组建集群,而这个cluster.initial_master_nodes: node-9200配置可以不要。如果要设置密码必须要配置这个属性,否则设置密码时会出现错误,大概的意思是无法发现集群的master节点。如果不认证集群是可以正常选举的。而开启了认证就不行。

2、为集群配置认证并设置集群的密码

在设置密码前,首先要设置集群节点之间的认证。

首先进入一个节点容器:

docker exec -it elasticsearch-9200 bash

然后执行相关命令:

# 执行这个命令生成elastic-stack-ca.p12,要输入密码和文件存放的目录,默认当前目录
bin/elasticsearch-certutil ca
# 执行这个命令同样要输入刚才的密码。
bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
然后当前目录会生成elastic-certificates.p12这个文件。

将生成的elastic-certificates.p12文件移动到config/certificates(不存在需要创建)目录下。

退出容器回到宿主机,将这个certificates复制到三个节点的config/配置目录下。

先不要重启容器。

再分别docker exec 进入三个节点容器,执行以下两个命令:

bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
# 输入密码
bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
# 输入密码

每个节点都要设置这两个密码。与之前生成certificate的密码保持一致。最好所有密码保持一致,以免搞错,如果输错一个节点的话,后续操作都不会成功。

修改三个节点的配置文件,在elasticsearch.yml中添加以下内容:

xpack.security.enabled: true
xpack.security.authc.accept_default_password: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: /usr/share/elasticsearch/config/certificates/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /usr/share/elasticsearch/config/certificates/elastic-certificates.p12

这里的/usr/share/elasticsearch/config/certificates是容器中的目录,不是宿主机的目录。

这个配置文件都添加好后,重启这三个节点容器:

docker restart elasticsearch-9200
docker restart elasticsearch-9201
docker restart elasticsearch-9202

进入其中的任一节点:

docker exec -it elasticsearch-9200 bash

执行:

bin/elasticsearch-setup-passwords interactive

输入y

然后依次输入所有用户的密码。

最后大功告成。

3、总结:

a)、这里最值的注意的是初始master节点cluster.initial_master_nodes必须设置,在一开始我部署了非认证集群,没有设置也不影响,但就是最后设置密码不成功,一直报amp_system用户不能设置。

b)、在设置密码前必须先配置集群之间的认证。


评论
 我想说:
==已经到底了==
关注: 粉丝: 积分:
工联信息网
如有问题请致邮箱:need@glxxw2018.com
不良信息反馈及建议请致邮箱:accusation@glxxw2018.com