4

我已经设置了一个基于名称的入口控制器,但它似乎不适用于/.

所以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 访问和错误日​​志也是空的,所以也无法从那里找到任何东西

4

2 回答 2

6

正如您所提到的,日志文件中没有错误,从您的角度来看,一切看起来都很正常。我可能会建议使用注释标签来调整入口。我检查了 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

如果Application Root暴露在不同的路径,需要重定向,设置注解

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 的标头中添加一个基本标记。

于 2018-08-10T14:21:35.720 回答
2

我开始解决这个问题,结果不知何故在我的命名空间上有另一个入口,它是一个非常旧版本的 nginx 控制器。我清理了我的集群并重新启动了我的入口。事情解决了。谢谢各位的帮助!

于 2018-08-11T06:55:28.860 回答