项目场景:
项目场景:在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那个命令就好了
最后的效果:
版权归原作者 是秃头终会发光 所有, 如有侵权,请联系我们删除。