0


容器部署es和kibana,挂载数据卷并开启es安全验证

项目场景:

项目场景:在Linux系统下,使用容器单点部署安装elasticsearch和kibana,并给es设置安全验证。


安装步骤:

1.1创建网络

因为我们还需要部署kibana容器,因此要让es和kibana容器互联。这里先创建一个网络

# 创建一个网络:es-net[root@localhost]# docker network create es-net# 查看本机的网络[root@localhost]# docker network ls# 删除一个网络:es-net[root@localhost]# docker network rm es-net

1.2加载elasticsearch和kibana镜像

docker pull [OPTIONS] <仓库名>:<标签>
  • 仓库名:仓库名的格式一般为<用户名>/<软件名>。对于Docker Hub,如果不指定用户名,则默认为library,即官方镜像;
  • 标签:标签是区分镜像不同版本的一个重要参数,<仓库名>:<标签>会唯一确定一个镜像。默认为latest。
[root@localhost]# docker pull elasticsearch:7.17.4[root@localhost]# docker pull kibana:7.17.4

1.3创建es容器并挂载数据卷

1.3.1准备好要挂载到docker里面的目录和文件

[root@localhost]# mkdir -p /var/lib/docker/volumes/es-data/_data[root@localhost]# mkdir -p /var/lib/docker/volumes/es-plugins[root@localhost]# mkdir -p /var/lib/docker/volumes/es-config[root@localhost]# mkdir -p /var/lib/docker/volumes/kibana-config[root@es-config]# touch elasticsearch.yml[root@kibana-config]# touch kibana.yml

1.3.2挂载注意事项:

1.需要保证要挂载的目录有读写权限,包括要挂载的配置文件。如果没有则用chmod 777命令
2.如果要挂载配置文件,则需要提前把配置文件内容写好,不能为空,否则可能会影响es和kibana运行。
3.如果只挂载到配置文件目录,不准备配置文件,会导致创建容器后没有配置文件。报错

elasticsearch.yml文件默认内容:

cluster.name:"docker-cluster"network.host: 0.0.0.0

kibana.yml文件默认内容:

server.host:"0.0.0.0"server.shutdownTimeout:"5s"elasticsearch.hosts:["http://elasticsearch:9200"]monitoring.ui.container.elasticsearch.enabled:true

1.3.3启动容器

[root@localhost]# docker run -d \--name es7.17.4 -p 9200:9200 -p 9300:9300 \
 -e "discovery.type=single-node"-e ES_JAVA_OPTS="-Xms64m -Xmx128m" \
 -v /var/lib/docker/volumes/es-data/_data:/usr/share/elasticsearch/data \
 -v  /var/lib/docker/volumes/es-plugins:/usr/share/elasticsearch/plugins \
 -v  /var/lib/docker/volumes/es-config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
 --privileged \
 --network es-net \
  elasticsearch:7.17.4

命令解释:

  • -e “cluster.name=es-docker-cluster”:设置集群名称
  • -e “http.host=0.0.0.0”:监听的地址,可以外网访问
  • -e “ES_JAVA_OPTS=-Xms512m -Xmx512m”:内存大小
  • -e “discovery.type=single-node”:非集群模式
  • -v /var/lib/docker/volumes/es-data/_data:挂载逻辑卷,绑定es的数据目录
  • -v /var/lib/docker/volumes/es-config/elasticsearch.yml:挂载逻辑卷,绑定es的配置文件
  • -v /var/lib/docker/volumes/es-plugins:挂载逻辑卷,绑定es的插件目录
  • –privileged:授予逻辑卷访问权
  • –network es-net :加入一个名为es-net的网络中
  • -p 9200:9200:端口映射配置

1.4创建kibana容器

[root@localhost]# docker run -d \--name kibana17 \
-e ELASTICSEARCH_HOSTS=http://es7.17.4:9200 \  #es7.17.4是上面es容器的容器名--network=es-net \
-p 5601:5601  \
kibana:7.17.4

1.5开启es安全验证

# 进入到容器当中[root@localhost]# docker exec -it 容器id/名字 /bin/bash# cd到config目录下修改elasticsearch.yml

在yml文件中添加以下内容:

# 这俩是跨域配置http.cors.enabled:truehttp.cors.allow-origin:"*"# 开启X-pack设置密码http.cors.allow-headers: Authorization
xpack.security.enabled:truexpack.security.transport.ssl.enabled:true

将es容器重启:

[root@localhost]# docker restart 容器id/名字

再次进入到容器中,cd到bin目录

[root@21650b6ea0f2 elasticsearch]# cd bin/# 以交互的方式设置用户名和密码(记住自己设置的密码)[root@21650b6ea0f2 elasticsearch]# ./elasticsearch-setup-passwords interactive

如果成功会出现这样的效果:

[root@21650b6ea0f2 elasticsearch]# bin/elasticsearch-setup-passwords interactive
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user.
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue[y/N]y
Enter password for[elastic]: 
Reenter password for[elastic]: 
Enter password for[apm_system]: 
Reenter password for[apm_system]: 
Enter password for[kibana]: 
Reenter password for[kibana]: 
Enter password for[logstash_system]: 
Reenter password for[logstash_system]: 
Enter password for[beats_system]: 
Reenter password for[beats_system]: 
Enter password for[remote_monitoring_user]: 
Reenter password for[remote_monitoring_user]: 
Changed password for user [apm_system]
Changed password for user [kibana]
Changed password for user [logstash_system]
Changed password for user [beats_system]
Changed password for user [remote_monitoring_user]
Changed password for user [elastic]

如果失败,可能会出现这种结果:(反正我失败了)

Possible causes include:
 * The password for the 'elastic' user has already been changed on this cluster
 * Your elasticsearch node is running against a different keystore
 * This tool used the keystore at /usr/share/elasticsearch/config/elasticsearch.keystore

解决办法:创建一个新的临时用户,然后赋予这个用户超级管理员角色

#进入容器[root@localhost]# docker exec -it 容器名/id /bin/bash#cd到bin目录[root@467d3709b7db elasticsearch]# cd bin/# 创建用户,并赋予权限[root@467d3709b7db elasticsearch]# ./elasticsearch-users useradd tempchen -r superuser
Enter new password: 
Retype new password: 
# 退出容器

这个时候你访问9200那个连接应该会让你输入账号密码了
在这里插入图片描述
但是访问kibana的5601应该会报错:missing authentication credentials for REST request
这时需要进入kibana容器,对其配置文件进行修改(用户密码和es设置的账户密码相对应):

server.name: kibana
server.host:"0"elasticsearch.hosts:["http://192.168.89.138:9200"]elasticsearch.username:"elastic"# 主要是这行elasticsearch.password:"elastic"# 和这行server.port:5601elasticsearch.requestTimeout:90000

如果进入kibana容器没有vim命令,可以进行以下操作:

[root@localhost]# docker exec -it 容器名/id /bin/bash[root@467d3709b7db kibana]# apt-get update[root@467d3709b7db kibana]# apt-get install vim

但是只从apt-get命令可能会报没有权限错误,可以这样解决:

# 进入容器时使用这个命令[root@localhost]# docker exec -u 0 -it 容器名/id /bin/bash# 再次执行apt-get那个命令就好了

最后的效果:
在这里插入图片描述


本文转载自: https://blog.csdn.net/weixin_46030885/article/details/128784226
版权归原作者 是秃头终会发光 所有, 如有侵权,请联系我们删除。

“容器部署es和kibana,挂载数据卷并开启es安全验证”的评论:

还没有评论