You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ElasticSearch三节点集群SSL(curl)连接错误排查求助

Elasticsearch集群主节点SSL握手失败排查方案

问题背景

通过docker-compose搭建3节点ElasticSearch集群后,主节点es11执行curl -X GET 'https://localhost:9316'时报错curl: (35) Encountered end of file,浏览器访问该地址也失败,但相同命令在es12、es13节点可正常执行。

日志显示握手失败错误:

"stacktrace": ["org.elasticsearch.transport.RemoteTransportException: [es13][SOMEIP:9316][internal:cluster/coordination/join]",
"Caused by: org.elasticsearch.transport.ConnectTransportException: [es11][SOMEIP:9316] handshake failed. unexpected remote node {es13}{SOMEVALUE}{SOMEVALUE
"at org.elasticsearch.transport.TransportService.lambda$connectionValidator$6(TransportService.java:468) ~[elasticsearch-7.17.6.jar:7.17.6]",
"at org.elasticsearch.action.ActionListener$MappedActionListener.onResponse(ActionListener.java:95) ~[elasticsearch-7.17.6.jar:7.17.6]",
"at org.elasticsearch.transport.TransportService.lambda$handshake$9(TransportService.java:577) ~[elasticsearch-7.17.6.jar:7.17.6]",

相关配置信息

elasticsearch.yml配置

cluster.name: "docker-cluster"
network.host: 0.0.0.0

所有节点docker-compose.yml端口配置

environment:
      - node.name=es11
      - transport.port=9316
ports:
      - 9216:9200
      - 9316:9316

集群搭建执行步骤

  1. 在ES11执行docker swarm init,将es12、es13加入swarm集群
  2. 创建overlay网络:docker network create -d overlay --attachable elastic
  3. 按需停止集群并删除卷:docker-compose down -v
  4. 创建SSL证书:docker-compose -f create-certs.yml run --rm create_certs
  5. 复制证书到es12、es13服务器
  6. 在es12、es13用busybox创建overlay网络:sudo docker run -itd --name containerX --net [network name] busybox
  7. 在es12、es13配置证书:docker-compose -f config-certs.yml run --rm config_certs
  8. 各服务器执行docker-compose up -d启动集群
  9. 配置内置账户密码:进入es11容器docker exec -it es11 sh,运行bin/elasticsearch-setup-passwords interactive --url localhost:9316

SSL证书问题排查思路

1. 检查证书文件完整性与权限

  • 进入es11容器,查看证书目录(通常为/usr/share/elasticsearch/config/certs)下的文件,对比es12/es13的证书文件,确认文件名、文件大小完全一致,无缺失或损坏
  • 执行ls -l /usr/share/elasticsearch/config/certs检查权限,确保Elasticsearch默认用户elasticsearch对证书文件拥有读权限

2. 验证证书有效性

  • 在es11容器内用openssl工具验证证书格式与内容:
    openssl x509 -in /usr/share/elasticsearch/config/certs/elasticsearch.crt -text -noout
    
    重点检查证书有效期、CN名称是否匹配节点配置,确认无格式错误

3. 核对SSL相关配置参数

  • 检查es11的elasticsearch.yml是否完整配置SSL参数(当前提供的配置未包含,需补充检查),示例正确配置如下:
    xpack.security.transport.ssl.enabled: true
    xpack.security.transport.ssl.verification_mode: certificate
    xpack.security.transport.ssl.key: certs/elasticsearch.key
    xpack.security.transport.ssl.certificate: certs/elasticsearch.crt
    xpack.security.transport.ssl.certificate_authorities: certs/ca.crt
    
    确保配置中的文件路径、文件名与实际证书完全一致,避免拼写错误

4. 检查端口与网络连通性

  • 宿主机执行netstat -tulpn | grep 9316,确认9316端口被Elasticsearch进程正常占用
  • 容器内执行ss -tulpn | grep 9316,确认容器内部端口监听正常
  • 在es11容器内ping es12/es13的容器名称,验证swarm overlay网络连通性

5. 提取完整日志细节

  • 获取es11节点的完整Elasticsearch日志,查找SSL握手失败的具体原因(如CA证书不匹配、证书信任链缺失等)

重新生成证书的注意事项

重新执行步骤4创建SSL证书后,必须再次将新证书复制到es12、es13服务器,并重新执行步骤7的证书配置操作。因为Elasticsearch节点间通信依赖同一CA签发的证书,新生成的证书(含CA证书)与旧证书不一致时,其他节点会因无法验证证书导致握手失败。

内容的提问来源于stack exchange,提问作者Boodle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 12:20:30