禁用Kubernetes扇出入口的路径重写

zf9nrax1  于 2023-02-07  发布在  Kubernetes
关注(0)|答案(2)|浏览(109)

我的Kubernetes应用程序使用Ingress将请求代理到不同的服务器,具体取决于给定的URL:我需要一个扇出配置。我希望请求的URL在转发到服务器时**不被重写。我该怎么做?
我希望将所有/api URL转发到be服务,并将所有其他URL转发到fe服务。

  • /api/users的请求应当作为对/api/users的请求被转发到be服务。
  • /foo的请求应当作为对/foo的请求被转发到fe服务。

我目前的入口资源是这样的:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  ...
spec:
  ...
  rules:
    - host: ...
    - http:
        paths:
          - path: /api
            backend:
              serviceName: be
              servicePort: 8080
          - path: /
            backend:
              serviceName: fe
              servicePort: 80

但这是行不通的它会为请求提供404 Not Found。

whlutmcx

whlutmcx1#

Kubernetes入口不会重写您的请求URL,入口控制器会执行此操作(无论您使用的是什么)。例如,如果您的入口控制器是Nginx,您可以在入口上使用annotations来控制此行为。

km0tfn4u

km0tfn4u2#

老问题,但我得到了一个类似的问题解决了nginx入口注解所建议的格兰特大卫巴赫曼:

apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      annotations:
        nginx.ingress.kubernetes.io/rewrite-target: /$1
      ...
    spec:
      ...
      rules:
        - host: ...
        - http:
            paths:
              - path: "/(api.*)"
                backend:
                  serviceName: be
                  servicePort: 8080
              - path: "/(.*)"
                backend:
                  serviceName: fe
                  servicePort: 80

相关问题