kibana - 用于 kibana 等的 K8S NGINX 入口反向代理规则
问题描述
我知道关于这个话题有很多问题,但到目前为止没有任何帮助。第一个问题是我自己的理解。我已经在 K8S 中设置了 Nginx 入口控制器,现在正在尝试为 Kibana 集群服务添加入口规则,该服务在端口转发方面工作良好。
我根本无法让反向代理工作。我会感激两件事:
- K8S 入口规则使其工作
- 通过入口设置反向代理的非常好的“傻瓜”指南。我发现的大多数指南都是“这是一个 RP,嘿,我们可以将 /app1 重定向到 /app2……这不是很好吗?” 除了最基本的东西,他们真的没有任何细节。或者,它们是基于 NGINF conf 的,并且不会以相同的方式映射到 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
入口规则适用于与 kibana 相同的日志记录命名空间
kubectl apply -f ingress-rules.yaml -n logging
解决方案
我设法使它与server.basePath
参数一起工作。
以下是文档所说的:
如果您在代理后面运行, basePath使您能够指定挂载 Kibana 的路径。使用该
server.rewriteBasePath
设置告诉 Kibana 是否应该从它收到的请求中删除 basePath,并防止在启动时出现弃用警告。此设置不能以斜杠 (/
) 结尾。
此外,由于您在入口级别进行重写,我还必须禁用rewriteBasePath
(它应该是 false 是 kibana 7 和更早版本的默认值)。现在完整的配置如下所示:
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
----
推荐阅读
- ios - 如何计算属性中的记录?
- python - UnboundLocalError:分配前引用了局部变量“text_in_use”
- sql - 删除行后重置列的数字序列
- cordova - 播放第二个音频时是否可以自动停止第一个音频?
- javascript - 你不应该使用
或 withRouter() 外部 但我在路上 - javascript - 在将调用第一个函数的第二个函数中调用第一个函数
- python - date - offsets.MonthBegin(1) 如果日期是本月的第一天,则返回上个月
- ruby-on-rails - Rails 5:在范围内使用模型函数
- python - 尝试使用python将输入的UTC时间转换为太平洋时间
- reactjs - 什么在构建期间呈现 Create React App html 模板