我现在使用的是azure k8。我有两个服务,我需要通过同一个域公开,并希望为不同的服务添加路径。
入口文件如下
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: kibana-ingress
namespace : {{ .Values.namespace }}
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/affinity: "cookie"
nginx.ingress.kubernetes.io/session-cookie-name: "route"
nginx.ingress.kubernetes.io/session-cookie-hash: "sha1"
nginx.ingress.kubernetes.io/rewrite-target: /$2
nginx.ingress.kubernetes.io/use-regex: "true"
spec:
tls:
- hosts:
- {{ .Values.kibana.ingressdomain }}
secretName: abb-aks-cert
rules:
- host: {{ .Values.kibana.ingressdomain }}
http:
paths:
- path: /app/kibana
backend:
serviceName: kibana-service
servicePort: 5601
- path: /grafana
backend:
serviceName: monitor-grafana
servicePort: 80
当我这样定义时,我会得到404个错误。有什么解决办法吗?
Kubernetes版本是1.16
这是人们经常犯的错误。Web应用程序通常(默认情况下(使用基本路径=/
进行服务。在第一次请求期间,网站正确地重新响应,但路径不正确,因为它没有意识到它在代理后面运行,并且某个东西正在重写路径。
您需要相应地为这两个应用程序设置根/基路径,并删除重写,因为不需要重写。
对于kibana,您需要设置:
服务器.base路径:
使您能够指定在代理后面运行时装载Kibana的路径。使用server.rewriteBasePath设置来告诉Kibana是否应该从收到的请求中删除basePath,并防止在启动时出现弃用警告。此设置不能以斜线(/(结尾。
更多kibana文档
对于grafana,您需要设置:
root_url
这是用于从网络浏览器访问Grafana的完整URL。如果您使用Google或GitHub OAuth身份验证(为了使回调URL正确(,这一点非常重要。
注意:如果Grafana前面有一个反向代理,通过子路径公开它,则此设置也很重要。在这种情况下,将子路径添加到此URL设置的末尾。
serve_from_sub_path
从root_url设置中指定的子路径为Grafana提供服务。出于兼容性原因,默认情况下它设置为false。
通过启用此设置并使用上面root_url中的子路径,例如root_url=http://localhost:3000/grafana,Grafana可访问http://localhost:3000/grafana
grafana文档中的更多信息