繁体   English   中英

kubernetes单模式无法连接elasticsearch和kibana

[英]Can't connect elasticsearch and kibana on kubernetes single mode

我尝试在 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, "message":"无法恢复连接:http://elasticsearch:9200/"}

问题:对 Kubernetes 来说,命名你的 pod elasticsearch 是不够的。

根据情况,您有几种解决方案来修复它:

  1. 按照Amityo 的建议创建服务。 如果 kibana 和 elasticsearch 在同一个命名空间中运行,这就足够了。

  2. 如果 kibana 和 elasticsearch 在不同的命名空间中运行,您需要使用完整的 DNS 名称来提供服务:elasticsearch.my-namespace.svc.cluster.local

  3. 如果您在同一个 pod 中运行 elasticsearch 和 kibana。 然后 localhost:9200 就足以能够查询了。

  4. 对于你现在的情况。 当elasticsearch 运行时,您可以使用 ELASTICSEARCH_URL pod DNS 名称:1-2-3-4.default.pod.cluster.local 当 1-2-3-4 是 pod 的 IP 地址时,点由破折号代替。

您可以在使用以下 YAML 为 elasticsearch 创建 Pod 定义时定义主机名:

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

您可以在此处在 kubernetes doc 上找到的所有信息

请注意:根据官方文档,Env 变量 ELASTICSEARCH_URL 在较新的 elasticsearch 版本中已弃用,更多详细信息请参见此处

在 kubernetes 中,pod 与服务通信。 您将需要定义一个服务来选择您的 pod(使用选择器)。

例如:

kind: Service
apiVersion: v1
metadata:
  name: elasticsearch
spec:
  selector:
    app: elasticsearch
  ports:
  - protocol: TCP
    port: 9200
    targetPort: 9200

在这里阅读更多关于服务和标签的信息

我们通常将 pod 定义为 yml 文件并在那里添加标签,但是如果您想使用kubectl run您可以使用-l添加标签

  -l, --labels='': Comma separated labels to apply to the pod(s). Will override previous values.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM