centos7.6下使用Docker安装Elasticsearch8.2.0 测试三

一、前言

        之前的两篇一个是使用使用 Docker 启动单节点集群,然后添加其它节点,另一个是使用官方提供的docker-compose来运行的。不过都是在一台服务器上,适合开发。所以这里又基于三台虚拟机重新搭建了一次。

        Elasticsearch有两个级别的通信,传输协议http协议。传输协议用于Elasticsearch节点之间的内部通信,http 协议用于从客户端到 Elasticsearch 集群的通信。

        这里最麻烦的就是配置安全证书。

        我这里是按照如下顺序进行配置的

        (1)准备三台虚拟机,ip分别为192.168.137.2/3/4,规划文件夹

        (2)先分别再三台虚拟机上关闭安全模式启动节点,形成集群(详细配置见下面)。

        (3)在第一个节点上创建传输 TLS/SSL 加密证书

        (4)在第一个节点上创建Http TLS/SSL 加密证书

        (5)从p12生成crt,并备份证书,并将证书上传到第2、3个节点的服务器上。

        (6)停止三个节点,修改配置文件,重新依次启动节点。

        (7)运行kibana,连接到elasticsearch。

二、规划文件夹

        我这里再每台服务器的home文件夹下都建了es文件夹。

        然后再每个es文件夹下都新建了config、data、plugins三个文件夹,并且都使用chmod给了777权限。

        然后再config文件夹下创建elasticsearch.yml文件。

三、关闭安全模式启动节点

1、配置如下

        三台服务器上的config文件夹下的elasticsearch.yml文件,分别输入以下内容,注意修改node.name和network.publish_host。

        为了省事这个配置强行指定了主节点为es-node1。

cluster.name: elasticsearch-cluster
node.name: es-node1
network.bind_host: 0.0.0.0
network.publish_host: 192.168.137.2
http.port: 9200
transport.port: 9300
node.roles: [ data, master ]

# 自动发现集群节点ip
discovery.seed_hosts:
  - 192.168.137.2
  - 192.168.137.3
  - 192.168.137.4
# 初始主节点
cluster.initial_master_nodes:
  - es-node1

http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization

# 这条配置表示开启xpack认证机制
xpack.security.enabled: false
xpack.security.transport.ssl.enabled: false
xpack.security.http.ssl.enabled: false

#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
#xpack.security.enrollment.enabled: true
#xpack.security.http.ssl.keystore.path: http.p12

2、运行节点

        依次再三个服务器上运行三个节点

docker run -d --name es01 -p 9200:9200 -p 9300:9300 -v /home/es/data:/usr/share/elasticsearch/data -v /home/es/plugins:/usr/share/elasticsearch/plugins -v /home/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -e ES_JAVA_OPTS="-Xms512m -Xmx512m" elasticsearch:8.2.0
docker run -d --name es02 -p 9200:9200 -p 9300:9300 -v /home/es/data:/usr/share/elasticsearch/data -v /home/es/plugins:/usr/share/elasticsearch/plugins -v /home/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -e ES_JAVA_OPTS="-Xms512m -Xmx512m" elasticsearch:8.2.0
docker run -d --name es03 -p 9200:9200 -p 9300:9300 -v /home/es/data:/usr/share/elasticsearch/data -v /home/es/plugins:/usr/share/elasticsearch/plugins -v /home/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -e ES_JAVA_OPTS="-Xms512m -Xmx512m" elasticsearch:8.2.0

3、查看集群状态

        使用下面的命令查看是否形成集群,因为没有开启安全模式,其中elastic后面的密码可以不输入也可以随便输入(不输入的时候也会问,随便输入或者直接回车就行)。

        按理虚拟机网络没问题,就会自动形成集群,如下输出,带*的是主节点,在这个步骤上我没遇到什么问题,集群自动就ok了。

[root@localhost ~]# curl -XGET http://192.168.137.2:9200/_cat/nodes?pretty -u elastic:D2COowsKaGDv6--SJZeQ
192.168.137.2 24 24  4 0.05 0.13 0.08 dm * es-node1
192.168.137.4 38 49 22 0.68 0.22 0.09 dm - es-node3
192.168.137.3 57 49  7 0.13 0.13 0.08 dm - es-node2

四、创建传输 TLS/SSL 加密证书

        首先执行如下命令进入第一个虚拟机的es01节点

docker exec -it es01 /bin/bash

        然后依次执行下面的命令,注意记住密码,一个是ca的密码,一个是证书的密码。

bin/elasticsearch-certutil ca
# 执行命令后会有两次输入,第一次为CA文件名,第二次为密码(密码1)
# 建议依次输入回车(文件使用默认名,不设置密码)
# 执行完会在ES根目录生成 elastic-stack-ca.p12 文件(默认文件名)


bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
# 执行命令后会有三次输入
# 第一次输入为CA密码(密码1)
# 第二次输入为证书文件名,建议直接回车(使用默认文件名)
# 第三次输入为证书密码(密码2)
# 执行完会在ES目录生成 elastic-certificates.p12 文件(默认文件名)


bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password 
bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
# 如果没有创建 keystore 文件,会提示是否创建,输入y即可(文件默认创建在elasticsearch.yml 同级目录下)
# 然后输入证书密码(密码2)
# 经测试证书密码(密码2)为空的时候,可以省略这一步


mv elastic-certificates.p12 config/
mv elastic-stack-ca.p12 config/

五、创建Http TLS/SSL 加密证书

        这一步是最麻烦的,查看官方说法可以见下面地址的官方文档

Set up basic security for the Elastic Stack plus secured HTTPS traffic | Elasticsearch Guide [8.2] | Elastichttps://www.elastic.co/guide/en/elasticsearch/reference/current/security-basic-setup-https.html

         1、首先还是执行如下命令进入第一个虚拟机的node节点

docker exec -it es01 /bin/bash

        2、然后执行下面的命令

bin/elasticsearch-certutil http

        3、会问我们When asked if you want to generate a CSR,请输入n

        4、然后会问When asked if you want to use an existing CA,请输入y

        5、然后会问Enter the path to your CA. This is the absolute path to the elastic-stack-ca.p12 file that you generated for your cluster,请输入elastic-stack-ca.p12,因为我们上面已经生成了

        6、然后会问Enter an expiration value for your certificate. You can enter the validity period in years, months, or days. For example, enter 90D for 90 days,请输入99y

        7、然后会问When asked if you want to generate one certificate per node,请输入n

        8、然后会问Enter all hostnames used to connect to your first node. These hostnames will be added as DNS names in the Subject Alternative Name (SAN) field in your certificate.

         然后我们就输入我们的节点名称,每行一个(回车换行),都输入完之后,再次回车,然后会问我们是否正确,确认一下,如果错了就输入n,再次重新输入。

         9、然后会问Enter all the IP addresses that you need, one per line.
When you are done, press <ENTER> once more to move on to the next step.

        我们就一次输入我们节点的ip,每行一个(回车换行),都输入完之后,再次回车,然后会问我们是否正确,确认一下,如果错了就输入n,再次重新输入。

         10、Do you wish to change any of these options? [y/N];检查一下如果没有输入错误就输入y继续,有错误的就输入n重来。

        11、然后会问我们要不要给证书设置密码,建议设置,会让我们输入两次确认

         12、然后会问What filename should be used for the output zip file? [/usr/share/elasticsearch/elasticsearch-ssl-http.zip] ,回车即可。

        然后我们就得到了一个elasticsearch-ssl-http.zip压缩包。

        13、如果上面我们设置了密码,我们就执行如下命令存储密码。

bin/elasticsearch-keystore add xpack.security.http.ssl.keystore.secure_password

六、整理并备份证书

1、下载证书

        这里下载证书的目的是为了向其它两个节点倒腾,我这里用的WinSCP软件进行的上传下载。

        对应虚拟机的目录,基本上是这样的目录,中间一串数字是docer运行es的时候生成的那串数字,找到这个目录。

/var/lib/docker/overlay2/4345f268f2581f9b6cfd64aeb014680870e9285c6f67aab973720d0235482785/merged/usr/share/elasticsearch

        然后再/usr/share/elasticsearch/目录,会看到elasticsearch-ssl-http.zip压缩包,然后我们再/usr/share/elasticsearch/config目录,可以看到如下两个证书。

         我们将压缩包和几个证书下载下来,我这里是放到我的电脑上了。

2、使用openssl命令导出.crt

        http.p12在压缩包内,我们要使用使用openssl命令导出http.p12对应的crt证书。

        为什么要导出这个证书,用于开启安全模式的时候,进行api查询等需要这个证书,我试过直接用p12的证书,不好用,用导出的crt证书是ok的。

        只执行下面的第一句就可以,得到http.crt文件。

使用openssl命令导出.crt
openssl pkcs12 -in http.p12 -nokeys -out http.crt

使用openssl命令导出.key
openssl pkcs12 -in keystore.p12 -nocerts -nodes -out my_store.key

使用openssl命令导出.csr
openssl pkcs12 -in keystore.p12 -nokeys -out my_key_store.csr

3、捣腾证书到其它节点

        1、将http.p12、http.crt、elasticsearch-ca.pem(elasticsearch-ca.pem也在压缩包里)上传到es01节点的容器的/usr/share/elasticsearch/config目录下。

        2、将http.p12、http.crt、elasticsearch-ca.pem、elastic-certificates.p12、elastic-stack-ca.p12等文件分别上传到es02、es03节点的容器的/usr/share/elasticsearch/config目录下。(实际上elastic-stack-ca.p12用不到)。

        3、最后每个节点下面都有如下几个文件

         4、进行密码存储在keystore,可以有如下两种方式

        (1)依次在es02、es03进入容器执行下面的命令,注意证书密码不要输入错误。

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

        (2)可以将节点es01的elasticsearch.keystore文件分别替换了es02、es03的对应文件(这是从别人的博客里看到的,我没试过,我用的第一个方法)。

七、停止节点/修改配置/启动节点

        1、使用docker stop 容器id命令停止三个节点。

        2、然后修改配置,开启认证

cluster.name: elasticsearch-cluster
node.name: es-node1
network.bind_host: 0.0.0.0
network.publish_host: 192.168.137.2
http.port: 9200
transport.port: 9300
node.roles: [ data, master ]

# 自动发现集群节点ip
discovery.seed_hosts:
  - 192.168.137.2
  - 192.168.137.3
  - 192.168.137.4
# 初始主节点
cluster.initial_master_nodes:
  - es-node1

http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization

# 这条配置表示开启xpack认证机制
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.http.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
xpack.security.enrollment.enabled: true
xpack.security.http.ssl.keystore.path: http.p12

        3、使用docker stop 容器id依次启动三个节点,如果证书位置、密码什么的不对,节点可能起不来,可以查看docker的日志看什么原因。

        4、如果都运行ok,可以使用如下命令查看集群状态。

        其中cacert对应的证书,就是之前我们使用openssl生成的crt证书,其中elastic需要密码。

curl -XGET --cacert /var/lib/docker/overlay2/4345f268f2581f9b6cfd64aeb014680870e9285c6f67aab973720d0235482785/merged/usr/share/elasticsearch/config/http.crt https://192.168.137.2:9200/_cat/nodes?pretty -u elastic:_olbbQdlXXPDu3+FsUp8

        elastic对应的密码需要使用下面命令获得。

docker exec -it es01 /bin/bash
bin/elasticsearch-reset-password -u elastic

        如果运行正常,会看到集群已经形成,主节点未必是es-node1了。

[root@localhost config]# curl -XGET --cacert /var/lib/docker/overlay2/4345f268f2581f9b6cfd64aeb014680870e9285c6f67aab973720d0235482785/merged/usr/share/elasticsearch/config/http.crt https://192.168.137.2:9200/_cat/nodes?pretty -u elastic:_olbbQdlXXPDu3+FsUp8
192.168.137.2 65 34 3 0.00 0.02 0.06 dm - es-node1
192.168.137.4 36 50 0 0.00 0.01 0.05 dm - es-node3
192.168.137.3 58 52 2 0.00 0.01 0.05 dm * es-node2

八、运行kibana

        1、我们这里就不用生成token的方式来配置kibana

        2、使用下面命令获得kibana_system的密码

        进入节点1,依次输入如下的命令进行kibana_system密码的获取

docker exec -it es01 /bin/bash
bin/elasticsearch-reset-password -u kibana_system

        3、启动kibana

docker run -d --name kibana -v /home/es/kibana_conf/kibana.yml:/usr/share/kibana/config/kibana.yml -p 5601:5601 kibana:8.2.0

        上面命令行中的配置文件我就放了两行内容,记得要给这个配置文件777权限

server.host: "0.0.0.0"
server.port: 5601

        4、浏览器访问http://192.168.137.2:5601/这个地址 

        5、我们使用Configure manually方式

        6、输入http://192.168.137.2:9200/

        7、会问我们要验证码

         使用以下命令获得验证码

# 进入kibana容器中
docker exec -it kibana /bin/bash
# 执行生成验证码命令
bin/kibana-verification-code 
# 获得的验证码输入之前页面中
Your verification code is:  232 911

        8、然后输入kibana_system对应的密码。

        9、然后跳转界面再次输入elastic和对应的密码。

        最后我们可以看到运行的节点数量。

猜你喜欢

转载自blog.csdn.net/bashendixie5/article/details/124749575
今日推荐