K8S - Ingress - Route 2 不同的应用

K8S - Ingress - Route 2 different applications

在我的 minikube k8s 集群中,我有 2 个 applications/services。

这是我拥有的服务的入口控制器。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-tutorial
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  backend:
    serviceName: default-http-backend
    servicePort: 80
  rules:
  - host: mysite.com
    http:
      paths:
      - path: /sva
        backend:
          serviceName: app-a
          servicePort: 8080
      - path: /svb
        backend:
          serviceName: app-b
          servicePort: 8150

当我键入 mysite.com/svamysite.com/svb 时,它会路由到适当的服务。但是,静态文件 (js, css, images etc) 的 none 被加载,因为它们似乎从 mysite.com 而不是 mysite.com/sva/

请求资源

如何让它寻找特定服务下的资源?

尝试在ingress中添加如下注解

ingress.kubernetes.io/add-base-url: "true"

将解决这个问题。

您还可以评论:https://github.com/kubernetes/ingress-nginx/issues/333

根据 Harsh Manvar 的回答,目前看来重写对静态资源不起作用。

这是我计划遵循的解决方法,用于路由 sva.mysite.comsvb.mysite.com 等 diff 应用程序。它工作正常。如果有人遇到类似问题,只需将其添加为答案即可。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-tutorial
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  backend:
    serviceName: default-http-backend
    servicePort: 80
  rules:
  - host: sva.mysite.com
    http:
      paths:
      - path: /
        backend:
          serviceName: app-a
          servicePort: 8080
  - host: svb.mysite.com
    http:
      paths:
      - path: /
        backend:
          serviceName: app-b
          servicePort: 8150