说明

本博客每周五更新一次。
本文在原Elasticsearch安装基础上增加插件x-pack用户权限认证和Kibana页面管理,丰富Elasticsearch使用场景。
安装分为三个层次

  1. 普通安装,仅启用Kibana,不启用x-pack
  2. 用户认证,开启x-pack,Kibana自动开启用户管理。
  3. https加密,为Elasticsearch和Kibana增加数据安全

分享

资料

服务主页

  • kibana 主页地址:http://localhost:5601/app/home#/
  • Elasticsearch 接口地址:http://localhost:9200/

安装

普通方式安装

系统配置

  • 修改系统最大文件描述大小默认为4096,最小修改为65535,修改文件:/etc/security/limits.conf默认添加内容如下:
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
  • 修改系统最大虚拟内存,默认65535,最小262144,修改文件:/etc/sysctl.conf,末尾增加内容:vm.max_map_count=262144,立即生效命令:/sbin/sysctl -p

安装软件

从官网下载 7.17版本,解压到安装目录即可。

  • 安装启动用户必须为非root用户。
# 创建安装目录
mkdir /usr/local/elasticsearch
# 解压安装包
cd /usr/local/elasticsearch
tar -zxvf elasticsearch-7.17.0-linux-x86_64.tar.gz
tar -zxvf kibana-7.17.0-linux-x86_64.tar.gz

#创建用户
useradd 用户
# 授权
chown -R 用户: /usr/local/elasticsearch/

####### 切换到新建用户,后续操作都使用该用户完成####
su 用户

软件配置

elasticsearch.yml
  • 编辑文件:config/elasticsearch.yml,设置如下
# ---------------------------------- Cluster -----------------------------------
# 集群名称
cluster.name: my-application
# 集群中主节点的节点的集合
cluster.initial_master_nodes: ["node-1"]

#
# ------------------------------------ Node ------------------------------------
#
# Use a descriptive name for the node:
# 节点名称
node.name: node-1

# ----------------------------------- Paths ------------------------------------
# 设置data存储目录
path.data: /usr/local/elasticsearch/elasticsearch-7.17.0/data
# 设置logs日志的目录
path.logs: /usr/local/elasticsearch/elasticsearch-7.17.0/logs

# ---------------------------------- Network -----------------------------------
#
# 默认仅localhost访问,配置当前服务器ip,允许ip访问
network.host: 192.168.10.200

# 服务端口,默认为9200
http.port: 9200
jvm.options

编辑文件:config/jvm.options填写如下内容

-Xms1g
-Xmx1g

启动并验证

  • 启动:软件根目录执行命令:bin/elasticsearch
  • 验证:浏览器打开网址:http://服务器ip:9200

安装kibana

解压安装包,修改配置文件:vi config/kibana.yml,指定Elasticsearch地址:

# kibana 服务地址,默认仅localhost可访问
server.host: "192.168.10.200"
# Elasticsearch服务地址
elasticsearch.hosts: ["http://192.168.10.200:9200"]
# 系统语言默认英文,改为中文
i18n.locale: "zh-CN"

运行启动软件即可。命令:bin/kibana,登录地址:http://ip:5601

用户认证

开启x-pack验证

编辑文件:config/elasticsearch.yml,设置如下内容:

# 开启 xpack
xpack.security.enabled: true
# 确保节点不会无意中连接到可能在网络上运行的其他群集
discovery.type: single-node
# 开启传输层 ssl加密,不开启服务无法启动
xpack.security.transport.ssl.enabled: true

注意:

  • 一旦开启x-pack,必须开启TLS/SSL加密传输,否则会有日志报错如下:
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]

创建内容用户

  • 启动Elasticsearch:bin/elasticsearch
  • 新建终端窗口,创建内置用户。
# 自定义密码
bin/elasticsearch-setup-passwords interactive

# 随机生成密码
bin/elasticsearch-setup-passwords auto

# 随机生成结果如下
Changed password for user apm_system
PASSWORD apm_system = h1d0q4mfPvbgxqQeLERj

Changed password for user kibana_system
PASSWORD kibana_system = OzKzbRb84YtgyvoXkvXO
# 登录Kibana账号
Changed password for user kibana
PASSWORD kibana = OzKzbRb84YtgyvoXkvXO

Changed password for user logstash_system
PASSWORD logstash_system = kLFsukpLcsyGsqNFGMuW

Changed password for user beats_system
PASSWORD beats_system = ESvQWN3jbM4s7f78CU72

Changed password for user remote_monitoring_user
PASSWORD remote_monitoring_user = KvLoRUhEKutOXrL23ZWL

Changed password for user elastic
PASSWORD elastic = Hm3pZkPVsEpwPC7Kj9QA

注意:

  • 为用户设置密码后,无法再次运行该命令。elasticelasticsearch-setup-passwords

访问测试

# 不带认证访问会报认证异常
curl http://localhost:9200/_cat/indices
# -u参数指定账号,执行后会提示输入密码
curl -u elastic http://localhost:9200/_cat/indices
# -u参数指定账号和密码,格式:user:password
curl -u elastic:123456 http://localhost:9200/_cat/indices

设置密码

修改用户密码:curl -XPOST -u elastic http://localhost:9200/_security/user/elastic/_password -H "Content-Type:application/json" -d "{\"password\":\"abcdefg\"}"

忘记密码

如果忘记密码,可以先取消认证,即注释掉上面config/elasticsearch.yml中添加的两个配置,然后重启ElasticSearch,然后找到一个类型.security-X的index,删除掉就可以回到最初无密码认证的状态了:

# 查看.security-X存在与否
curl http://localhost:9200/_cat/indices | grep ".security"
# 删除index,我这里是.security-7
curl -XDELETE http://localhost:9200/.security-7

kibana关联账号和密码

编辑文件:vi config/kibana.yml,设置账号和密码

xpack.security.enabled: true
elasticsearch.username: "kibana"
elasticsearch.password: "XXXXXX"

web页面登录时,管理员账号为 Kibana 用户

https加密

如果不配置 HTTPS 连接,某些 Elasticsearch 功能(比如令牌和 API 密钥)将被禁用,该安全层确保所有进出集群的通信都是安全的,HTTPS 配置建立在“传输层TLS安全配置之上” ,所以它要求你的集群已经配置了传输层安全配置。

https是加密有三个地方

  • Elasticsearch 节点间传输层通信加密
  • Elasticsearch 对外服务https加密
  • Kibana服务https加密

传输层加密添加证书

由于Elasticsearch集群中的每个节点都是客户端和集群中其他节点的服务器,因此所有传输证书都必须是客户端和服务器证书。
Elasticsearch附带加密签名证书工具elasticsearch-certutil生成数字证书,操作如下:

# 生成根证书 执行后确认回车两次
bin/elasticsearch-certutil ca
# 执行后确认回车三次
bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12

获得可用于加密通信的TLS/SSL证书elastic-certificates.p12,创建目录config/certs,将证书复制到config/certs的目录中,然后在config/elasticsearch.yml文件配置如下:

xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12

重新启动Elasticsearch集群中的所有节点,应用传输层加密。

ElasticSearch开启https

此处使用与传输层相同认证文件,编辑config/elasticsearch.yml,追加如下代码:

#开启http层加密
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: certs/elastic-certificates.p12
Elasticsearch与Kibana 加密连接

使用前面生成文件:elastic-certificates.p12,分解为私匙、公共证书和CA证书

# Private Key 私钥,回车即可
openssl pkcs12 -in elastic-certificates.p12 -nocerts -nodes > client.key
# Public Certificate 公共证书,回车即可
openssl pkcs12 -in elastic-certificates.p12 -clcerts -nokeys  > client.cer
# CA Certificate 签署公共证书的CA,回车即可
openssl pkcs12 -in elastic-certificates.p12 -cacerts -nokeys -chain > client-ca.cer

Kibana根目录下创建文件夹:config/certs,将文件client.cer、client.key、client-ca.cer复制到该目录。

编辑Kibana配置文件vi config/kibana.yml,添加如下配置:

# 更新Elasticsearch连接地址
elasticsearch.hosts: ["https://192.168.10.200:9200"]

# ssl加密
elasticsearch.ssl.certificate: config/certs/client.cer
elasticsearch.ssl.key: config/certs/client.key
elasticsearch.ssl.certificateAuthorities: [ "config/certs/client-ca.cer" ]
elasticsearch.ssl.verificationMode: certificate

重启kibana登录后请求Elasticsearch确认是否可操作。
在这里插入图片描述

Kibana 开启https

复用Elasticsearch数字证书,编辑Kibana配置文件vi config/kibana.yml,增加如下内容:

server.ssl.enabled: true
server.ssl.certificate: config/certs/client.cer
server.ssl.key: config/certs/client.key

重启kibana服务,即可通过https://localhost:5601访问kibana UI进行操作。

建议

  • https建议仅开启Kibana的https访问即可,Elasticsearch服务和节点间通信不建议开启https功能,功能测试中,出现过由于ssl加密,Elasticsearch无法启动问题。

总结

  • 安装配置过程繁琐,按顺序安装一遍有利于理解Elasticsearch+Kibana原理,最新版8刚发布不久,简化了安装过程,但发行时间较短,存在bug,不建议使用。
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐