docker(十五)docker-compose部署elasticsearch7配置账号密码登录

435 阅读4分钟

之前我有在centos系统的服务器上部署elasticsearch,具体请移步《Elasticsearch(一)Elasticsearch安装与配置

 

但是,上边这个安装并没有配置账号密码,所以,任何人都可以访问,这在生产环境中是不被允许的。

 

这里我尝试在docker中部署elasticsearch并配置账号密码登录。

 

我这里使用的是docker-compose

 

一:docker-compose.yml

version: "3.8"
services:
  elasticsearch:
    container_name: es
    image: elasticsearch:7.17.3
    ports:
      - "9200:9200"
      - "9300:9300"
    environment:
      node.name: es
      cluster.name: elasticsearch
      discovery.type: single-node  
      ES_JAVA_OPTS: -Xms64m -Xmx512m
      network.host: 0.0.0.0
      http.port: 9200
      # discovery.seed_hosts: ["localhost:9300"]
    volumes:
      - /opt/docker/elasticsearch/data:/usr/share/elasticsearch/data
      - /opt/docker/elasticsearch/logs:/usr/share/elasticsearch/logs
      - /opt/docker/elasticsearch/plugins:/usr/share/elasticsearch/plugins
    restart: always

 

运行docker-compose.yml文件:

docker compose up -d

 

初次运行时间较长,可能得等一会儿。容器创建成功之后。使用命令查看正在运行的容器:

docker ps -a

 

在浏览器中打开链接:

http://你的ip:9200/

发现elasticsearch搭建成功,已经可以访问了。

 

二:elasticsearch配置账号密码登录

1:生成证书:

1)      使用命令进入容器:

docker exec -it es /bin/bash

2)      生成ca证书

./bin/elasticsearch-certutil ca

3)      生成证书一路回车即可

 

2:生成cert证书

生成cert证书:

./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12

生成证书过程一路回车即可,一共需要三个回车,你也可以在最后一个回车位置输入密码。

 

3:查看证书:

ll

发现elastic-certificates.p12这个文件,说明证书生成成功。

 

4:退出容器

exit

 

5:拷贝es容器证书

1)      创建一个存放证书的目录:

mkdir /opt/docker/elasticsearch/cert

2)      拷贝证书:

docker cp es:/usr/share/elasticsearch/elastic-certificates.p12  /opt/docker/elasticsearch/cert

3)      授权证书:

chmod 777 /opt/docker/elasticsearch/cert/elastic-certificates.p12

 

6:添加配置文档elasticsearch.yml

创建一个存放elasticsearch.yml的目录:

mkdir /opt/docker/elasticsearch/config

创建elasticsearch.yml文件

touch elasticsearch.yml

 

编辑elasticsearch.yml文件

vi elasticsearch.yml

 

内容如下:

cluster.name: "docker-cluster"
network.host: 0.0.0.0
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: /usr/share/elasticsearch/config/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /usr/share/elasticsearch/config/elastic-certificates.p12
xpack.security.transport.ssl.truststore.type: PKCS12
 
xpack.security.audit.enabled: true

 

7:编辑docker-compose.yml文件

添加证书和elasticsearch.yml的目录挂载,文件内容如下:

version: "3.8"
services:
  elasticsearch:
    container_name: es
    image: elasticsearch:7.17.3
    ports:
      - "9200:9200"
      - "9300:9300"
    environment:
      node.name: es
      cluster.name: elasticsearch
      discovery.type: single-node  
      ES_JAVA_OPTS: -Xms64m -Xmx512m
      network.host: 0.0.0.0
      http.port: 9200
    volumes:
      - /opt/docker/elasticsearch/data:/usr/share/elasticsearch/data
      - /opt/docker/elasticsearch/logs:/usr/share/elasticsearch/logs
      - /opt/docker/elasticsearch/plugins:/usr/share/elasticsearch/plugins
      - /opt/docker/elasticsearch/cert/elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12
      - /opt/docker/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
    restart: always

 

重新运行docker-compose.yml文件

docker compose up -d

 

配置到这一步,你就可以访问:

http://你的ip:9200/

这个时候你会发现,需要账号密码登录了,但是呢,我们还没有配置账号密码,所以下一步就需要进入容器配置账号密码。

 

8:设置es账号密码

进入es容器

docker exec -it es /bin/bash

 

设置密码(账号默认为 elastic)

./bin/elasticsearch-setup-passwords interactive

 

Elasticsearch会默认创建很多用户,你需要挨一个给他们设置密码,这里建议都使用一个。容易记住。到这里,es的账号密码配置就完成了。

 

浏览器访问:

http://你的ip:9200/

输入默认账号:elastic以及刚才你配置的密码,即可登录es

 

三:配置kibana

我的kibana也是使用docker安装的,具体的安装过程会在另一篇文章中写出。这里只描述如何配置elasticsearch的账号密码登录。

1:添加kibana登录的账号和密码

有同学可能会有疑问,上边es默认创建了很多账号密码,直接使用他们不就可以了嘛。很明显,不行。因为es 不允许使用elastic用户登录kibana

 

所以这里需要创建一个自定义用户

 

进入es容器,

docker exec -it es bash

 

执行命令添加用户

bin/elasticsearch-users useradd  test

 

添加了用户,并需要给这个用户添加角色不然会报错

 

角色授权

bin/elasticsearch-users roles -a superuser  test
 
bin/elasticsearch-users roles -a kibana_system test

 

2:配置kibana.yml

i18n.locale: zh-CN
server.host: "0.0.0.0"
server.shutdownTimeout: "5s"
elasticsearch.hosts: [ "http://es:9200" ]
elasticsearch.username: "test"
elasticsearch.password: "*********"

 

3:测试一下

浏览器访问:

http://你的ip:5601/

这个时候,不出意外,你的kibana也是需要账号密码登录了。

 

有好的建议,请在下方输入你的评论。