之前文章中我们已经完成了Docker版本的Elasticsearch部署,为了增强安全性在此为Elasticsearch安装安全认证插件(2018年全球大规模的Elasticsearch攻击历历在目)。由于之前部署的Elasticsearch是Docker版本,本次也基于Docker版本进行说明。

为了简化操作步骤,这边将配合使用Docker Desktop(以下简称“DD”)来进行Docker操作(对应回脚本操作也是非常方便的,有空将重新整理出来)。首先打开DD的Dashbroad界面。在界面上选择对应的Elasticsearch镜像并通过CLI打开
在这里插入图片描述
并输入命令

./bin/elasticsearch-certutil ca

在这里插入图片描述
如上图所示,这里被要求输入路径和密码,路径我这里没有输入因为不知道路径是什么,密码我就输入一个,之后就会生成了一个elastic-stack-ca.p12的文件如下图:
在这里插入图片描述
之后就根据这个p12文件生成密钥
在这里插入图片描述
这里会先验证之前生成elastic-stack-ca.p12时的密钥,之后要求你输入elastic-certificates.p12生成的路径和密钥(路径就不必了反正默认是生成在当前目录下的,密钥建议就跟之前一样就可以了免得到处记密钥)。

之后就是常规操作了,将elastic-certificates.p12复制到/usr/share/elasticsearch/config/certificates/路径下。由于已经将/usr/share/elasticsearch/config/映射到宿主机,但是没有certificates文件夹,这次就将这个文件夹加上。之后通过命令

mv elastic-certificates.p12 config/certificates/

将证书移动过去。并修改证书的权限

chmod 777 config/certificates/elastic-certificates.p12 

所有工作准备就绪之后就可以修改配置文件了

vim config/elasticsearch.yml

在这里插入图片描述
根据上图给出内容进行设置,设置完成后还需要为节点设置密码
在这里插入图片描述
全部工作完成之后就可以重启Docker服务了。

PS:本以为就这样按照网上的一步一步做就可以了,但是我还是太过天真了…


故障处理

在重启服务后CLI发现大量的报错,错的都是关于xpack插件的密钥问题。

没有办法只能查看配置信息并逐个屏蔽找到问题所在,首先将xpack插件相关的配置屏蔽,只保留:

xpack.security.enabled:true

由于是单节点启动的Elasticsearch7,所以在配置中加入:

discovery.type: single-node

通过配置单节点发现,启动Elasticsearch7时会报错:

"stacktrace": ["org.elasticsearch.bootstrap.StartupException: java.lang.IllegalArgumentException: setting [cluster.initial_master_nodes] is not allowed when [discovery.type] is set to [single-node]",
"at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:163) ~[elasticsearch-7.5.2.jar:7.5.2]",
"at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:150) ~[elasticsearch-7.5.2.jar:7.5.2]",
"at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[elasticsearch-7.5.2.jar:7.5.2]",
"at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:125) ~[elasticsearch-cli-7.5.2.jar:7.5.2]",
"at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-cli-7.5.2.jar:7.5.2]",
"at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:115) ~[elasticsearch-7.5.2.jar:7.5.2]",
"at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:92) ~[elasticsearch-7.5.2.jar:7.5.2]",
"Caused by: java.lang.IllegalArgumentException: setting [cluster.initial_master_nodes] is not allowed when [discovery.type] is set to [single-node]",
"at org.elasticsearch.cluster.coordination.ClusterBootstrapService.<init>(ClusterBootstrapService.java:86) ~[elasticsearch-7.5.2.jar:7.5.2]",
"at org.elasticsearch.cluster.coordination.Coordinator.<init>(Coordinator.java:198) ~[elasticsearch-7.5.2.jar:7.5.2]",
"at org.elasticsearch.discovery.DiscoveryModule.<init>(DiscoveryModule.java:155) ~[elasticsearch-7.5.2.jar:7.5.2]",
"at org.elasticsearch.node.Node.<init>(Node.java:507) ~[elasticsearch-7.5.2.jar:7.5.2]",
"at org.elasticsearch.node.Node.<init>(Node.java:253) ~[elasticsearch-7.5.2.jar:7.5.2]",
"at org.elasticsearch.bootstrap.Bootstrap$5.<init>(Bootstrap.java:241) ~[elasticsearch-7.5.2.jar:7.5.2]",
"at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:241) ~[elasticsearch-7.5.2.jar:7.5.2]",
"at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:369) ~[elasticsearch-7.5.2.jar:7.5.2]",
"at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:159) ~[elasticsearch-7.5.2.jar:7.5.2]",
"... 6 more"] }

看到上面的报错得知由于discovery.type: single-node这个配置是单节点启动的,而原来的配置中存在cluster.initial_master_nodes: ["node-1"]这样的配置信息(这个是集群配置)。产生了冲突,所以将后者屏蔽就能够成功启动。具体配置如下:
在这里插入图片描述
接下来将之前创建的keystore工序重做一次,进入CLI控制台。执行:

./bin/elasticsearch-keystore create

将之前已创建的key文件覆盖。之后使用:

./bin/elasticsearch-setup-passwords interactive

对现有的Elasticsearch7全部用户重新设置密码(这个是风险项千万要注意)
在这里插入图片描述
之后就能够重新创建密钥文件。由于ca文件已经生成就不需要重新生成,可以重新生成认证文件:

./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
mv elastic-certificates.p12 config/certificates/

将认证文件移动到宿主机目录并重新输入创建安全连接的密码

./bin/elasticsearch-keystore add \
xpack.security.transport.ssl.keystore.secure_password

./bin/elasticsearch-keystore add \
xpack.security.transport.ssl.truststore.secure_password

之后就可以尝试将elasticsearch.yml文件中有关xpack插件配置解除后重启,最终配置文件如下:
在这里插入图片描述
在服务启动成功后打开浏览器输入http://localhost:9270,会出现提示登录弹出框,证明Elasticsearch7配置权限成功
在这里插入图片描述
还记得之前通过./bin/elasticsearch-setup-passwords interactive设置过密码吗?

里面有一个用户叫做“elastic”是一个默认用户,由于之前已经设置了他的密码,所以可以通过用户名elastic和密码进行登录,如下图:
在这里插入图片描述
至此全部设置就已经完成。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐