K8S NGINX入口反向代理规则Kibana等

3duebb1j  于 2023-06-20  发布在  Kibana
关注(0)|答案(3)|浏览(202)

我知道关于这个主题有很多问题,但到目前为止没有一个有帮助。第一个问题是我自己的理解。我已经在K8S中设置了一个Nginx Ingress Controller,现在正在尝试为Kibana集群服务添加入口规则,该服务在端口转发方面工作正常。
我根本无法让反向代理工作。我会欣赏两件事:

  1. K8S入口规则使其工作
    1.一个非常好的“傻瓜”指南,通过入口设置反向代理。我发现的大多数指南都是“这是一个RP,嘿,我们可以将/app 1重定向到/app 2...是不是很棒“他们真的没有任何细节,除了非常基本的。或者,它们是基于NGINF conf的,这不会以相同的方式Map到K8S入口规则
    发生的事情是,我可以让浏览器/kibana重定向到我的K8S服务,但然后Kibana回复它自己的重定向到/app/home,然后这个过程用404中断(而不是如果/kibana/app/home,因为它需要)。我不知道如何在入口规则中处理这个流--它不像重定向X到Y那么简单。
    我已经尝试了一些入口规则,但它基本上是无限的猴子,直到一些工作。我真的很想正确地理解它,但也希望能对这个具体问题做出回答。
    到目前为止进入
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: nginx-kibana
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  ingressClassName: nginx
  rules:
  - http:
      paths:
      - path: /kibana(/|$)(.*)
        pathType: Prefix
        backend:
          serviceName: elasticsearch-kibana
          servicePort: 5601

K8S 1.18.3
使用bitnami图表,我通过Helm在我的日志命名空间中创建了kibana(和ES):

helm install elasticsearch bitnami/elasticsearch --set sysctlImage.enabled=false,master.replicas=1,coordinating.replicas=1,data.replicas=1,ingest.replicas=1,global.kibanaEnabled=true -n logging

我的入口控制器也通过helm在我的入口命名空间

helm install ingress bitnami/nginx-ingress-controller  -n ingress

ingress规则应用于与kibana相同的日志命名空间

kubectl apply -f ingress-rules.yaml -n logging
70gysomp

70gysomp1#

我设法使它与server.basePath参数工作。
以下是docs对此的说法:
basePath使您能够指定在代理后运行时挂载Kibana的路径。使用server.rewriteBasePath设置来告诉Kibana是否应该从它收到的请求中删除basePath,并防止在启动时出现弃用警告。此设置不能以斜杠(/)结尾。
此外,由于您正在进行入口级别的重写,因此我还必须禁用rewriteBasePath(kibana 7和更老版本的默认值应该为false)。现在完整的配置如下所示:

kibana.yml: |
    pid.file: /opt/bitnami/kibana/tmp/kibana.pid
    server.host: "::"
    server.port: 5601
    elasticsearch.hosts: [http://elasticsearch-coordinating-only:9200]
    server.basePath: /kibana 
    server.rewriteBasePath: false

正如你在下面看到的,请求没有被重定向到/app/home,而是被重定向到/kibana/app/home,这正是我们想要的:

➜  curl $(minikube ip)/kibana -v      
*   Trying 192.168.49.2...
* TCP_NODELAY set
* Connected to 192.168.49.2 (192.168.49.2) port 80 (#0)
> GET /kibana HTTP/1.1
> Host: 192.168.49.2
---
< HTTP/1.1 302 Found
< Date: Mon, 22 Feb 2021 11:19:45 GMT
----
< location: /kibana/app/home
< kbn-name: elasticsearch-kibana-7f9f447b9c-mnxrs
----
vcirk6k6

vcirk6k62#

查找并更改文件kibana.yml

server.basePath:/您的/路径

kibana.yml: |
    server.basePath: /dashboards/kibana
    server.rewriteBasePath: true
    elasticsearch.hosts: http://elasticsearch-svc:9200
    server.host: "0.0.0.0"

    logging.silent: false
    logging.quiet: true
    logging.verbose: false

    xpack:    
      security:
        enabled: false
      infra: 
        sources:
          default:
            logAlias: "logstash-*"
            fields:
              timestamp: "@timestamp"
              message: ["message"]
              host: "host"
              container: "syslog_program"

皮斯科潘特

px9o7tmv

px9o7tmv3#

我设法暴露Kibana使用下面给定的入口路线。不过没那么复杂

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /kibana/$2
  name: kibana
  namespace: logging
spec:
  rules:
  - host: devops67.ef.com
    http:
      paths:
      - backend:
          service:
            name: elastic-kibana
            port:
              number: 5601
        path: /kibana(/|$)(.*)
        pathType: Prefix
  tls:
  - hosts:
    - devops67.ef.com
    secretName: elastic-elasticsearch-master-crt

我的部署是(bitnami elasticsearch,kibana作为子图)

global:
  kibanaEnabled: true
master:
  replicaCount: 3
  masterOnly: false
extraEnvVars:
  - name: LOG_KB_TLS_ENABLE
    value: "true"
data:
  replicaCount: 0
coordinating:
  replicaCount: 0
ingest:
  replicaCount: 0
security:
  enabled: true
  tls:
    autoGenerated: true
kibana:
  image:
     debug: true
  metrics:
   enabled: true
   serviceMonitor:
    enabled: true
  extraEnvVars:
     - name: LOG_KB_TLS_ENABLE
       value: "true"
  plugins[0]: https://github.com/fbaligand/kibana-enhanced-table/releases/download/v1.13.3/enhanced-table-1.13.3_6.6.0.zip
  plugins[1]: https://github.com/pjhampton/kibana-prometheus-exporter/releases/download/8.7.1/kibanaPrometheusExporter-8.7.1.zip
  configuration:
    server:
      basePath: /kibana
      rewriteBasePath: true
  elasticsearch:
    hosts:
      - elastic-elasticsearch
    port: 9200
    security:
      auth:
        enabled: true
        createSystemUser: true
        kibanaPassword: secretPass
        elasticsearchPasswordSecret: elastic-elasticsearch
      tls:
        enabled: true
        existingSecret: elastic-elasticsearch-master-crt
        usePemCerts: true
        verificationMode: "none"

相关问题