首页 > 解决方案 > Kubernetes Ingress 路径未找到资源

问题描述

我在使用指向不同 Kubernetes 服务的路径时遇到了一些问题。

我使用路径/secondary-app指向辅助服务,我可以通过我的日志看到我正确地访问了该服务。

我的问题是网站上包含的任何资源,例如/css/main.css,最终找不到导致 404。

这是我的 ingress 的精简版:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    kubernetes.io/tls-acme: "true"
    nginx.ingress.kubernetes.io/proxy-body-size: 50m
    nginx.ingress.kubernetes.io/rewrite-target: /
  name: my-app
spec:
  rules:
  - host: my-app.example.com
    http:
      paths:
      - backend:
        path: /
          serviceName: my-app
          servicePort: http
      - backend:
        path: /secondary-app        
          serviceName: secondary-app
          servicePort: http

我已经尝试了一些东西,但还不能让它工作。我可能需要做一些 apache 重写吗?

任何帮助,将不胜感激。

编辑 - 解决方案

感谢@mk_sta 的一些帮助,我能够通过使用如下nginx.ingress.kubernetes.io/configuration-snippet注释让我的辅助服务应用程序正常工作:

  nginx.ingress.kubernetes.io/configuration-snippet: |
      if ($request_uri = '/?%secondary-app') { rewrite /(.*) secondary-app/$1 break; }

它仍然需要对我的特定应用程序进行一些调整,但这正是我所需要的。

标签: apachekuberneteskubernetes-ingress

解决方案


我猜nginx.ingress.kubernetes.io/rewrite-target: /您的配置中的注释Ingress不会为多路径重写目标路径带来任何成功,请在此处阅读更多内容。但是,您可以考虑使用Nginx Plus Ingress 控制器,它附带nginx.org/rewrites:注释,可用于将 URI 路径指向多个服务,如本示例中所述。

您还可以考虑为现有的使用nginx.ingress.kubernetes.io/configuration-snippet 注解Ingress,它可以将重写规则调整为 Nginx 位置,例如:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    kubernetes.io/tls-acme: "true"
    nginx.ingress.kubernetes.io/proxy-body-size: 50m
    nginx.ingress.kubernetes.io/configuration-snippet: |
      rewrite /first-app/(.*) $1 break;
      rewrite /secondary-app/(.*) /$1 break;
  name: my-app
spec:
  rules:
  - host: my-app.example.com
    http:
      paths:
      - backend:
        path: /first-app
          serviceName: my-app
          servicePort: http
      - backend:
        path: /secondary-app        
          serviceName: secondary-app
          servicePort: http

推荐阅读