当前位置: 首页 > 知识库问答 >
问题:

如何在Kubernetes为Kibana设置入口

钱言
2023-03-14

我刚刚使用上的指南在我的Kubernetes集群上安装了一个EFK堆栈https://medium.com/@timfpark/efk-logging-on-kubernetes-on-azure-4c54402459c4

我在上的指南中指出,当通过代理访问它时,它可以工作

http://localhost:8001/api/v1/namespaces/kube-系统/服务/kibana日志记录/代理

然而,我希望它通过我现有的入口控制器工作,因此我使用下面的yaml创建了一个新的入口规则:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
  generation: 2
  labels:
    app: kibana
  name: kibana
  namespace: kube-system
spec:
  rules:
  - host: kibana.dev.example1.com
    http:
      paths:
      - backend:
          serviceName: kibana-logging
          servicePort: 5601
        path: /
status:
  loadBalancer:
    ingress:
    - {}

至我的服务,其运行方式为:

apiVersion: v1
kind: Service
metadata:
  labels:
    addonmanager.kubernetes.io/mode: Reconcile
    k8s-app: kibana-logging
    kubernetes.io/cluster-service: "true"
    kubernetes.io/name: Kibana
  name: kibana-logging
  namespace: kube-system
spec:
  clusterIP: X.X.195.49
  ports:
  - port: 5601
    protocol: TCP
    targetPort: ui
  selector:
    k8s-app: kibana-logging
  sessionAffinity: None
  type: ClusterIP
status:
  loadBalancer: {}

然而,当我尝试访问我的URL时:http://kibana.dev.example1.com

我得到了:{"statusCode": 404,"error":"未找到","消息":"未找到"}

如果我尝试访问:http://kibana.dev.example1.com/app/kibana#

我得到:“Kibana没有正确加载。请检查服务器输出以获取更多信息。”

在查看了Kibana吊舱和ingress吊舱的日志并比较了通过代理的成功请求和通过ingress的不成功请求之间的结果后,我可以看到。。。

用于打击/

"GET / HTTP/1.1" 200 197 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Safari/605.1.15" 491 0.003 [kube-system-kibana-logging-5601] X.X.22.204:5601 197 0.003 200 6101a7003003d34636d2012e53c23ca7
"GET /api/v1/namespaces/kube-system/services/kibana-logging/proxy/app/kibana HTTP/1.1" 404 85 "http://kibana.dev.example1.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Safari/605.1.15" 612 0.003 [kube-system-kibana-logging-5601] X.X.22.204:5601 85 0.003 404 5809ac2b33d3e23b200b13c9971d8520

打/app/kibana#

"GET /app HTTP/1.1" 404 85 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Safari/605.1.15" 470 0.003 [kube-system-kibana-logging-5601] X.X.22.204:5601 85 0.003 404 54a4abe0cae6d3d4298847a0db0786d6
"GET /app/kibana HTTP/1.1" 200 13301 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Safari/605.1.15" 477 0.041 [kube-system-kibana-logging-5601] X.X.22.204:5601 13272 0.040 200 6cb7e7698f5c72e0cd06b3408d8d4673
"GET /api/v1/namespaces/kube-system/services/kibana-logging/proxy/bundles/kibana.style.css?v=16627 HTTP/1.1" 404 85 "https://kibana.dev.example1.com/app/kibana" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Safari/605.1.15" 576 0.004 [kube-system-kibana-logging-5601] X.X.22.204:5601 85 0.004 404 0b825f03c36c2225ab082c2a0bab15f4

当通过代理访问时,这些请求中的大多数返回302而不是404。入口不能访问命名空间库贝-system中的这些URL吗?

我是否错过了一些明显的东西——可能是打错了Kibana的URL?我在谷歌上做了很多搜索,但找不到类似的东西。


共有2个答案

张智
2023-03-14

原来需要设置以下环境变量才能通过入口公开kibana:

在kibana deployment.yaml的env中添加以下内容:

        - name: ELASTICSEARCH_HOSTS
          value: "http://10.20.30.40:9200"
        - name: SERVER_BASEPATH
          value: "/kibana"
        - name: SERVER_REWRITEBASEPATH
          value: "true"
        - name: SERVER_PUBLICBASEURL
          value: "https://my.domain.com/kibana"

然后使用以下方法将其暴露在入口上:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  namespace: elastic
  name: gateway-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
    - host: my.domain.com
      http: 
        paths:
          - path: /kibana
            backend:
              serviceName: kibana
              servicePort: 5601
狄令
2023-03-14

原来问题出在kibana配置上。

在kibana部署yaml中,有一个名为SERVER\u BASEPATH的环境变量,该变量设置为指向kibana服务代理。这导致每次我尝试从外部访问endpoint时,URL都会被重写。

如果您注释掉这个变量及其值并重新部署kibana,那么只需点击入口地址即可。

例如http://kibana.dev.example1.com/

 类似资料:
  • 我是Kibana新手,将数据加载到Elastic 5.0.0-alpha3中,并使用Kibana5.0.0-alpha3进行可视化。我可以将一些数字字段显示为直方图,但当我想使用文本字段时,我会得到: 我被警告说数据(出版商的名字)可能已经被分析成子字段,但是我还是想显示。 如何设置< code>fielddata=true? 编辑:Kibana github上最近的问题表明这是5.0.0中的新功

  • Docker守护进程:/etc/systemd/system/docker.service.d/http-proxy.conf Docker客户机:/root/.Docker/config.json(尽管在CentOS上使用Docker V1.13.1时似乎不适用) Docker客户机:通过在创建时传递给豆荚的环境变量,在用于与kubectl一起运行它们的yaml文件中 Kubernetes主节点

  • 我是库伯内特人。我在Minikube中配置的整个设置。我不确定它是否与其他kubernetes设置有所不同。 我已经在我的设置中创建了一个POD,一个Spring Boot应用程序正在8080端口上运行,这个服务将在20080端口上向集群公开。 我正在运行tcpDum的集群内运行另一个pod。我需要在20080上转储撞击集群的HTTP数据包。请告诉我如何从tcpDumpod访问集群接口。 我尝试了

  • 我正在运行一个kubernetes集群,它由三个节点组成,工作出色,但现在是时候让我的Web应用程序安全了,所以我部署了一个入口控制器(traefik)。但是我找不到在上面设置https的说明。我知道我必须做的大部分事情,比如设置“秘密”(带有证书的容器)等,但我想知道如何配置我的入口控制器和与之相关的所有文件,以便我能够使用安全连接 我已经配置了入口控制器,并创建了一些前端和后端。此外,我还配置

  • 使用OpenID和KeyCloak的Kibana单点登录。我已经按照opendistro文档配置了该设置。https://opendistro.github.io/for-ellasticsearch-docs/docs/security-configuration/openid-connect/ docker-compose.yml keycloak-compose.yml kibana运行在l

  • 问题内容: 我已经设置了代码示例,但是无法使用serilog登录到带有验证的kibana。在这里,我已附上我的代码,请对其进行更正。 问题答案: 步骤1:安装此NuGet软件包“ Serilog.Sinks.Elasticsearch” 步骤2:在App.config或Web.config中添加它 步骤3:在main()的program.cs或Application_Start()的Global.