本章节的配置内容,是建立在成功部署和配置了前面几个章节的基础之上。
制作数字证书
在一个安全的集群中,Elasticsearch节点在与其他节点通信时会使用证书来标识自己。
群集必须验证这些证书的真实性。 建议的方法是信任特定的证书颁发机构(CA)。 因此,当节点添加到群集时,需要他们使用由同一CA签名的证书。
制作ca证书:
./bin/elasticsearch-certutil ca
- 使用默认输出文件名elastic-stack-ca.p12,并为证书设置访问口令:my-elastic123。如果是你的生产集群,请注意做好证书和口令的保护。
创建一个目录用于存放证书:
cd ${ES_HOME}/config
mkdir certs
为节点1制作证书和密钥:
./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 --ip 10.20.0.11 --out config/certs/es-node1.p12
- 输入ca的口令,并为节点1的证书设置口令为:es-node123
- elasticsearch-certutil工具提供了更多复杂的证书管理功能,如果有使用需求可以参见:https://www.elastic.co/guide/en/elasticsearch/reference/7.2/certutil.html
配置集群节点间的加密通信
编辑elasticsearch.yml文件,修改以下参数。
1)禁用single-node discovery:
discovery.type: single-node
- 我们之前为了调试单节点的es功能而启用的这个参数,现在直接从配置文件中清除这一配置项,使用默认值即可。
2)设置这次启动中有资格成为master节点的主机列表:
cluster.initial_master_nodes: ["es-node1"]
- 因为此时我们还只有一个节点。如果是已经有多个具备master node资格的节点时,则这里需要把它们都维护在列表中。
- 这一参数仅在集群初次建立时有用。
3)为传输(节点间)通信启用传输层安全性(TLS / SSL):
ES_PATH_CONF/elasticsearch.yml
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.keystore.path: certs/${node.name}.p12
xpack.security.transport.ssl.truststore.path: certs/${node.name}.p12
将PKCS#12文件的密码存储在Elasticsearch密钥库中。
./bin/elasticsearch-keystore create
./bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
./bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
- 如果elasticsearch keystore文件已经存在了,则可以跳过创建命令
- 系统将提示你提供为es-node1.p12文件创建的密码。 我们将此文件用于传输TLS密钥库和信任库,因此为这两个设置提供相同的密码。
[elastic@es-node1 elasticsearch-7.2.0]$ ./bin/elasticsearch-keystore list
keystore.seed
xpack.security.transport.ssl.keystore.secure_password
xpack.security.transport.ssl.truststore.secure_password
重新启动es服务:
./bin/elasticsearch
以及kibana服务:
./bin/kibana
向es集群中添加更多的节点
es可以使用的节点有很多类型,详见:https://www.elastic.co/guide/en/elasticsearch/reference/7.2/modules-node.html 。
我们在这里向集群中添加两个节点,每个节点都既作为master-eligible node(node.master: true),也作为data node(node.data: true)。
1)我们先配置好另外的两个主机节点
- 参照本文第一部分的内容对系统进行初始化配置;
- 参照本文第二部分,第1章节的内容部署elasticsearch程序,暂不启动es服务;
2)在节点1上为新增的两个节点制作证书
./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 --multiple
- 依次为es-node2, es-node3生成证书,得到名为certificate-bundle.zip的输出文件;
- 为简单起见,统一将两个新节点证书的密码也设置为和节点1相同的 es-node123 ;
- 将解压缩后得到证书文件,参照节点1的存放路径(/opt/elasticsearch-7.2.0/config/certs),分别部署到节点2和节点3上去。
3)编辑3个节点的ES_PATH_CONF/elasticsearch.yml文件
节点es-node1:
cluster.name: my-elastic
node.name: es-node1
bootstrap.memory_lock: true
network.host: 10.20.0.11
cluster.initial_master_nodes: ["es-node1","es-node2","es-node3"]
discovery.seed_hosts: ["10.20.0.11","10.20.0.12","10.20.0.13"]
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.keystore.path: certs/${node.name}.p12
xpack.security.transport.ssl.truststore.path: certs/${node.name}.p12
节点es-node2:
cluster.name: my-elastic
node.name: es-node2
bootstrap.memory_lock: true
network.host: 10.20.0.12
cluster.initial_master_nodes: ["es-node1","es-node2","es-node3"]
discovery.seed_hosts: ["10.20.0.11","10.20.0.12","10.20.0.13"]
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.keystore.path: certs/${node.name}.p12
xpack.security.transport.ssl.truststore.path: certs/${node.name}.p12
节点es-node3:
cluster.name: my-elastic
node.name: es-node3
bootstrap.memory_lock: true
network.host: 10.20.0.13
cluster.initial_master_nodes: ["es-node1","es-node2","es-node3"]
discovery.seed_hosts: ["10.20.0.11","10.20.0.12","10.20.0.13"]xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.keystore.path: certs/${node.name}.p12
xpack.security.transport.ssl.truststore.path: certs/${node.name}.p12
4)将两个新节点的PKCS#12 证书口令存储在Elasticsearch Keystore中
./bin/elasticsearch-keystore create
./bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
./bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
- 根据提示,将节点证书的密码信息es-node123保存到es密钥库中
5)依次启动三个节点上的es服务
./bin/elasticsearch
- 注意观察日志输出
启动kibana,在dev tools
中执行GET _cluster/health
查看集群健康状态。
执行 GET _cat/nodes?v
查看master node角色分布:
快捷链接:
- Step by step怎样部署一套生产环境下的elastic stack 7.2技术栈【一】—— 需要掌握的一些elastic重要概念与配置参数
- Step by step怎样部署一套生产环境下的elastic stack 7.2技术栈【二】—— 操作系统的初始化配置
- Step by step怎样部署一套生产环境下的elastic stack 7.2技术栈【三】—— 部署单机版本的elasticsearch技术栈
- Step by step怎样部署一套生产环境下的elastic stack 7.2技术栈【四】—— 在单机版es技术栈之上启用和配置es安全管理功能
- Step by step怎样部署一套生产环境下的elastic stack 7.2技术栈【五】—— 向es集群中增加更多节点并配置节点间的加密通信
- Step by step怎样部署一套生产环境下的elastic stack 7.2技术栈【六】——启用Kibana中的安全性配置
- Step by step怎样部署一套生产环境下的elastic stack 7.2技术栈【七】——启用Metricbeat的安全性配置
本节配置参考资料: