Docker部署OpenSearch 1.0.0 Python客户端无SSL连接报错修复
OpenSearch v1.0.0 官方Docker镜像默认在9200端口启用HTTPS协议,你的Python客户端代码配置了use_ssl = False,会使用明文HTTP发起请求。服务端收到不符合TLS握手规则的明文请求时会直接断开连接,触发Remote end closed connection without response报错。
你测试用的curl命令明确指定了https://协议前缀,因此可以正常返回结果,说明故障本质是客户端通信协议和服务端配置不匹配,和服务未启动、端口未监听导致的连接拒绝问题完全无关。
二选一即可,根据自身使用场景选择:
方案1:保留服务端默认HTTPS配置(和现有curl测试逻辑一致,无需重建容器)
修改客户端初始化参数,将use_ssl取值改为True,其余跳过证书校验的配置保持不变即可,修改后的客户端初始化代码如下:client = OpenSearch( hosts = [{'host': host, 'port': port}], http_compress = True, http_auth = auth, use_ssl = True, # 开启SSL,匹配服务端HTTPS协议 verify_certs = False, ssl_assert_hostname = False, ssl_show_warn = False, )修改后直接运行原有代码即可正常完成索引创建操作。
方案2:关闭容器端HTTPS,使用纯HTTP通信
如果你不需要传输层加密,需要调整Docker启动命令,追加关闭HTTP层SSL的环境变量后重新创建容器:docker run -p 9200:9200 -p 9600:9600 \ -e "discovery.type=single-node" \ -e "plugins.security.ssl.http.enabled=false" \ opensearchproject/opensearch:1.0.0容器启动完成后,你原有写的
use_ssl = False的Python代码可直接连接,对应的curl测试命令也需要将前缀改为http://才能正常访问。
配置修改完成后运行代码,会正常返回索引创建的JSON响应,不会再抛出连接断开类错误。排查时注意区分协议不匹配错误和端口不通的Connection refused错误:前者端口可正常连通,仅因协议不符被服务端主动断连,后者是端口无进程监听直接返回拒绝响应。
内容的提问来源于stack exchange,提问作者Kavindu Ravishka

