Kubernetes入口路径找不到资源

时间:2018-12-05 05:08:08

标签: apache kubernetes kubernetes-ingress

使用路径指向其他路径时出现一些问题 Kubernetes服务。

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

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

这是我的入口的精简版:

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; }

对于我的特定应用,它仍然需要进行一些调整,但这确实满足了我的需要。

1 个答案:

答案 0 :(得分:2)

我想您的nginx.ingress.kubernetes.io/rewrite-target: /配置中的Ingress注释不会为多路径重写目标路径带来任何成功,请阅读更多here。但是,您可以考虑使用nginx.org/rewrites:批注附带的Nginx Plus Ingress controller,并且可以用于将URI路径指向此example中所述的多个服务。

您还可以考虑将nginx.ingress.kubernetes.io/configuration-snippet annotation用于现有的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