主机信息
主机配置4Core8GB硬盘大于80GB
主机名 | IP地址 | 角色 |
10-0-17-123 | 10.0.17.123 | es-node1 |
10-0-17-158 | 10.0.17.158 | es-node2 |
kibana-156 | 10.0.17.156 | kibana |
一、环境准备
1. 安装 Docker
这里就不介绍如何安装docker了,本文docker版本为20+
2. 主机名与网络与内核配置
在三台主机的 /etc/hosts
中添加:
10.0.17.123 10-0-17-123
10.0.17.158 10-0-17-158
10.0.17.156 kibana-156
在三台主机的/etc/sysctl.conf 添加
net.ipv4.ip_forward = 1
vm.max_map_count=262144
在 /etc/security/limits.conf 添加
* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096
最后执行 sysctl -p 生效。
3. 目录结构(在每台 ES 主机上都创建)
useradd elasticsearch
mkdir -p /opt/es/{data,config,certs}
chown -R elasticsearch:elasticsearch /opt/es
在 Kibana 主机上创建:
mkdir -p /opt/kibana/{config,certs}
chown -R elasticsearch:elasticsearch /opt/kibana
二、生成 CA 和节点/Kibana 证书
推荐在一台临时主机(或任一 ES 节点)上统一生成并分发证书。
1. 生成 CA
docker run --rm -v /opt/es/certs:/certs \docker.elastic.co/elasticsearch/elasticsearch:8.18.2 \elasticsearch-certutil ca --pem --out /certs/elastic-stack-ca.zip
# 解压
unzip /opt/es/certs/elastic-stack-ca.zip -d /opt/es/certs
2. 生成 ES 节点证书
在 /opt/es/certs/instances.yml
中写入:
instances:- name: "10-0-17-123"ip: ["10.0.17.123"]dns: ["10-0-17-123"]- name: "10-0-17-158"ip: ["10.0.17.158"]dns: ["10-0-17-158"]
然后执行:
docker run --rm -v /opt/es/certs:/certs \docker.elastic.co/elasticsearch/elasticsearch:8.18.2 \elasticsearch-certutil cert --in /certs/instances.yml \--ca-cert /certs/ca/ca.crt --ca-key /certs/ca/ca.key \--pem --out /certs/es-nodes.zip
解压:
unzip /opt/es/certs/es-nodes.zip -d /opt/es/certs
3. 生成 Kibana 客户端证书
mkdir /opt/kibana/chown -R elasticsearch:elasticsearch /opt/kibana/docker run --rm -v /opt/kibana/certs:/certs -v /opt/es/certs/ca:/ca \docker.elastic.co/elasticsearch/elasticsearch:8.18.2 \elasticsearch-certutil cert --name kibana --dns kibana-node --ip 10.0.0.156 \--ca-cert /ca/ca.crt --ca-key /ca/ca.key \--pem --out /certs/kibana.zip
# 解压
unzip /opt/kibana/certs/kibana.zip -d /opt/kibana/certs
说明:生成后,将
/opt/es/certs
下所有文件(ca.crt
、ca.key
、各节点证书和私钥)分发到两台 ES 主机的/opt/es/certs
;将 Kibana 证书和 CA 证书拷贝到 Kibana 主机的/opt/kibana/certs
。
三、配置 Elasticsearch
1. 编辑 /opt/es/config/elasticsearch.yml
在两台 ES 主机(10.0.0.123、10.0.0.158)上,编辑 /opt/es/config/elasticsearch.yml
:
[root@10-0-17-123 ~]# cat /opt/es/config/elasticsearch.yml
cluster.name: es-cluster
node.name: ${HOSTNAME}
network.host: 0.0.0.0node.roles: [ "master", "data", "ingest" ]discovery.seed_hosts:- "10.0.17.123"- "10.0.17.158"
cluster.initial_master_nodes:- "10-0-17-123"- "10-0-17-158"xpack.security.enabled: truexpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.key: certs/10-0-17-123/10-0-17-123.key
xpack.security.transport.ssl.certificate: certs/10-0-17-123/10-0-17-123.crt
xpack.security.transport.ssl.certificate_authorities: [ "certs/ca/ca.crt" ]xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.key: certs/10-0-17-123/10-0-17-123.key
xpack.security.http.ssl.certificate: certs/10-0-17-123/10-0-17-123.crt
xpack.security.http.ssl.certificate_authorities: [ "certs/ca/ca.crt" ]
在158机器也就是另外一台ES机器上面只需要将certs的主机名和文件的123替换为158即可,注意,这一步不能出错。
2. ES服务的目录结构
这是我自己ES服务的目录结构
[root@10-0-17-123 ~]# tree /opt/es/
/opt/es/
├── certs
│ ├── 10-0-17-123
│ │ ├── 10-0-17-123.crt
│ │ └── 10-0-17-123.key
│ ├── 10-0-17-158
│ │ ├── 10-0-17-158.crt
│ │ └── 10-0-17-158.key
│ ├── ca
│ │ ├── ca.crt
│ │ └── ca.key
│ └── instances.yml
├── config
│ └── elasticsearch.yml
四、使用 Docker CLI 启动 ES 容器
docker run -d \--name es-158 \--network host \-e ES_JAVA_OPTS="-Xms6g -Xmx6g" \-e ELASTIC_PASSWORD="Novacao666" \-v /opt/es/data:/usr/share/elasticsearch/data \-v /opt/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro \-v /opt/es/certs:/usr/share/elasticsearch/config/certs:ro \elasticsearch:8.18.2
在另外一台ES服务启动命令是一样的,唯一变化的地方是容器的name。可以自定义,但最好两个ES服务name不要一样。
提示:
ELASTIC_PASSWORD
:设置内置elastic
用户密码,用于 Kibana 认证。确保宿主机有足够的内存,并按需调整
ES_JAVA_OPTS
。最好不要低于1GB,如有报错那最好就是2GB以上。
五、配置与启动 Kibana
在 10.0.17.156 主机上,编辑 /opt/kibana/config/kibana.yml
:
[root@kibana-156 ~]# cat /opt/kibana/config/kibana.yml
server.name: kibana-node
server.host: "0.0.0.0"elasticsearch.hosts:- "https://10.0.17.123:9200"- "https://10.0.17.158:9200"# TLS 证书验证配置
elasticsearch.ssl.certificateAuthorities:- "/usr/share/kibana/config/certs/ca.crt"elasticsearch.ssl.certificate: "/usr/share/kibana/config/certs/kibana.crt"
elasticsearch.ssl.key: "/usr/share/kibana/config/certs/kibana.key"# 校验证书和主机名
elasticsearch.ssl.verificationMode: full
这里直接使用ES生成的CA证书认证,所有就不用使用ES的用户和密码认证啦~
1. kibana的目录结构
[root@kibana-156 ~]# tree /opt/kibana/
/opt/kibana/
├── certs
│ ├── ca.crt
│ ├── kibana.crt
│ └── kibana.key
└── config└── kibana.yml2 directories, 4 files
2. 启动kibana
docker run -d \--name kibana \--network host \-v /opt/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml:rw \-v /opt/kibana/certs:/usr/share/kibana/config/certs:ro \kibana:8.18.2
六、验证与后续
1. 验证集群健康
[root@10-0-17-123 config]# curl -k -u elastic:string@1307 https://10.0.17.123:9200/_cat/nodes
10.0.17.158 19 61 4 0.35 0.39 0.20 dim * 10-0-17-158
10.0.17.123 15 75 8 0.84 0.57 0.42 dim - 10-0-17-123
[root@10-0-17-123 config]# curl -k https://10.0.17.123:9200/_cluster/health?pretty -u elastic:string@1307
{"cluster_name" : "es-cluster","status" : "green","timed_out" : false,"number_of_nodes" : 2,"number_of_data_nodes" : 2,"active_primary_shards" : 3,"active_shards" : 6,"relocating_shards" : 0,"initializing_shards" : 0,"unassigned_shards" : 0,"unassigned_primary_shards" : 0,"delayed_unassigned_shards" : 0,"number_of_pending_tasks" : 0,"number_of_in_flight_fetch" : 0,"task_max_waiting_in_queue_millis" : 0,"active_shards_percent_as_number" : 100.0
}
2. 访问kibana
浏览器打开 https://10.0.17.156:5601
,使用 elastic
或 kibana_system
用户登录。
3. 持久化与备份
-
定期备份
/opt/es/data
-
监控节点资源(CPU、内存、磁盘 I/O)
至此,您已完成基于 Docker CLI 的 Elasticsearch 双节点集群与 Kibana 的 TLS 安全部署。如有自定义需求(如 X-Pack 高级功能、快照、监控等),可在此基础上继续扩展。祝部署顺利!