无法在Kubernetes单模上连接elasticsearch和kibana [英] Can't connect elasticsearch and kibana on kubernetes single mode

查看:159
本文介绍了无法在Kubernetes单模上连接elasticsearch和kibana的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试在kubernetes上运行elasticsearch和kibana.我跑了:

kubectl run elasticsearch --image=elasticsearch:6.6.1 --env="discovery.type=single-node" --port=9200 --port=9300
kubectl run kibana --image=kibana:6.6.1 --port=5601

然后我运行了$kubectl proxy

http://localhost:$IP_FROM_KUBECTL_PROXY(usually 8081)/api/v1/namespaces/default/pods/$POD_NAME/proxy/

当我进入elasticsearch pod时,一切看起来都很好,但是当我进入kibana时,该应用程序无法运行(我看到"Kibana服务器尚未准备就绪"以表示无限).

kibana的日志如下:

{"type":"log","@timestamp":"2019-03-02T10:38:47Z","tags":["warning","elasticsearch","admin"],"pid":1,"message":"No living connections"}
{"type":"log","@timestamp":"2019-03-02T10:38:49Z","tags":["warning","elasticsearch","admin"],"pid":1,"message":"Unable to revive connection: http://elasticsearch:9200/"}

这是kibana pod上的kibana.yml:

来自kibana-docker的默认Kibana配置.

server.name: kibana
server.host: "0"
elasticsearch.url: http://elasticsearch:9200
xpack.monitoring.ui.container.elasticsearch.enabled: true

我对Kubernetes很陌生,我不知道为什么他们不能彼此交谈.

解决方案

Kibana向您说明了什么问题:

{"type":"log","@ timestamp":"2019-03-02T10:38:49Z","tags":["warning","elasticsearch","admin"],"pid" :1,消息":无法恢复连接: http://elasticsearch:9200/"}

您的名字pod elasticsearch对于kubernetes来说是不够的.

您应该按照 Amitio 的说明进行服务.这就是kibana和elasticsearch在同一名称空间中运行的情况.

如果kibana和elasticsearch在不同的命名空间中运行,您将为服务写一个完整的DNS名称:elasticsearch.my-namespace.svc.cluster.local

如果您要在同一吊舱中运行elasticsearch和kibana.然后localhost:9200将可以查询.

根据您的情况.当Elasticsearch运行时,当1-2-3-4是Pod的IP地址时,您可以将其用作ELASTIVSEARCH_URL pod DNS名称:1-2-3-4.default.pod.cluster.local.

如果您在创建elasticsearch时使用主机名:

apiVersion: v1
kind: Pod
metadata:
  name: elasticsearch
  labels:
    name: elasticsearch-single
spec:
  hostname: elasticsearch
  subdomain: for-kibana
  containers:
  - image: elasticsearch:6.6.1
    name: elasticsearch

您将能够发送ELASTICSEARCH_URL pod DNS名称:elasticsearch.for-kibana.default.svc.cluster.local服务.

您可以在此处找到所有信息

I try to run elasticsearch and kibana on kubernetes. I ran:

kubectl run elasticsearch --image=elasticsearch:6.6.1 --env="discovery.type=single-node" --port=9200 --port=9300
kubectl run kibana --image=kibana:6.6.1 --port=5601

then I ran $kubectl proxy,

http://localhost:$IP_FROM_KUBECTL_PROXY(usually 8081)/api/v1/namespaces/default/pods/$POD_NAME/proxy/

When I entered to elasticsearch pod, everything looks fine, but when I entered to kibana, the app didn't work (I see "Kibana server is not ready yet" for infinity).

The logs of kibana are the following:

{"type":"log","@timestamp":"2019-03-02T10:38:47Z","tags":["warning","elasticsearch","admin"],"pid":1,"message":"No living connections"}
{"type":"log","@timestamp":"2019-03-02T10:38:49Z","tags":["warning","elasticsearch","admin"],"pid":1,"message":"Unable to revive connection: http://elasticsearch:9200/"}

This is kibana.yml on kibana pod:

Default Kibana configuration from kibana-docker.

server.name: kibana
server.host: "0"
elasticsearch.url: http://elasticsearch:9200
xpack.monitoring.ui.container.elasticsearch.enabled: true

I'm pretty new with Kubernetes, and I can't figure out why they can't talk one to another.

解决方案

Kibana explains you what a problem:

{"type":"log","@timestamp":"2019-03-02T10:38:49Z","tags":["warning","elasticsearch","admin"],"pid":1,"message":"Unable to revive connection: http://elasticsearch:9200/"}

Name you pod elasticsearch is not enough for kubernetes.

You should make service as Amitio explain you. This is if kibana and elasticsearch running in the same namespace.

If kibana and elasticsearch running in different namespaces you'll write a full DNS name for service: elasticsearch.my-namespace.svc.cluster.local

If you'll run elasticsearch and kibana in the same pod. Then localhost:9200 will be able to query.

And for your situation. When elasticsearch is running you can use as ELASTIVSEARCH_URL pod DNS name: 1-2-3-4.default.pod.cluster.local when 1-2-3-4 is IP address of pod with dots replaced by dashes.

If you'll use hostname when you create elasticsearch:

apiVersion: v1
kind: Pod
metadata:
  name: elasticsearch
  labels:
    name: elasticsearch-single
spec:
  hostname: elasticsearch
  subdomain: for-kibana
  containers:
  - image: elasticsearch:6.6.1
    name: elasticsearch

You'll be able to send ELASTICSEARCH_URL pod DNS name: elasticsearch.for-kibana.default.svc.cluster.local service.

All information you can find here

这篇关于无法在Kubernetes单模上连接elasticsearch和kibana的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆