docker方式部署带用户权限管理的elasticsearch集群和kibana

docker方式部署带用户权限管理的elasticsearch集群和kibana

一、环境及软件版本
docker方式部署带用户权限管理的elasticsearch集群和kibana_第1张图片
二、破解elasticsearch
请参阅我的另外一篇博文《破解elasticsearch(制作破解版docker镜像)》:https://blog.csdn.net/guan0005/article/details/87173430

三、部署elasticsearch集群
1、修改vm.max_map_count的值
使用docker运行elasticsearch,要求宿主机系统的m.max_map_count的值不小于262144,否则elasticsearch镜像无法运行。
编辑“/etc/sysctl.conf”文件,在其中增加一行:

vm.max_map_count=262144

保存后,执行“sysctl -p”让配置生效。

2、运行镜像
这里用的是制作好的破解版镜像。
运行镜像:

docker run -d -p 9200:9200 -p 9300:9300 --name=elasticsearch-cracked-6.5.4 \
-e cluster.name="es-docker-cluster"  \
-e node.name=192.168.241.11 \
-e network.host=0.0.0.0 \
-e network.publish_host=192.168.241.11 \
-e discovery.zen.ping.unicast.hosts="192.168.241.11:9300","192.168.241.12:9300","192.168.241.13:9300" \
-e discovery.zen.minimum_master_nodes=1 \
-e xpack.security.enabled=true \
-e xpack.security.transport.ssl.enabled=true \
-e xpack.security.transport.ssl.verification_mode=certificate \
-e xpack.security.transport.ssl.keystore.path=/usr/share/elasticsearch/config/certs/elastic-certificates.p12 \
-e xpack.security.transport.ssl.truststore.path=/usr/share/elasticsearch/config/certs/elastic-certificates.p12 \
-e xpack.security.authc.accept_default_password=true \
elasticsearch-cracked:6.5.4

说明:“-e”参数为设置环境变量。以docker方式部署,推荐使用环境变量代替配置文件。需要注意的地方,一是IP地址,注意各节点的IP地址不要配错;二是“discovery.zen.ping.unicast.hosts”配置项的值,这个值在配置文件中需要加个中括号,写为discovery.zen.ping.unicast.hosts: [“192.168.241.11:9300”,“192.168.241.12:9300”,“192.168.241.13:9300”],环境变量中不能加,这点写法上的区别,让我在部署时试了好久。elasticsearch各配置项的详细说明,请参阅官网:https://www.elastic.co/guide/en/elasticsearch/reference/current/important-settings.html,https://www.elastic.co/guide/en/elasticsearch/reference/6.6/security-settings.html

4、删除data目录,重启容器
因为制作镜像的时候,elasticsearch的数据存储目录/usr/share/elasticsearch/data下有数据,而我们现在部署集群时用的同一个镜像,所以run出来的容器中的数据存储目录中有相同的数据,这回导致后面运行的节点无法加入集群,使用docker logs命令查看容器日志,可以看到后面启动的容器不停输出类似如下的报错:
docker方式部署带用户权限管理的elasticsearch集群和kibana_第2张图片
针对此问题,我们只需要将后部署的节点中的数据存储目录清空,再重启容器,就好了。
进入容器

docker exec -it elasticsearch-cracked-6.5.4 /bin/bash

删除数据存储目录下的内容(以下命令在容器中执行)

rm -rf /usr/share/elasticsearch/data/*

退出容器,重启容器

docker restart elasticsearch-cracked-6.5.4

说明:因为授权数据存储在elasticsearch的数据存储目录,如果删除后启动的节点,那他们会不会变回basic版。答案是不会,因为集群中只要有一台是platinum版,那么这个集群就是platinum版的,新加入集群的节点也是platinum版。同理,对集群中任意一个节点的操作,都会在集群所有节点中生效。例如,新部署一个没有platinum授权的集群,此时如果对集群中任意一个节点进行platinum授权,这个集群就都是platinum版的了。
重启完容器后,之前的报错就没有了,察看集群状态,可以发现集群正常。查看方法,在浏览器地址栏中输入如下地址:http://192.168.241.11:9200/_cat/nodes?pretty,地址中的IP和端口为集群中任意一个节点的服务IP和端口。这时,会提示输入用户名和密码,因为我们启用了安全认证:
docker方式部署带用户权限管理的elasticsearch集群和kibana_第3张图片
根据官网和百度的说法,在之前的步骤中,我们将“xpack.security.authc.accept_default_password”的值设置为true,表示启用默认密码,可以使用默认用户名“elastic”和默认密码“changeme”来登录使用,但实践证明,这个密码是无效的,至于原因,我也不知道。所以,我们只好手工重置密码。

5、设置内置账号的密码
进入集群中任意一个节点

docker exec -it elasticsearch-cracked-6.5.4 /bin/bash

在容器中执行以下命令,然后根据提示设置各账号的密码,建议密码不要设置纯数字,因为如果是纯数字,后续启动kibana的时候,有可能会报错,说密码必须为字符串,加了引号也没用:

/usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive

设置好密码后,再在浏览器中查看集群状态,使用“elastic”用户,输入正确的密码,可以看到集群状态:
docker方式部署带用户权限管理的elasticsearch集群和kibana_第4张图片

三、部署kibana
步骤与elasticsearch的部署差不多,这里就只简要叙述一下步骤;kibana只需要部署一台服务器即可。
1、从互联网拉取kibana镜像

docker pull kibana:6.5.4

2、运行kibana镜像

docker run -d -p 5601:5601 --name=kibana-6.5.4 \
-e ELASTICSEARCH_URL=http://192.168.241.12 \
-e ELASTICSEARCH_USERNAME=kibana \
-e ELASTICSEARCH_PASSWORD="password" \
kibana:6.5.4

说明:kibana的启动很简单,我们只需要配置三个配置项即可。“ELASTICSEARCH_URL”为集群地址,这里配置集群中任意一个节点的服务地址就好;根据官网的说法,从6.6.0开始,这个配置项替换为“ELASTICSEARCH_HOSTS”。“ELASTICSEARCH_USERNAME”为kibana登录elasticsearch的使用的用户,使用elasticsearch为kibana设置的内置用户“kibana”就好。“ELASTICSEARCH_PASSWORD”为“kibana”的密码;这里注意,如果密码为纯数字,这种启动方式会报错,提示密码必须为字符串,但如果把配置写到配置文件,使用“–env-file”,就没有问题,所以建议密码不要设置纯数字。更多配置信息,请参阅官网:https://www.elastic.co/guide/en/kibana/current/settings.html。

kibana启动完成后,即可通过浏览器访问。使用“elastic”用户登录,可以通过kibana监控、管理、配置elasticsearch集群。
docker方式部署带用户权限管理的elasticsearch集群和kibana_第5张图片

你可能感兴趣的:(ELK)