主机信息

        主机配置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.crtca.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.0

node.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: true

xpack.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.yml

2 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,使用 elastickibana_system 用户登录。 

3. 持久化与备份

  • 定期备份 /opt/es/data

  • 监控节点资源(CPU、内存、磁盘 I/O)

至此,您已完成基于 Docker CLI 的 Elasticsearch 双节点集群与 Kibana 的 TLS 安全部署。如有自定义需求(如 X-Pack 高级功能、快照、监控等),可在此基础上继续扩展。祝部署顺利!

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐