在Centos上使用Docker快速搭建ES集群-添加安全验证(二)

基于第一步在Centos上使用Docker快速搭建ES集群-创建ES节点(一)创建好一个ES集群后,并没有安全验证的,这样的服务如果暴露在公网上,ES上的数据是很不安全的,好在ES 6.8之后已经内置了安全验证模块,下面就把他用起来。

首先,查看当前Master节点:192.168.0.1:9200/_cat/master
image
如图,表示jjwes02为当前集群的主节点

连接到主节点执行以下命令:

配置文件中开启xpack验证
echo "" >> /data/VDocker/ES/[p#1 节点名].yml
echo "#添加密码验证" >> /data/VDocker/ES/[p#1 节点名].yml
echo xpack.security.enabled: true >> /data/VDocker/ES/[p#1 节点名].yml
echo xpack.security.transport.ssl.enabled: true >> /data/VDocker/ES/[p#1 节点名].yml
docker restart [p#1 节点名]

待ES服务启动完为ES账户设置密码:
docker exec -it [p#1 节点名] elasticsearch-setup-passwords auto
执行完毕后会随机生成内置账户的密码,复制下来保存好,后面连接ES服务需要用到。
或使用interactive参数自定义密码(需要分别输入6个内置账户的密码)
docker exec -it [p#1 节点名] elasticsearch-setup-passwords interactive

完成以上步骤,这时候再重启主节点,并从浏览器进入9200端口就会让你输入账号密码了,如果是单节点到这一步已经达到目的了。
但是集群状态下,到这里只是主节点开启了安全验证,其它节点会因为无法与主节点通信,无法正常组成集群服务。

下面开始解决这个问题

主节点生成ca证书
docker exec -it [p#1 节点名] /bin/bash

elasticsearch-certutil ca --pass [p#2 密码] --out elastic-stack-ca.p12&& elasticsearch-certutil cert --ca elastic-stack-ca.p12 --pass [p#2 密码] --out config/elastic-certificates.p12 --ca-pass [p#2 密码] && elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password && elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password && chmod -R  777 config/elasticsearch.keystore && chmod -R 777 config/elastic-certificates.p12 && exit

执行以上脚本,进入es容器内部,生成elastic-stack-ca.p12文件和 elastic-certificates.p12文件,然后给这两个文件设置777权限(ES是通过elasticsearch用户启动的,不给权限启动服务后会出现异常,这里坑了我好久。。)

证书生成完毕后,给ES配置文件添加配置项:

ES配置文件添加ssl证书相关配置项
echo "" >> /data/VDocker/ES/[p#1 节点名].yml
echo xpack.security.transport.ssl.verification_mode: certificate >> /data/VDocker/ES/[p#1 节点名].yml
echo xpack.security.transport.ssl.keystore.path: elastic-certificates.p12 >> /data/VDocker/ES/[p#1 节点名].yml
echo xpack.security.transport.ssl.truststore.path: elastic-certificates.p12 >> /data/VDocker/ES/[p#1 节点名].yml

docker restart [p#1 节点名]

到这里,主节点就全部搞定了。
但是,ES的各个子节点还需要把证书拷贝过去。
这里使用 docker cp先将证书和密钥库从ES容器内部拷贝到宿主机

拷贝证书文件到宿主机
mkdir -p /data/VDocker/ES/[p#1 节点名] && docker cp [p#1 节点名]:/usr/share/elasticsearch/config/elastic-certificates.p12 /data/VDocker/ES/[p#1 节点名]/elastic-certificates.p12 && docker cp [p#1 节点名]:/usr/share/elasticsearch/config/elasticsearch.keystore /data/VDocker/ES/[p#1 节点名]/elasticsearch.keystore
执行以上命令,把容器内的相关文件拷贝到宿主机的/data/VDocker/ES/[p#1 节点名]的目录下 如图:

image

然后切换到子节点将主节点的证书文件拷贝到子节点的容器内


后续操作在子节点的机器上执行


使用scp从主节点拷贝证书文件到子节点后,并复制到ES子节点的容器内
scp -r root@[p#1 主服务器IP]:/data/VDocker/ES/[p#2 主节点名] /data/VDocker/ES && docker cp /data/VDocker/ES/[p#2 主节点名]/elastic-certificates.p12 [p#3 当前节点名]:/usr/share/elasticsearch/config/elastic-certificates.p12 && docker cp /data/VDocker/ES/[p#2 主节点名]/elasticsearch.keystore [p#3 当前节点名]:/usr/share/elasticsearch/config/elasticsearch.keystore&&docker exec -it [p#3 当前节点名] chmod -R 777 /usr/share/elasticsearch/config/elastic-certificates.p12 && docker exec -it [p#3 当前节点名] chmod -R 777 /usr/share/elasticsearch/config/elasticsearch.keystore

使用SCP跨服务器拷贝文件会提示需要输入主节点的登录密码,执行完毕以后,切到 /data/VDocker/ES/[p#2 主节点名] 目录下,查看是否跨服务器拷贝成功,然后看一下文件是否复制到容器内
image
有这两个文件,并且权限是777则表示没问题。

最后,修改子节点的配置文件,添加安全验证相关配置

子节点添加安全验证配置项
echo "" >> /data/VDocker/ES/[p#1 节点名].yml
echo "#添加密码验证" >> /data/VDocker/ES/[p#1 节点名].yml
echo xpack.security.enabled: true >> /data/VDocker/ES/[p#1 节点名].yml
echo xpack.security.transport.ssl.enabled: true >> /data/VDocker/ES/[p#1 节点名].yml
echo xpack.security.transport.ssl.verification_mode: certificate >> /data/VDocker/ES/[p#1 节点名].yml
echo xpack.security.transport.ssl.keystore.path: elastic-certificates.p12 >> /data/VDocker/ES/[p#1 节点名].yml
echo xpack.security.transport.ssl.truststore.path: elastic-certificates.p12 >> /data/VDocker/ES/[p#1 节点名].yml

docker restart [p#1 节点名]

执行完毕,集群之间进行通信就会使用主节点生成的证书文件了,
浏览器进入子节点的9200端口,输入刚才在主节点生成的密码进行登录,登录成功表示集群安全验证配置成功!
image
浏览器输入 192.168.1.1:9200/_cat/nodes 查看集群节点
image

posted @   Lancc  阅读(554)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示