nginx-ingress适用于/,但不适用于子路径

时间:2018-08-09 07:10:52

标签: nginx kubernetes kubernetes-ingress nginx-ingress

我已经设置了基于名称的入口控制器,但除/以外,它似乎不起作用。

因此http://metabase.domain.com有效,而http://metabase.domain.com/style/app.css无效。

这是我的配置:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  namespace: domain
  annotations:
    kubernetes.io/ingress.global-static-ip-name: "domain"
  name: domain-ingress
spec:
  rules:
  - host: metabase.domain.com
    http:
      paths:
      - path: /
        backend:
          serviceName: metabase
          servicePort: 80
  - host: jenkins.domain.com
    http:
      paths:
      - path: /
        backend:
          serviceName: jenkins
          servicePort: 80

从nginx.conf中的所有内容看起来也很正常。由于某些原因,nginx访问和错误日​​志也为空,因此也无法从中找到任何内容

2 个答案:

答案 0 :(得分:1)

我设法解决了这个问题,结果以某种方式在我的命名空间上有了另一个入口,它是nginx控制器的很旧的版本。我清理了集群并重新启动了入口。事情解决了。感谢大家的帮助!

答案 1 :(得分:0)

正如您提到的,日志文件中没有错误,并且从 你的观点。我可能建议使用注释标签来调整入口。 我检查了documentation of ingress-nginx,发现下面的注释可能会有所帮助。

在某些情况下,后端服务中公开的URL与指定的路径不同 在Ingress规则中无需重写,任何请求都将返回404。 设置注释

nginx.ingress.kubernetes.io/rewrite-target

服务期望的路径。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
  name: rewrite
  namespace: default
spec:
  rules:
  - host: rewrite.bar.com
    http:
      paths:
      - backend:
          serviceName: http-svc
          servicePort: 80
        path: /something

如果“应用程序根目录”位于其他路径中,并且需要重定向,请设置注释

nginx.ingress.kubernetes.io/app-root

重定向对/的请求。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/app-root: /app1
  name: approot
  namespace: default
spec:
  rules:
  - host: approot.bar.com
    http:
      paths:
      - backend:
          serviceName: http-svc
          servicePort: 80
        path: /

如果应用程序包含相对链接,则可以添加其他注释

nginx.ingress.kubernetes.io/add-base-url

将在后端返回的HTML的标头中添加一个基本标记。