【docker开启es集群安全认证】


前言

使用docker搭建es集群,并开启安全认证,配置kibana客户端连接。
本文主要讲述es开启ssl和security安全认证的步骤,对于es和kibana的配置以及启动简要描述,如需查看详细的es集群和kibana配置步骤,可查看docker搭建es8集群+kibana,es单机和kibana配置可查看docker部署es8+kibana


一、启动es集群

1. 修改elasticsearch.yml

先不开启es的安全认证

# 集群名称
cluster.name: es-cluster
# 节点名称
node.name: node-1
# 网络地址
network.host: 0.0.0.0
network.publish_host: 192.168.100.125
# 集群节点配置
discovery.seed_hosts: ["192.168.100.125:9300","192.168.100.39:9300","192.168.100.2:9300"]
# 主节点候选
cluster.initial_master_nodes: ["node-1","node-2","node-3"]

# 客户端端口
http.port: 9200
# 集群节点端口
transport.port: 9300

# 是否开启安全认证
xpack.security.enabled: false
xpack.security.enrollment.enabled: true

# 是否开启ssl
xpack.security.http.ssl:
  enabled: false
  #keystore.path: /usr/share/elasticsearch/config/certs/http.p12
  #truststore.path: /usr/share/elasticsearch/config/certs/http.p12

# 是否开启访问安全认证
xpack.security.transport.ssl:
  enabled: false
  #verification_mode: certificate
  #keystore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12
  #truststore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12

# 跨域配置
http.cors.enabled: true
http.cors.allow-origin: "*"
http.host: 0.0.0.0

2.启动es

docker run -d \
  --privileged=true \
  --name es \ 
  --network es-net \
  -p 9200:9200 \
  -p 9300:9300 \
  -v /usr/local/docker/elasticsearch/data:/usr/share/elasticsearch/data \
  -v /usr/local/docker/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
  -v /usr/local/docker/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
  docker.elastic.co/elasticsearch/elasticsearch:8.14.1

二、生成安全认证文件

1. 创建ca证书

# 进入docker容器的es实例
docker exec -it es bash
# 生成ca证书 遇到提示回车,共两次
bin/elasticsearch-certutil  ca
# 生成节点证书 遇到提示回车,共三次
bin/elasticsearch-certutil  cert --ca elastic-stack-ca.p12

2. 部署ca证书

# 切换到config目录
cd config
# 创建certs文件夹
mkdir certs
# 回到原目录
cd ..
# 将ca证书移动到certs中
mv elastic-certificates.p12 elastic-stack-ca.p12 config/certs

2.1 将ca证书从docker容器内复制到linux

docker cp 指令详情

# 退出docker容器(已退出则无需操作)
exit
# 切换到elasticsearch的config目录
cd /usr/local/docker/elasticsearch/config
# 复制docker中的certs到linux
docker cp es:/usr/share/elasticsearch/config/certs /usr/local/docker/elasticsearch/config

查看结果
在这里插入图片描述

2.2 将ca证书复制到其他linux

首先确认其他节点服务器都已开启
以下两种方法选其一,执行后需要输入服务器密码确认
Linux下的SCP指令详解

# 在其他服务器复制certs过来
scp -r root@192.168.100.125:/usr/local/docker/elasticsearch/config/certs /usr/local/docker/elasticsearch/config
# 将certs复制到其他服务器去
scp -r /usr/local/docker/elasticsearch/config/certs root@192.168.100.39:/usr/local/docker/elasticsearch/config

2.3 将ca证书上传到docker容器内

首先确保docker容器的实例已正常启动

# 将本地服务器文件上传到docker容器内
docker cp /usr/local/docker/elasticsearch/config/certs es:/usr/share/elasticsearch/config

2.4 修改docker容器内ca证书的权限

因为其他节点服务器的ca证书是从本地上传到docker容器内的,所以docker容器内的文件权限不属于容器实例的账号,如果不进行文件权限修改则节点无法正常启动

# 以root账号进入docker容器
docker exec -it -u root es bash
# 进入config目录
cd config
# 修改certs的文件权限
chown -R elasticsearch certs
# 进入certs文件夹
cd certs
# 查看文件权限
ls -l

结果查看
在这里插入图片描述

三、重启es集群

3.1 修改elasticsearch.yml

将原本false的安全认证属性设置为true,取消注释的ca证书配置

# 集群名称
cluster.name: es-cluster
# 节点名称
node.name: node-1
# 网络地址
network.host: 0.0.0.0
network.publish_host: 192.168.100.125
# 集群节点配置
discovery.seed_hosts: ["192.168.100.125:9300","192.168.100.39:9300","192.168.100.2:9300"]
# 主节点候选
cluster.initial_master_nodes: ["node-1","node-2","node-3"]

# 客户端端口
http.port: 9200
# 集群节点端口
transport.port: 9300

# 是否开启安全认证
xpack.security.enabled: true
xpack.security.enrollment.enabled: true

# 是否开启ssl
xpack.security.http.ssl:
  enabled: true
  keystore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12
  truststore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12

# 是否开启访问安全认证
xpack.security.transport.ssl:
  enabled: true
  verification_mode: certificate
  keystore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12
  truststore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12

# 跨域配置
http.cors.enabled: true
http.cors.allow-origin: "*"
http.host: 0.0.0.0

四、启动kibana

es开启ssl和security安全认证后,kibana无法连接es,会显示尚未准备好,需要elasticsearch生成kibana的安全认证文件,并配置才可连接

4.1 生成kibana认证文件

# 进入elasticsearch容器内
docker exec -it es bash
# 生成kibana证书(-dns后接kibana所在的服务器域名)
bin/elasticsearch-certutil csr -name kibana -dns centos7
# 解压文件
unzip csr-bundle.zip
# 退出容器
exit
# 进入kibana的config目录
cd /usr/local/docker/kibana/config
# 创建certs文件夹
mkdir certs
# 将elasticsearch生成在容器中的证书复制到certs中
docker cp es:/usr/share/elasticsearch/kibana.csr /usr/local/docker/kibana/config/certs
docker cp es:/usr/share/elasticsearch/kibana.key /usr/local/docker/kibana/config/certs
# 还要将es的elasticsearch-ca.pem文件一块复制到kibana
docker cp es:/usr/share/elasticsearch/config/certs/elasticsearch-ca.pem /usr/local/docker/kibana/config/certs
# 进入certs文件夹
cd certs
# 生成crt文件
openssl x509 -req -in kibana.csr -signkey kibana.key -out kibana.crt

4.2 部署kibana认证文件

因为是从linux上传到docker容器内,所以一样需要修改文件权限

# 将服务器上kibana的certs上传到docker容器中
docker cp /usr/local/docker/kibana/config/certs kibana:/usr/share/kibana/config
# 使用root进入kibana容器
docker exec -it -u root kibana bash
# 进入config文件夹
cd config
# 修改certs权限
chown -R kibana certs

查看结果
在这里插入图片描述

4.3 修改kibana配置

kibana.yml
注意:如果es开启了ssl的https连接认证,则kibana中的连接配置也要改为https,后续访问kibana客户端也要使用https

server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["https://192.168.100.125:9200","https://192.168.100.39:9200","https://192.168.100.2:9200"]
i18n.locale: "zh-CN"

# kibana连接elasticsearch的账号
elasticsearch.username: "kibana"
# 密码需要去elasticsearch容器中修改
elasticsearch.password: "kibana"

elasticsearch.ssl.verificationMode: none
elasticsearch.ssl.certificateAuthorities: ["/usr/share/kibana/config/certs/elasticsearch-ca.pem"]

server.ssl.enabled: true
server.ssl.certificate: /usr/share/kibana/config/certs/kibana.crt
server.ssl.key: /usr/share/kibana/config/certs/kibana.key

4.4 修改kibana账号密码

当es节点开启https,或启动的集群节点数少于2时,修改指令会报错,显示连接集群超时

# 进入elasticsearch容器
docker exec -it es bash
# 修改kibana账号密码
bin/elasticsearch-reset-up -u kibana -i

4.5 启动kibana

docker run -d \
--name kibana \
--network es-net \
-p 5601:5601 \
-v /usr/local/docker/kibana/data:/usr/share/kibana/data \
-v /usr/local/docker/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml \
docker.elastic.co/kibana/kibana:8.14.1

在这里插入图片描述
在这里插入图片描述


总结

以上就是docker部署es集群连接kibana并开启安全认证的方法,其中还有以下的细节可能出现问题:
1、es节点开启https认证,或集群启动节点数少于2时,使用elasticsearch-reset-up修改账号密码会报错,显示连接集群超时
2、有时linux重启后,es中已设置的账号密码会丢失,需要重新设置密码
3、kibana账号只能用作kibana启动连接es,登录kibana时还得使用elastic等账号

  • 24
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值