ElasticSearch docker集群部署报错:
报错内容:Transport SSL must be enabled if security is enabled on a [ basic ] license . Please set [ xpack . security . transport.ssl.cn abled ] to [ true ] or disable security by setting [ xpack . security . enabled ] to [ false ]

翻译过来就是:“如果在 Basic 许可证级别上启用了安全功能,则必须启用传输层 SSL。请将 xpack.security.transport.ssl.enabled 设置为 true,或者通过将 xpack.security.enabled 设置为 false 来禁用安全功能。”
简单来说,Elasticsearch 有两个主要的通信层面:
HTTP 层 (端口 9200): 用于客户端(比如 Kibana、你的应用程序)与 Elasticsearch 之间的通信。
传输层 (Transport Layer, 默认端口 9300): 用于 Elasticsearch 集群内部节点之间的通信,例如数据同步、主节点选举等。
通过 xpack.security.enabled=true 开启了安全功能(如用户名密码认证),但是没有为节点间的内部通信(传输层)配置 SSL/TLS 加密。从 Elasticsearch 7.x 的某个版本开始,当使用免费的 Basic 许可证时,如果开启了安全功能,出于安全考虑,官方强制要求节点间的通信也必须加密。
解决方案:
方案一:
(最简单的就是把xpack.security.enabled=true设置为false)
方案二:
为传输层启用 SSL/TLS
# 创建证书目录
mkdir -p /home/es/certs
sudo chown 1000:1000 /home/es/certs
# 生成证书,用于es集群间通信(注意我使用的是我本地镜像离线生成的证书,你需要把你的情况和我的解决方式发给AI,让AI帮你生成证书命令)
docker run \
--rm \
-v "/home/es/certs:/certs" \
-u "1000:1000" \
elasticsearch-ik:7.17.27 \
/bin/bash -c "elasticsearch-certutil ca --out /certs/elastic-stack-ca.p12 --pass '' --days 36525 && \
elasticsearch-certutil cert --ca /certs/elastic-stack-ca.p12 --ca-pass '' --out /certs/elastic-certificates.p12 --pass '' --days 36525"
注意:本证书有效期100年,仅供学习和测试使用
# 证书创建成功会有两个文件在目录:/home/es/certs/
elastic-certificates.p12 elastic-stack-ca.p12
docker-compose.yml中增加目录映射配置:
# --- 新增的 SSL 配置 ---
- xpack.security.transport.ssl.enabled=true
- xpack.security.transport.ssl.verification_mode=certificate
- xpack.security.transport.ssl.keystore.path=/usr/share/elasticsearch/config/certs/elastic-certificates.p12
- xpack.security.transport.ssl.truststore.path=/usr/share/elasticsearch/config/certs/elastic-certificates.p12
# ----------------------
完整如下:(注意es镜像为我自己打包的内含ik分词器的镜像)
version: '3.8'
services:
elasticsearch1:
image: elasticsearch-ik:7.17.27
container_name: es-node1
environment:
- cluster.name=auth-cluster
- node.name=node-1
- discovery.seed_hosts=es-node1,es-node2
- cluster.initial_master_nodes=node-1,node-2
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms2g -Xmx2g"
- xpack.security.enabled=true
- ELASTIC_PASSWORD=123456
- xpack.security.transport.ssl.enabled=true
- xpack.security.transport.ssl.verification_mode=certificate
- xpack.security.transport.ssl.keystore.path=/usr/share/elasticsearch/config/certs/elastic-certificates.p12
- xpack.security.transport.ssl.truststore.path=/usr/share/elasticsearch/config/certs/elastic-certificates.p12
- ingest.geoip.downloader.enabled=false
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- /home/es/node1/data:/usr/share/elasticsearch/data
- /home/es/certs:/usr/share/elasticsearch/config/certs
ports:
- 9200:9200
networks:
- es-net
elasticsearch2:
image: elasticsearch-ik:7.17.27
container_name: es-node2
environment:
- cluster.name=auth-cluster
- node.name=node-2
- discovery.seed_hosts=es-node1,es-node2
- cluster.initial_master_nodes=node-1,node-2
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms2g -Xmx2g"
- xpack.security.enabled=true
- ELASTIC_PASSWORD=123456
- xpack.security.transport.ssl.enabled=true
- xpack.security.transport.ssl.verification_mode=certificate
- xpack.security.transport.ssl.keystore.path=/usr/share/elasticsearch/config/certs/elastic-certificates.p12
- xpack.security.transport.ssl.truststore.path=/usr/share/elasticsearch/config/certs/elastic-certificates.p12
- ingest.geoip.downloader.enabled=false
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- /home/es/node2/data:/usr/share/elasticsearch/data
- /home/es/certs:/usr/share/elasticsearch/config/certs
ports:
- 9201:9200
networks:
- es-net
depends_on:
- elasticsearch1
kibana:
image: kibana:7.17.27
container_name: kibana
environment:
- ELASTICSEARCH_HOSTS=http://es-node1:9200
- ELASTICSEARCH_USERNAME=elastic
- ELASTICSEARCH_PASSWORD=123456
- ELASTICSEARCH_SSL_VERIFICATIONMODE=none
ports:
- 5601:5601
networks:
- es-net
depends_on:
- elasticsearch1
networks:
es-net:
driver: bridge
# 判断elasticsearch能正常使用:
# 执行命令curl -u elastic:123456 http://localhost:9200
# 最后一行输出: "You Know, for Search",代表安装成功
root@dfserver:/home/es/certs# curl -u elastic:123456 http://localhost:9200
{
"name" : "node-1",
"cluster_name" : "auth-cluster",
"cluster_uuid" : "lFwiA7KURJyjdjvnYPzgUg",
"version" : {
"number" : "7.17.27",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "0f88dde84795b30ca0d2c0c4796643ec5938aeb5",
"build_date" : "2025-01-09T14:09:01.578835424Z",
"build_snapshot" : false,
"lucene_version" : "8.11.3",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
#查看elasticsearch证书有效期:
docker exec -it es-node1 /usr/share/elasticsearch/jdk/bin/keytool -list -v -keystore /usr/share/elasticsearch/config/certs/elastic-certificates.p12 -storetype PKCS12 -storepass ""
结果:Valid from:这一行后面就是到期时间
更多推荐
所有评论(0)