Docker部署Elasticsearch与Kibana遇HTTPS通道HTTP流量警告求助
问题背景
Docker部署Elasticsearch与Kibana服务启动后,Elasticsearch日志持续出现以下警告:
{"@timestamp":"2023-01-04T14:04:50.865Z", "log.level": "WARN", "message":"received plaintext http traffic on an https channel, closing connection Netty4HttpChannel{localAddress=/172.29.0.2:9200, remoteAddress=/172.29.0.6:55870}", "ecs.version": "1.2.0","service.name":"ES_ECS","event.dataset":"elasticsearch.server","process.thread.name":"elasticsearch[ad8fe576ac58][transport_worker][T#2]","log.logger":"org.elasticsearch.xpack.security.transport.netty4.SecurityNetty4HttpServerTransport","elasticsearch.cluster.uuid":"QDf3uC44Trqpc3FHqBuXtA","elasticsearch.node.id":"3NryPkn_R1q0n9vi7WozQw","elasticsearch.node.name":"ad8fe576ac58","elasticsearch.cluster.name":"docker-cluster"}
已尝试将所有HTTP配置替换为HTTPS,问题依旧;同一代码库在其他服务器可正常运行,配置来自Loggings仓库。
排查方向与解决步骤
1. 检查Elasticsearch的端口与协议绑定
- 打开
elasticsearch.yml,确认xpack.security.http.ssl.enabled设为true时,是否存在端口冲突:- 避免
http.port和xpack.security.http.ssl.port同时绑定到9200端口,若启用HTTPS,建议关闭http.port配置,或为HTTP分配其他端口 - 确保
xpack.security.http.ssl.port明确指向HTTPS监听端口(比如9200)
- 避免
2. 核对客户端的连接配置
- 检查Kibana的
kibana.yml,确认elasticsearch.hosts以https://开头,且端口与ES的HTTPS端口匹配 - 排查容器网络内的其他服务(如日志采集器、监控工具),确认这些服务的ES连接地址已全部改为HTTPS,避免仍有明文请求发送到9200端口
3. 定位发起明文请求的来源
- 警告中的远程地址为容器内网IP(如
172.29.0.4),执行docker inspect <容器ID/名称>,匹配该IP对应的容器,确认是哪个服务在发起HTTP请求 - 检查该服务的配置文件,修正ES连接协议为HTTPS
4. 验证SSL证书配置有效性
- 确认
elasticsearch.yml中xpack.security.http.ssl.certificate、xpack.security.http.ssl.key的路径在容器内正确,证书文件存在且权限正常 - 检查证书是否与ES节点名称/IP匹配,避免因证书不匹配导致客户端降级为HTTP请求
5. 对比正常服务器的环境差异
- 核对两台服务器的Docker、Docker Compose版本是否一致
- 检查容器网络配置(如自定义网络模式、桥接规则)是否存在差异
- 确认服务器防火墙、SELinux/AppArmor规则是否影响了端口的协议监听
内容的提问来源于stack exchange,提问作者IDev

