文章转载自:https://elasticstack.blog.csdn.net/article/details/105710973

创建docker-compose.yml

在之前的教程中,那里使用的docker-compose.yml文件没有配置安全。我们需要重新修改:

docker-compose.yml

version: '3.0'
services:
es01:
image: docker.elastic.co/elasticsearch/elasticsearch:${ELASTIC_STACK_VERSION}
container_name: es01
environment:
- node.name=es01
- discovery.seed_hosts=es02
- cluster.initial_master_nodes=es01,es02
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- xpack.security.enabled=true
- xpack.security.transport.ssl.enabled=true
- xpack.security.transport.ssl.keystore.type=PKCS12
- xpack.security.transport.ssl.verification_mode=certificate
- xpack.security.transport.ssl.keystore.path=elastic-stack-ca.p12
- xpack.security.transport.ssl.truststore.path=elastic-stack-ca.p12
- xpack.security.transport.ssl.truststore.type=PKCS12
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- ./elastic-stack-ca.p12:/usr/share/elasticsearch/config/elastic-stack-ca.p12
- esdata01:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- esnet
es02:
image: docker.elastic.co/elasticsearch/elasticsearch:${ELASTIC_STACK_VERSION}
container_name: es02
environment:
- node.name=es02
- xpack.security.enabled=true
- discovery.seed_hosts=es01
- cluster.initial_master_nodes=es01,es02
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata02:/usr/share/elasticsearch/data
networks:
- esnet kibana:
image: docker.elastic.co/kibana/kibana:${ELASTIC_STACK_VERSION}
container_name: kibana
ports: ['5601:5601']
networks: ['esnet']
environment:
- SERVER_NAME=kibana.localhost
- ELASTICSEARCH_HOSTS=http://es01:9200
- I18N_LOCALE=zh-CN
- ELASTICSEARCH_USERNAME=elastic
- ELASTICSEARCH_PASSWORD="123456"
depends_on: ['es01'] volumes:
esdata01:
driver: local
esdata02:
driver: local networks:
esnet:

为了能使得我们的docker-compose.yml适用更多的版本,我在上面添加一个ELASTIC_STACK_VERSION变量。我们需要在docker-compose.yml文件所处的文件目录下创建一个文件.env,并且它的内容是:

ELASTIC_STACK_VERSION=7.6.2

我们可以根据自己所需要的版本进行选择。另外一个重要的变化是在es01中,我加入了如下的部分:

      - xpack.security.enabled=true
- xpack.security.transport.ssl.enabled=true
- xpack.security.transport.ssl.keystore.type=PKCS12
- xpack.security.transport.ssl.verification_mode=certificate
- xpack.security.transport.ssl.keystore.path=elastic-stack-ca.p12
- xpack.security.transport.ssl.truststore.path=elastic-stack-ca.p12
- xpack.security.transport.ssl.truststore.type=PKCS12

按照Elasticsearch的要求,如果我们在docker的环境中启动xpack.security.enabled,我们必须也启动xpack.security.transport.ssl.enabled。否则,我们将会看到如下的错误信息:

[1]: Transport SSL must be enabled if security is enabled on a [basic] license. Please set [xpack.security.transport.ssl.enabled] to [true] or disable security by setting [xpack.security.enabled] to [false]

因为需要有证书的原因,我同时也添加了如下的部分:

    volumes:
- ./elastic-stack-ca.p12:/usr/share/elasticsearch/config/elastic-stack-ca.p12

在上面,我们把docker-compose.yml文件所在目录下的文件elastic-stack-ca.p12挂载到docker所在的目录中去。这个证书,我们将在如下的部分生成。

针对Kibana的部分,我修改了如下的部分:

      - ELASTICSEARCH_USERNAME=elastic
- ELASTICSEARCH_PASSWORD="123456"

在这里,我们使用了一个账号叫做elastic/123456。这个账号需要我们在如下的步骤中来生成。

创建证书

就是上面所显示的那样,我们需要为TLS生成一个证书来进行配置。那么我们该如何生产这个证书呢?我们首先来启动一个Elasticsearch的实例。这个实例可以是按照我之前的“Elastic:菜鸟上手指南”中介绍的那样,我们创建一个Elasticsearch。

在今天的教程中,我们将使用docker来创建一个Elasticsearch的实例:

docker run -d -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.6.2

我们使用如下的命令:

docker ps

我们可以看到一个正在运行的Elasticsearch实例。请注意上面的container的名字为vigorous_goldstine。

我们可以通过如下的命令进入到docker的容器中:

docker exec -it vigorous_goldstine bash

$ docker exec -it vigorous_goldstine bash
[root@2b7a12d54c14 elasticsearch]# ls
LICENSE.txt README.asciidoc config jdk logs plugins
NOTICE.txt bin data lib modules

我们接着使用如下的命令:

./bin/elasticsearch-certutil ca

我们接受默认的文件名elastic-stack-ca.p12:

ls
LICENSE.txt README.asciidoc config elastic-stack-ca.p12 lib modules
NOTICE.txt bin data jdk logs plugins

这样我们就生成了一个叫做elastic-stack-ca.p12的证书文件。我们接着输入命令exit退出container环境。

接着我们进入到docker-compose.yml文件所处的目录:

$ pwd
/Users/liuxg/elastic/docker
liuxg:docker liuxg$ ls
docker-compose.yml

我们打入如下的命令:

docker cp vigorous_goldstine:/usr/share/elasticsearch/elastic-stack-ca.p12 .

经过这样的拷贝后,我们可以看到当前目录下所有的文件:

$ pwd
/Users/liuxg/elastic/docker
liuxg:docker liuxg$ ls
docker-compose.yml elastic-stack-ca.p12

我们已经使用完这个docker,我们可以把这个docker进行销毁:

$ docker stop vigorous_goldstine
$ docker rm vigorous_goldstine

现在我们的准备工作已经完成,我们接下来的工作就是来为我们的Elasticsearch生成用户名及密码。

生产安全账号

如果目前,我们一下子启动Elasticsearch和Kibana的话,我们是没有任何的账号的。我们可以分部启动Elasticsearch及Kibana。

启动Elasticsearch

在我们的termninal中,进入到docker-compose.yml所处的目录中:

docker-compose up -d es01

显示结果为:

$ docker-compose up -d es01
Starting es01 ... done

我们可以通过命令来检查这个被启动的container:

$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0f764e16c163 docker.elastic.co/elasticsearch/elasticsearch:7.6.2 "/usr/local/bin/dock…" 5 minutes ago Up About a minute 0.0.0.0:9200->9200/tcp, 9300/tcp es01

从上面我们可以看出来:Elasticsearch绑定的地址为0.0.0.0,也就是说它绑定于所有的网络接口的地址上。它同时可以被localhost:9200访问,也可以被自己的私有地址 PrivateIP:9200所访问。我们打开一个浏览器,并输入localhost:9200:

我们可以看到:当我们试图去访问的时候,它让我们输入用户名及密码。而这个用户名及密码,我们还没创建呢。

接下来我们来登录到我们的Elasticsearch的容器中:

docker-compose exec es01 bash

$ docker-compose exec es01 bash
[root@496d9f848178 elasticsearch]# ls
LICENSE.txt README.asciidoc config jdk logs plugins
NOTICE.txt bin data lib modules

我们在该目录下打入如下的命令:

./bin/elasticsearch-setup-passwords interactive

然后,我们按照提示把密码都设置为123456。

设置完毕后,我们退出来。再次在localhost:9200上输入elastic/123456这个账号:

这样我们的Elasticsearch的安全就设置好了。

启动Kibana

同样的方法,我们使用如下的命令:

$ docker-compose up -d kibana

$ docker-compose up -d kibana
es01 is up-to-date
Creating kibana ... done
liuxg:docker liuxg$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
17c2273346bd docker.elastic.co/kibana/kibana:7.6.2 "/usr/local/bin/dumb…" 18 seconds ago Up 18 seconds 0.0.0.0:5601->5601/tcp kibana
496d9f848178 docker.elastic.co/elasticsearch/elasticsearch:7.6.2 "/usr/local/bin/dock…" 2 hours ago Up 2 hours 0.0.0.0:9200->9200/tcp, 9300/tcp es01

我们可以通过如下的命令来监测Kibana的运行log:

$ docker-compose logs -f kibana

$ docker-compose logs -f kibana
Attaching to kibana
kibana | {"type":"log","@timestamp":"2020-04-23T11:19:36Z","tags":["info","plugins-service"],"pid":6,"message":"Plugin \"case\" is disabled."}
kibana | {"type":"log","@timestamp":"2020-04-23T11:19:51Z","tags":["warning","config","deprecation"],"pid":6,"message":"Setting [elasticsearch.username] to \"elastic\" is deprecated. You should use the \"kibana\" user instead."}
kibana | {"type":"log","@timestamp":"2020-04-23T11:19:51Z","tags":["warning","config","deprecation"],"pid":6,"message":"Setting [xpack.monitoring.elasticsearch.username] to \"elastic\" is deprecated. You should use the \"kibana\" user instead."}
kibana | {"type":"log","@timestamp":"2020-04-23T11:19:51Z","tags":["info","plugins-system"],"pid":6,"message":"Setting up [37] plugins: [taskManager,siem,licensing,infra,encryptedSavedObjects,code,usageCollection,metrics,canvas,timelion,features,security,apm_oss,translations,reporting,uiActions,data,navigation,status_page,share,newsfeed,inspector,expressions,visualizations,embeddable,advancedUiActions,dashboard_embeddable_container,kibana_legacy,management,dev_tools,home,spaces,cloud,apm,graph,eui_utils,bfetch]"}
...

稍等片刻,在我们的浏览器中输入地址localhost:5601:

在启动的画面,它提示我们输入用户名及密码。我们把账号信息elastic/123456。这样就可以登录了:

这样我们的配置就完成了。如果你想把整个Elastic Stack关掉,你可以通过如下的命令:

docker-compose down

$ docker-compose down
Stopping kibana ... done
Stopping es01 ... done
Removing kibana ... done
Removing es01 ... done
Removing network docker_esnet

如果你下次想再用你这个集群,你只需要打入如下的命令:

docker-compose up

$ docker-compose up
Creating network "docker_esnet" with the default driver
Creating es01 ... done
Creating es02 ... done
Creating kibana ... done
Attaching to es02, es01, kibana
es01 | OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
es02 | OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
es01 | {"type": "server", "timestamp": "2020-04-23T11:27:10,816Z", "level": "INFO", "component": "o.e.e.NodeEnvironment", "cluster.name": "docker-cluster", "node.name": "es01", "message": "using [1] data paths, mounts [[/usr/share/elasticsearch/data (/dev/sda1)]], net usable_space [40gb], net total_space [58.4gb], types [ext4]" }
...

那么整个Elastic Stack (Elasticsearc及Kibana)就会一键启动。

Beats 访问Elasticsearch

当我们部署完Elasticsearch集群后,在以后,我们可能需要把数据导入到Elasticsearch中。上面我们一直在使用localhost:9200地址。但是这个是针对在本地的机器而言的。如果你的beats是在另外一个机器上 (在同一个局域网上),那么你需要使用 PrivateIP:9200地址来进行写入。这里的private IP可以通过如下的命令来获得:

ifconfig | grep 192

针对我的情况:

 ifconfig | grep 192
inet 192.168.0.100 netmask 0xffffff00 broadcast 192.168.0.255

也就是我可以通过192.168.0.100:9200的端口进行访问:

好了今天就讲到这里。在今天的文章中,我们详细地介绍了如何为docker创建的Elasticsearch集群配置安全。

更进一步

如果你想使用Docker部署一个更为完整的Elastic Stack,你可以参考Elastic官方的仓库https://github.com/elastic/stack-docker。

Elastic:为Elastic Docker部署设置安全的更多相关文章

  1. Elastic:用Docker部署Elastic栈

    安装 因为我们需要使用docker来进行安装,我们必须安装: docker:根据不同的操作系统,请按照要求安装docker.可以到网站https://docs.docker.com/去安装 docke ...

  2. Elastic:用 Docker 部署 Elastic Stack

    文章转载自:https://elasticstack.blog.csdn.net/article/details/100919273 前提条件 首选需要在主机上安装好docker和docker-com ...

  3. docker部署zabbix并设置自动发现规则

      docker部署zabbix比源码安装简单一些,特此记录: 机器准备: zabbix-server: 192.168.0.150 homeserver zabbix-agent: 192.168. ...

  4. Docker部署Elasticsearch集群

    http://blog.sina.com.cn/s/blog_8ea8e9d50102wwik.html Docker部署Elasticsearch集群 参考文档: https://hub.docke ...

  5. 使用docker部署skywalking

    使用docker部署skywalking Intro 之前在本地搭建过一次 skywalking + elasticsearch ,但是想要迁移到别的机器上使用就很麻烦了,于是 docker 就成了很 ...

  6. 【原创】运维基础之Docker(2)通过docker部署zookeeper nginx tomcat redis kibana/elasticsearch/logstash mysql kafka mesos/marathon

    通过docker可以从头开始构建集群,也可以将现有集群(配置以及数据)平滑的迁移到docker部署: 1 docker部署zookeeper # usermod -G docker zookeeper ...

  7. Linux实战(20):非docker部署ELK

    部署环境: Elasticsearch:7.5.2 Kibana:7.5.2 Logstash:7.5.2 filebeat:7.5.2 redis:最新版 部署方式:rpm+二进制包 使用架构 软件 ...

  8. Docker部署ELK之部署filebeat7.6.0(3)

    1. filebeat介绍 Filebeat是用于转发和集中日志数据的轻量级传送工具.Filebeat监视您指定的日志文件或位置,收集日志事件,并将它们转发到Elasticsearch或 Logsta ...

  9. Docker 部署前后端项目

    Docker 部署前后端项目 平生不会相思,才会相思,便害相思. 简介:都是被逼的,从零开始一个Docker 部署九个微服务和三个前端项目.其中,这些服务需要用到Nacos.MySQL.Nginx.E ...

随机推荐

  1. 活动报名:以「数」制「疫」,解密 Tapdata 在张家港市卫健委数字化防疫场景下的最佳实践

        疫情两年有余,全国抗疫攻防战步履不停.在"动态清零"总方针的指导下,国内疫情防控工作渐趋规范化.常态化.健康码.行程卡.疫情地图.电子哨兵.核酸码.场所码--各类精准防疫手 ...

  2. Java数组和Arrays 类

    1.创建数组的三种方式: ①动态初始化:数组的初始化和数组元素的赋值操作分开进行 dataType[ ] arrayRefVar = new dataType [ arraySize ] ; Emp ...

  3. 利用MATLAB仿真最小发射功率下WSN的连通性和覆盖率

    一.目的 (1)在固定节点个数的前提下,仿真求得使网络保持连通的最小通信半径(最低能级). (2)在上述节点个数和通信半径的前提下,计算随机布撒的节点的覆盖率. 二.方法描述 (1)首先假设通信半径都 ...

  4. cx_Oracle.DatabaseError: ORA-28759: failure to open file

    找了好久这个问题,有人说是tcps的问题,需要自己生成证书什么的,后来才发现原来是 钱包文件路径 的问题,钱包文件解压后必须放在instantclien/network/admin下,在Windows ...

  5. Mac安装 Scrapy 报错 No local packages or working download links found for incremental>=16.10.1

    证书原因: wget http://curl.haxx.se/ca/cacert.pem mv cacert.pem ca-bundle.crt sudo mkdir -p /etc/pki/tls/ ...

  6. day09 集合排序_Collection接口与Collections工具类

    集合的排序 java.util.Collections类 Collections是集合的工具类,里面定义了很多静态方法用于操作集合. Collections.sort(List list)方法 可以对 ...

  7. 01 开发App真机调试问题

    逍遥安卓模拟器 :https://juejin.cn/post/7062922018710093831 HBuilderX真机调试插上手机却提示"未检测到手机或浏览器"的问题:ht ...

  8. Dubbo源码(三) - 服务导出(生产者)

    前言 本文基于Dubbo2.6.x版本,中文注释版源码已上传github:xiaoguyu/dubbo 在了解了Dubbo SPI后,我们来了解下Dubbo服务导出的过程. Dubbo的配置是通过Du ...

  9. scrollTop实例

    <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...

  10. 函数,递归以及dom简单操作

    函数 函数概述 函数就是具备某个功能的一个工具.是完成某个功能的一段代码. 系统提供了很多函数,但是并不能包含所有的功能,所以有些功能需要我们自己来写----自定义函数.函数定义好以后,就可以像系统函 ...