Elasticsearch-Kibana docker-compose - 禁止使用“elastic”值

问题描述 投票:0回答:2

我想使用 docker-compose 运行 elasticsearch 和 kibana。 这是我的 docker-compose.yml,我使用 docker-compose --env-file dev.env up 运行

Docker 组合

version: '3.1'

services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.1.1
    container_name: elasticsearch
    environment:
      - cluster.name=elasticsearch-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - discovery.type=single-node
      - xpack.security.enrollment.enabled=true
      - ELASTICSEARCH_USERNAME=${ELASTICSEARCH_USERNAME}
      - ELASTICSEARCH_PASSWORD=${ELASTICSEARCH_PASSWORD}
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - esdata:/usr/share/elasticsearch/data
    ports:
      - "9200:9200"
      - "9300:9300"
    networks:
      - esnet
  kibana:
    image: docker.elastic.co/kibana/kibana:8.1.1
    container_name: kibana
    environment:
      - ELASTICSEARCH_HOSTS=${ELASTICSEARCH_HOSTS}
      - ELASTICSEARCH_USERNAME=${ELASTICSEARCH_USERNAME}
      - ELASTICSEARCH_PASSWORD=${ELASTICSEARCH_PASSWORD}
      - xpack.security.enabled=true
    depends_on:
      - elasticsearch
    ports:
      - "5601:5601"
    networks:
      - esnet

volumes:
  esdata:
    driver: local
  postgres-data:
    driver: local

networks:
  esnet:

堆栈跟踪

Error: [config validation of [elasticsearch].username]: value of "elastic" is forbidden. This is a superuser account that cannot write to system indices that Kibana needs to function. Use a service account token instead

我设法为用户 elastic/kibana 创建服务帐户令牌,但如何将其设置为 docker-compose?我应该使用特定的环境变量吗? 或者有没有办法让它在不使用服务帐户的情况下工作?

docker elasticsearch docker-compose kibana
2个回答
4
投票

我偶然发现了同样的问题,并尝试使用

kibana_admin
kibana_system
内置用户,但这也不起作用。也许您可以为这些用户设置密码,但我无法做到。
elastic
用户角色不允许拥有 Kibana 所需的
system-index write-access
。这是基于 Elastic 的更改(Pullrequest 的链接)。

您应该使用服务帐户的文档中所述的服务帐户。 显然,根据有关创建服务帐户令牌的docs,您必须以某种方式创建 Elasticsearch 容器并在启动 Kibana 容器之前创建令牌。 Elasticsearch forums 上也对此进行了讨论。

降级并使用以前的 ELK 版本也是一种可能性,我就是这样做的,因为我只需要集群进行本地开发。


0
投票

我设法在我的 docker-compose 中为 Kibana 设置服务帐户令牌,如下所示:

version: '3.6'
services:
 Elasticsearch:
   image: elasticsearch:8.10.2
   container_name: elasticsearch
   restart: always
   volumes:
   - elastic_data:/usr/share/elasticsearch/data/
   environment:
     ES_JAVA_OPTS: "-Xmx256m -Xms256m"
     discovery.type: single-node
     ELASTIC_PASSWORD: elastic123
   ports:
   - '9200:9200'
   - '9300:9300'
   networks:
     - elk

 Kibana:
   image: kibana:8.10.2
   container_name: kibana
   restart: always
   ports:
   - '5601:5601'
   environment:
     - ELASTICSEARCH_URL=http://elasticsearch:9200
     - ELASTICSEARCH_SERVICEACCOUNTTOKEN=myToken
   depends_on:
     - Elasticsearch
   networks:
     - elk
volumes:
 elastic_data: {}
networks:
 elk:

我还使用此命令为 kibana 创建服务帐户令牌:

curl -X POST -u elastic:elastic123 "localhost:9200/_security/service/elastic/kibana/credential/token/token1?pretty" 
© www.soinside.com 2019 - 2024. All rights reserved.