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

GitLab CI中Elasticsearch 8.0.0连接被拒问题求助

Elasticsearch 8.x在GitLab CI及本地连接被拒的解决思路

问题根源

Elasticsearch 8.x版本默认强制开启了HTTPS访问和内置用户身份验证,这是与7.x版本最核心的差异——你的配置仍在使用HTTP协议连接,且未提供身份验证信息,因此出现连接被拒和Protocol Connection Error。


方案一:测试环境临时禁用安全特性(快速解决集成测试)

如果只是为了跑通集成测试,可临时关闭Elasticsearch的安全验证,恢复7.x的无安全配置模式。修改GitLab CI中Elasticsearch服务的启动命令,添加禁用安全特性的参数:

lint_and_test:
  stage: test
  services:
    - postgis/postgis:14-3.4
    - name: elasticsearch:8.0.0
      command:
        - /bin/bash
        - -c
        - echo -Xms256m >> /usr/share/elasticsearch/config/jvm.options && echo -Xmx256m >> /usr/share/elasticsearch/config/jvm.options && /usr/local/bin/docker-entrypoint.sh elasticsearch -Ediscovery.type=single-node -E xpack.security.enabled=false -E xpack.security.http.ssl.enabled=false
  tags:
    - healthcloud-multi
  script:
    - timeout 60 bash wait_for_service_up.sh elasticsearch:9200 || false
    - curl "http://elasticsearch:9200/_cat/health"

关键修改说明:

  • 添加-E xpack.security.enabled=false:关闭所有安全特性(包括身份验证)
  • 添加-E xpack.security.http.ssl.enabled=false:关闭HTTPS,恢复HTTP访问

方案二:正确配置SSL与身份验证(规范做法)

若需模拟生产环境的安全配置,需完成以下步骤:

1. 调整GitLab CI的Elasticsearch服务配置

启动时设置初始密码,并保留安全特性:

lint_and_test:
  stage: test
  services:
    - postgis/postgis:14-3.4
    - name: elasticsearch:8.0.0
      command:
        - /bin/bash
        - -c
        - echo -Xms256m >> /usr/share/elasticsearch/config/jvm.options && echo -Xmx256m >> /usr/share/elasticsearch/config/jvm.options && /usr/local/bin/docker-entrypoint.sh elasticsearch -Ediscovery.type=single-node
      environment:
        - ELASTIC_PASSWORD=your_test_password  # 设置测试用初始密码
  tags:
    - healthcloud-multi
  script:
    # 等待Elasticsearch启动(注意此时是HTTPS端口9200)
    - timeout 60 bash wait_for_service_up.sh elasticsearch:9200 https || false
    # 从容器中复制自动生成的CA证书到本地
    - docker cp $(docker ps -qf "name=elasticsearch"):/usr/share/elasticsearch/config/certs/http_ca.crt ./http_ca.crt
    # 使用HTTPS+身份验证访问
    - curl --cacert http_ca.crt -u elastic:your_test_password "https://elasticsearch:9200/_cat/health"

2. 测试代码适配配置

在你的集成测试代码中,需要:

  • 使用https://elasticsearch:9200作为连接地址
  • 加载http_ca.crt证书以信任Elasticsearch的SSL证书
  • 配置用户名(默认elastic)和密码(即你设置的your_test_password)

本地运行的解决办法

本地环境的问题与CI一致,可参考上述两种方案:

  • 临时禁用安全特性:启动容器时添加参数-e xpack.security.enabled=false -e xpack.security.http.ssl.enabled=false
  • 规范配置:启动容器时设置ELASTIC_PASSWORD,复制容器内的http_ca.crt到本地项目,在测试代码中配置HTTPS连接和身份验证

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 20:35:22