Nginx Ingress 路径未指向服务/路径

Ali*_*hdi 5 docker kubernetes kubernetes-ingress nginx-ingress

我的集群上安装了 nginx ingress。这是 yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-client
  annotations:
    kubernetes.io/ingress.class: nginx
  namespace: dev
spec:
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: client-service
            port: 
              number: 80
      - path: /api
        pathType: Prefix
        backend:
          service:
            name: api-service
            port: 
              number: 80
Run Code Online (Sandbox Code Playgroud)

当我点击 / 前缀时,效果很好。卷曲http://example.com(一切都很好)

问题:

但是当我点击 / api 前缀时,它返回服务的 /api 而不是服务的 /

curl http://example.com/api(它应该链接到 api-service,但它链接到 api-service/api )

任何帮助将不胜感激!

atl*_*ine 1

您可以使用nginx.ingress.kubernetes.io/rewrite-target

在某些场景中,后端服务中公开的 URL 与 Ingress 规则中指定的路径不同。如果没有重写,任何请求都将返回 404。将注释 nginx.ingress.kubernetes.io/rewrite-target 设置为服务期望的路径。

因此,在这里您可以更改您的入口,如下所示:

metadata:
  name: ingress-client
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /
  namespace: dev
Run Code Online (Sandbox Code Playgroud)

上面的入口定义将导致以下重写:

  • api-service/api重写为api-service/