Docker中Elastic Agent作为Fleet Server启动失败:无权限获取令牌
问题解答
核心结论
不行,Fleet Server的运行必须依赖Elastic的安全模块(xpack.security),哪怕是本地无许可证的开发环境,也无法在完全禁用xpack.security的情况下启动Fleet Server——因为Fleet Server需要Kibana生成并签发的安全令牌来完成身份验证和通信,而令牌的生成和管理是xpack.security的核心功能之一。
适配本地开发的自动化配置方案
既然本地需要频繁通过docker-compose重建环境,我们可以通过配置环境变量和容器参数,让整个流程完全自动化,不需要开发者手动创建令牌或执行额外步骤:
修改Elasticsearch和Kibana的docker配置
- 在Elasticsearch的
docker-compose配置中,启用xpack.security并设置固定开发密码(避免每次重建生成随机密码):elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:8.XX.X environment: - discovery.type=single-node - xpack.security.enabled=true - ELASTIC_PASSWORD=dev123456 # 固定开发密码,可自行修改 ports: - "9201:9200" # 端口偏移1位,对应需求 volumes: - es-data:/usr/share/elasticsearch/data - 在Kibana的配置中,启用xpack.security和Fleet功能,并配置Elasticsearch的认证信息:
kibana: image: docker.elastic.co/kibana/kibana:8.XX.X environment: - ELASTICSEARCH_HOSTS=http://elasticsearch:9200 - ELASTICSEARCH_USERNAME=elastic - ELASTICSEARCH_PASSWORD=dev123456 - xpack.security.enabled=true - xpack.fleet.enabled=true ports: - "5602:5601" # 端口偏移1位 depends_on: - elasticsearch
- 在Elasticsearch的
配置Elastic Agent作为Fleet Server
在docker-compose中添加Elastic Agent服务,通过环境变量自动完成Fleet Server的初始化和令牌生成:fleet-server: image: docker.elastic.co/beats/elastic-agent:8.XX.X environment: - FLEET_SERVER_ENABLE=true - FLEET_SERVER_ELASTICSEARCH_HOST=http://elasticsearch:9200 - FLEET_SERVER_ELASTICSEARCH_USERNAME=elastic - FLEET_SERVER_ELASTICSEARCH_PASSWORD=dev123456 - FLEET_SERVER_SETUP=true # 自动完成Fleet Server的初始化,包括创建令牌 - FLEET_SERVER_PORT=8221 # 端口偏移1位 - KIBANA_HOST=http://kibana:5601 - KIBANA_USERNAME=elastic - KIBANA_PASSWORD=dev123456 ports: - "8221:8221" depends_on: - elasticsearch - kibana
补充说明
- 上述配置中使用的固定密码仅适合本地开发环境,生产环境请勿使用。
- 端口偏移设置已对应需求,确保Elastic 7和8版本的服务端口不冲突。
- 启用xpack.security后,本地访问Kibana需要使用配置的
elastic账号和密码登录,但整个流程可通过docker-compose配置完全自动化,无需开发者手动介入。
内容的提问来源于stack exchange,提问作者Frederik Struck-Schøning
相关产品推荐
相关产品推荐

