在很久很久以前,天地初开,万物都出现了。公司要上一个项目,需要用到elasticsearch,经过讨论,我们要使用带有用户密码的 es ,这也不是什么难事儿,现在版本的 es 本身默认启动的时候都需要设置用户密码。但是我们这次的项目是部署在某云上的,结果在某云上直接开了个 elasticsearch ,选择了带有用户密码的,结果开完以后,点了kibana连接,发现 kibana的页面和我做的不一样,仔细一看,是https 的,研发使用代码用 http 的方式连 es 也失败,提工单一问,访问 es 也需要 https 的方式访问。那就要自己在公司内网也部署一套这样的 es 了 ,于是乎,就发生了下面的故事。调研elasticsearch 如何加密传输…
经过老夫的询问,原来某云用的是 opendistro 做的 https,于是放狗搜一下,找到了这个github 项目的地址:github项目地址
废话不多说,以下是我总结的安装方式,希望能帮需要的哥们儿解决燃眉之急。(一下文档我顺手安装了些插件,需要的也可以安装)
一、服务器共三台
ip | 主机名 | 部署服务 | 安装路径 |
---|---|---|---|
192.168.7.41 | elastic41 | elasticsearch自带jdk、elasticsearch7.1.1、opendistro相关插件、kibana | /data/elasticsearch-7.1.1 和 /data/kibana-7.1.1-linux-x86_64 |
192.168.7.42 | elastic42 | elasticsearch自带jdk、elasticsearch7.1.1、opendistro相关插件 | /data/elasticsearch-7.1.1 |
192.168.7.43 | elastic43 | elasticsearch自带jdk、elasticsearch7.1.1、opendistro相关插件 | /data/elasticsearch-7.1.1 |
二、准备环境和所需文件
在每个节点执行
mkdir -p /data/pack
useradd elastic
chown elastic. /data
echo "vm.max_map_count=262144" >> /etc/sysctl.conf
sysctl -p
echo "* soft nofile 65535" >> /etc/security/limits.conf
echo "* hard nofile 65535" >> /etc/security/limits.conf
在elastic41 上下载文件
下载elasticsearch 和 kibana
su - elastic
cd /data/pack
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.1.1-linux-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.1.1-linux-x86_64.tar.gz
下载elasticsearch的 opendistro 加密相关插件
wget https://d3g5vo6xdbdb9a.cloudfront.net/downloads/elasticsearch-plugins/opendistro-alerting/opendistro_alerting-1.1.0.0.zip
wget https://d3g5vo6xdbdb9a.cloudfront.net/downloads/elasticsearch-plugins/opendistro-security/opendistro_security-1.1.0.0.zip
wget https://d3g5vo6xdbdb9a.cloudfront.net/downloads/elasticsearch-plugins/opendistro-sql/opendistro_sql-1.1.0.0.zip
下载kibana 的 opendistro 加密相关插件
wget https://d3g5vo6xdbdb9a.cloudfront.net/downloads/kibana-plugins/opendistro-alerting/opendistro-alerting-1.1.0.0.zip
wget https://d3g5vo6xdbdb9a.cloudfront.net/downloads/kibana-plugins/opendistro-security/opendistro_security_kibana_plugin-1.1.0.0.zip
下载elasticsearch的常用插件
wget https://artifacts.elastic.co/downloads/elasticsearch-plugins/analysis-icu/analysis-icu-7.1.1.zip
wget https://artifacts.elastic.co/downloads/elasticsearch-plugins/analysis-kuromoji/analysis-kuromoji-7.1.1.zip
wget https://artifacts.elastic.co/downloads/elasticsearch-plugins/analysis-nori/analysis-nori-7.1.1.zip
wget https://artifacts.elastic.co/downloads/elasticsearch-plugins/ingest-attachment/ingest-attachment-7.1.1.zip
wget https://github.com/medcl/elasticsearch-analysis-pinyin/releases/download/v7.1.1/elasticsearch-analysis-pinyin-7.1.1.zip
wget https://github.com/medcl/elasticsearch-analysis-stconvert/releases/download/v7.1.1/elasticsearch-analysis-stconvert-7.1.1.zip
wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.1.1/elasticsearch-analysis-ik-7.1.1.zip
三、安装各插件到es和kibana
解压es和kibana文件到 /data 下
tar xvf elasticsearch-7.1.1-linux-x86_64.tar.gz -C ../
tar xvf kibana-7.1.1-linux-x86_64.tar.gz -C ../
chown -R elastic. /data/elasticsearch-7.1.1
chown -R elastic. /data/kibana-7.1.1-linux-x86_64
到es安装目录中安装 opendistro 加密插件
cd /data/elasticsearch-7.1.1
bin/elasticsearch-plugin install file:///data/pack/opendistro_sql-1.1.0.0.zip
bin/elasticsearch-plugin install file:///data/pack/opendistro_alerting-1.1.0.0.zip
bin/elasticsearch-plugin install file:///data/pack/opendistro_security-1.1.0.0.zip
到es安装目录中安装常用插件
bin/elasticsearch-plugin install file:///data/pack/analysis-icu-7.1.1.zip
bin/elasticsearch-plugin install file:///data/pack/analysis-kuromoji-7.1.1.zip
bin/elasticsearch-plugin install file:///data/pack/analysis-nori-7.1.1.zip
bin/elasticsearch-plugin install file:///data/pack/elasticsearch-analysis-ik-7.1.1.zip
bin/elasticsearch-plugin install file:///data/pack/ingest-attachment-7.1.1.zip
bin/elasticsearch-plugin install file:///data/pack/elasticsearch-analysis-pinyin-7.1.1.zip
bin/elasticsearch-plugin install file:///data/pack/elasticsearch-analysis-stconvert-7.1.1.zip
到kibana目录中安装opendistro 加密插件
cd /data/kibana-7.1.1-linux-x86_64
bin/kibana-plugin install file:///data/pack/opendistro-alerting-1.1.0.0.zip
bin/kibana-plugin install file:///data/pack/opendistro_security_kibana_plugin-1.1.0.0.zip
四、修改配置文件
cd /data/elasticsearch-7.1.1
cat > config/elasticsearch.yml <<EOF
# ======================== Elasticsearch Configuration =========================
# Elasticsearch config
cluster.initial_master_nodes: ['192.168.7.41', '192.168.7.42', '192.168.7.43']
discovery.seed_hosts: ['192.168.7.41', '192.168.7.42', '192.168.7.43']
cluster.name: Es-dev
node.name: Es-dev41
network.host: 192.168.7.41
gateway.expected_nodes: 1
gateway.recover_after_time: 5m
# Elasticsearch opendistro
opendistro_security.disabled: False
opendistro_security.ssl.transport.pemcert_filepath: node.crt.pem
opendistro_security.ssl.transport.pemkey_filepath: node.key.pem
opendistro_security.ssl.transport.pemtrustedcas_filepath: root-ca.pem
opendistro_security.ssl.transport.enforce_hostname_verification: false
opendistro_security.ssl.http.enabled: true
opendistro_security.ssl.http.pemcert_filepath: node.crt.pem
opendistro_security.ssl.http.pemkey_filepath: node.key.pem
opendistro_security.ssl.http.pemtrustedcas_filepath: root-ca.pem
opendistro_security.allow_default_init_securityindex: true
opendistro_security.authcz.admin_dn:
- CN=kirk,OU=client,O=client,L=Shenzhen,C=CN
opendistro_security.ssl.http.enabled_ciphers:
- "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256"
- "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256"
- "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA"
- "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"
- "TLS_RSA_WITH_AES_128_CBC_SHA256"
- "TLS_RSA_WITH_AES_128_CBC_SHA"
- "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384"
- "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384"
- "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA"
- "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"
- "TLS_RSA_WITH_AES_256_CBC_SHA256"
- "TLS_RSA_WITH_AES_256_CBC_SHA"
opendistro_security.ssl.http.enabled_protocols:
- "TLSv1.2"
opendistro_security.audit.type: internal_elasticsearch
opendistro_security.enable_snapshot_restore_privilege: true
opendistro_security.check_snapshot_restore_write_privileges: true
opendistro_security.restapi.roles_enabled: ["all_access", "security_rest_api_access"]
EOF
五、删除elasticsearch和kibana安装目录下的modules中的x-pack 相关插件,x-pack插件和opendistro插件有冲突,必须删除。也就是说,用了x-pack就不能用opendistro,蛋疼不蛋疼。。。
rm -fr /data/elasticsearch-7.1.1/modules/x-pack-security
rm -fr /data/kibana-7.1.1-linux-x86_64/node_modules/x-pack
六、生成pem文件到 /data/elasticsearch-7.1.1/config 目录下,将/data/elasticsearch-7.1.1传到其他两个节点,并修改文件中network.host和node.name 字段,并修改文件目录权限,然后启动
生成 pem 文件,可以使用github 中的方式生成,也可以直接用我这里已经合成好的,启动后把密码重新打入pem文件就可以了,文件下载地址:https://download.csdn.net/download/qq_31547771/11961047 ,下载好后解压到 config 路径下
chown -R elastic. /data
scp -r /data/elasticsearch-7.1.1 root@192.168.7.42:/data/
scp -r /data/elasticsearch-7.1.1 root@192.168.7.43:/data/
到192.168.7.42 和 192.168.7.43 上将配置文件中 network.host和node.name 字段改成 本机的
然后先在前台启动各节点的es,方便看报错。并查看日志是否有报错,是否选举了master
/data/elasticsearch-7.1.1/bin/elasticsearch
七、为https的elasticsearch创建用户密码
先生成internal_users_2019-Oct-25_15-55-25.yml文件,看自己生成的文件名是什么名字,我生成的是这个
cd plugins/opendistro_security/tools/
sh securityadmin.sh -r -h 192.168.7.41 -p 9300 -cd /tmp/es/ -icl -nhnv -cacert /data/elasticsearch-7.1.1/config/root-ca.pem -cert /data/elasticsearch-7.1.1/config/kirk.all.pem -key /data/elasticsearch-7.1.1/config/kirk.all.pem
然后使用 hash.sh 脚本生成elasticsearch 登录密码的哈希密文,写到 internal_users_2019-Oct-25_15-55-25.yml文件中,写入位置如下图所示。
bash hash.sh
在这里输入密码后,会返回 哈希值,然后将 hash 值贴到 internal_users_2019-Oct-25_15-55-25.yml文件中(想要不同用户使用不同密码,就多hash几个不同的密码)
vim /tmp/es/internal_users_2019-Oct-25_15-55-25.yml
sh securityadmin.sh -h 192.168.7.41 -p 9300 -f /tmp/es/internal_users_2019-Oct-25_15-55-25.yml -icl -nhnv -cacert /data/elasticsearch-7.1.1/config/root-ca.pem -cert /data/elasticsearch-7.1.1/config/kirk.all.pem -key /data/elasticsearch-7.1.1/config/kirk.all.pem -t internalusers
测试刚刚生成的密码,我的密码是 admin@123
curl -ik https://192.168.7.41:9200 -uadmin:admin@123
八、启动kibana
cd /data/kibana-7.1.1-linux-x86_64
cat > config/kibana.yml <<EOF
server.host: "192.168.7.41"
elasticsearch.username: "kibanaserver"
elasticsearch.password: "admin@123"
elasticsearch.ssl.verificationMode: none
server.ssl.enabled: false
server.ssl.certificate: /data/elasticsearch-7.1.1/config/node.crt.pem
server.ssl.key: /data/elasticsearch-7.1.1/config/node.key.pem
server.rewriteBasePath: false
elasticsearch.hosts: https://192.168.7.42:9200
EOF
nohup ./bin/kibana >> kibana.log &