无法在Kubernetes单模上连接elasticsearch和kibana

时间:2019-03-02 10:41:58

标签: elasticsearch kubernetes 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还是很陌生,我不知道为什么他们不能彼此交谈。

2 个答案:

答案 0 :(得分:2)

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服务。

您可以找到所有here

的信息

答案 1 :(得分:1)

在kubernetes中,pod与Services通信。您将需要定义一个用于选择您的广告连播(带有选择器)的服务。

例如:

Address

详细了解服务here和标签here

我们通常将pod定义为yml文件,并在其中添加标签,但是如果您要使用kind: Service apiVersion: v1 metadata: name: elasticsearch spec: selector: app: elasticsearch ports: - protocol: TCP port: 9200 targetPort: 9200 ,则可以使用kubectl run添加标签

-l