W.P*_*ill 5 elasticsearch docker kibana docker-compose
我无法从 Docker 映像设置开发 Elasticsearch/Kibana 实例。我无法让 Kibana 服务连接到 Elasticsearch 服务。
我有以下docker-compose.yml文件。
services:
elasticsearch:
container_name: elasticsearch
image: docker.elastic.co/elasticsearch/elasticsearch:8.4.0
environment:
- discovery.type=single-node
- xpack.security.enabled=true
ports:
- "9200:9200"
kibana:
container_name: kibana
image: docker.elastic.co/kibana/kibana:8.4.0
environment:
- ELASTICSEARCH_URL=http://elasticsearch:9200
- xpack.security.enabled=true
ports:
- "5601:5601"
Run Code Online (Sandbox Code Playgroud)
我一开始没有创建和运行任何容器docker compose up。根据自动启用安全性启动 Elastic Stack中的说明,我期望看到以下内容:
A password is generated for the elastic user and output to the terminal, plus an enrollment token for enrolling Kibana.
Run Code Online (Sandbox Code Playgroud)
不生成密码。当我查看日志时,我从 Kibana 容器中看到以下内容。
[ERROR][elasticsearch-service] Unable to retrieve version information from Elasticsearch nodes. security_exception: [security_exception] Reason: missing authentication credentials for REST request [/_nodes?filter_path=nodes.*.version%2Cnodes.*.http.publish_address%2Cnodes.*.ip]
2022-08-27T03:18:39.927296590Z
Run Code Online (Sandbox Code Playgroud)
当我尝试通过连接到 Kiabana 时,http://localhost:5601我看到“Kibana 服务器尚未准备好”。永远不会消失的消息。
Elasticsearch 日志中没有错误。该服务似乎已正常启动。
在 Elasticsearch github 上,问题 #85047:新容器上未生成弹性用户密码也描述了密码未自动生成的情况。在这种情况下的解决方案是docker compose up在没有开关的情况下运行-d,这就是我已经在做的事情。
Elastic 讨论板上报告了类似的错误,但已通过“错误是我的 kibana.yml 不在配置目录中”解决。我的情况并非如此。
据我所说,我正在做与这篇博文中相同的事情。
我尝试了对docker-compose.yml文件的各种修改(例如替换ELASTICSEARCH_URL为ELASTICSEARCH_HOST或ELASTICSEARCH_HOSTS、添加elasticsearch.username=kibana_system到 Kibana 环境变量或指定ELASTIC_PASSWORD.)。我总是遇到同样的错误。(尽管如果我ELASTIC_PASSWORD=password在 Elasticsearch 容器中设置环境变量,我可以通过连接http://localhost:9200并验证 Elasticsearch 服务是否正在运行。)
在这失败之后,我尝试按照为Elasticsearch 设置最低安全性中的说明手动配置最低安全性,但遇到了同样的问题。
如果我elasticsearch-reset-password按照手册最低安全设置说明中的说明使用 to 设置密码kibana_system,password则从我的主机 shell 执行以下curl 命令
curl --user kibana_system -X GET "http://localhost:9200/?pretty"
Run Code Online (Sandbox Code Playgroud)
从 Elasticsearch 返回有效响应。我也可以找回
curl --user kibana_system -X GET "http://localhost:9200/_nodes?filter_path=nodes.*.version%2Cnodes.*.http.publish_address%2Cnodes.*.ip"
Run Code Online (Sandbox Code Playgroud)
Kibana 日志错误中提到的 URL。
显然,kibana_system用户是使用正确的密码创建的,但在 Kibana 启动期间没有正确使用该密码。
以下内容docker-compose.yml复制自此博客文章文件,有效。
services:
elasticsearch:
image: elasticsearch:2.4
ports:
- "9200:9200"
environment:
- discovery.type=single-node
kibana:
image: kibana:4.6
ports:
- "5601:5601"
environment:
- ELASTICSEARCH_URL=http://elasticsearch:9200
Run Code Online (Sandbox Code Playgroud)
我可以立即登录 Kibana,地址为http://localhost:5601。
据推测,2.4/4.6 版本已经足够老了,导致问题的安全功能尚未实现。
如果我从使用 Docker 安装 Elasticsearch说明复制文件,则版本为 8.4.0 。
我试图做的解决方案是在不启用安全性的情况下运行。
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.4.0
container_name: es-node01
ports:
- "9200:9200"
- "9300:9300"
environment:
- discovery.type=single-node
- xpack.security.enabled=false
- xpack.security.enrollment.enabled=false
kibana:
image: docker.elastic.co/kibana/kibana:8.4.0
container_name: kib-01
ports:
- "5601:5601"
Run Code Online (Sandbox Code Playgroud)
Elastic 讨论板上的这个帖子详细介绍了完整的答案。
总结一下,从8.0版本开始,Elastic默认开启安全性。在最简单的情况下,Elastic 还会为您设置安全配置,如使用 Docker 安装 Elasticsearch中所述。但是,如果您使用 Docker 撰写文件而不是直接运行命令,则此自动设置过程将不起作用docker run。原因很复杂,并在上面链接的线程中进行了讨论。
如果您想使用 Docker compose,您可以自己手动设置安全性或关闭安全性。
就我而言,我正在编写一次性概念证明,因此没有安全性也没关系。如果需要将某些东西投入生产,我将弄清楚如何手动设置安全性。
如果我知道将问题表述为“如何关闭 Elastic 8.0 及更高版本中的自动安全配置?” 答案很简单,但我必须找出答案才能意识到这才是要问的问题。
| 归档时间: |
|
| 查看次数: |
4042 次 |
| 最近记录: |