Kubernetes + ELK:将kibana连接到elasticsearch服务

时间:2019-03-09 03:24:10

标签: elasticsearch kubernetes kibana

我有Elasticsearch POD + SERVICE和Kibana POD + SERVICE。我正在尝试将Kibana POD连接到Elasticsearch服务,但出现连接错误。

这是我的Kibaba POD yaml:

apiVersion: v1
kind: Pod
metadata:
  name: kibana
  labels:
    app: kibana
spec:
  ports:
  containers:
  - name: kibana
    image: kibana:6.6.1
    command: ["/bin/sh"]
    args: ["-c", "bin/kibana --elasticsearch.url='elasticsearch-service:9200'"]

我收到以下错误:

 FATAL  ValidationError: child "elasticsearch" fails because [child "hosts" fails because [single value of "hosts" fails because ["hosts" must be a valid uri with a scheme matching the http|https pattern]]]

据我了解,我得到了错误,因为elasticsearch.url不是以http / https开头。因此,我尝试运行args: ["-c", "bin/kibana --elasticsearch.url='http://elasticsearch-service:9200'"],但同时也出现连接错误(我认为是因为服务不应该用http / https指向)。

这是elasticsearch服务的名称(效果很好):

apiVersion: v1
kind: Service
metadata:
  name: elasticsearch-service
spec:
  ports:
  - port: 9200
    name: serving
    protocol: TCP
  - port: 9300
    name: node2node
    protocol: TCP
  selector:
    app: elasticsearch

使用其他POD,我可以连接elasticsearch-service:9200,但是Kibana要求使用http / https。如何使它们连接?

4 个答案:

答案 0 :(得分:1)

我设法通过添加以下内容来修复它:

env:
  - name: ELASTICSEARCH_URL
    value: "http://elasticsearch-service:9200"
  - name: ELASTICSEARCH_PORT
    value: "9200"
  - name: SERVER_BASEPATH
    value: /api/v1/namespaces/default/services/kibana-service:5601/proxy
  - name: SERVER_HOST
    value: "0.0.0.0"

真正解决的是SERVER_BASEPATH env。

答案 1 :(得分:0)

您能从Kibana pod获得弹性搜索服务吗? 删除Elasticsearch服务周围的一个。不需要。

答案 2 :(得分:0)

摘自官方文档docs

docker-compose版本为:

version: '2'
services:
  kibana:
    image: docker.elastic.co/kibana/kibana:6.6.1
    environment:
      SERVER_NAME: kibana.example.org
      ELASTICSEARCH_HOSTS: http://elasticsearch.example.org

您只需手动或使用kompose工具将其转换为kubernetes服务并运行它即可。

或者您可以尝试将env变量插入现有文件,然后从ur命令中删除elasticsearch url选项。

ELASTICSEARCH_HOSTS: http://elasticsearch.example.org

或者,如果您只是将elasticsearch服务命名为elasticsearch,则该服务应该可以正常运行,因为默认值为:

http://elasticsearch:9200

使用您现有服务名称的示例:

apiVersion: v1
kind: Pod
metadata:
  name: kibana
  labels:
    app: kibana
spec:
  ports:
  containers:
  - name: kibana
    image: docker.elastic.co/kibana/kibana:6.6.1
    env:
    - name: ELASTICSEARCH_HOSTS
      value: "http://elasticsearch-service:9200"

答案 3 :(得分:-1)

请勿使用开关--elasticsearch.url,而应使用环境变量ELASTICSEARCH_URL。

apiVersion: v1
kind: Pod
metadata:
  name: kibana
  labels:
    app: kibana
spec:
  ports:
  containers:
  - name: kibana
    image: kibana:6.6.1
    command: ["/bin/sh"]
    args: ["-c", "bin/kibana"]
    env:
    - name: ELASTICSEARCH_URL
      value: "http://elasticsearch-service:9200"

我也建议您,在另一个线程中阅读here,以获得更详细的k8s DNS解释。