簡體   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