另一个 nginx 入口重写目标问题

Cha*_*lie 3 nginx node.js kubernetes kubernetes-ingress nginx-ingress

我有一项服务和一个带有 kubenetes nginx 入口控制器的入口资源。我希望/student我的 url 路径转到应用程序的根目录,并匹配student.

例如: http: //example.com/student/ver应该与/ver我的应用程序的路由匹配。

/student然而,我的入口总是使用url 路径作为其他 url 段的前缀来访问应用程序。如果我调用http://example.com/student/ver,我的应用程序将使用相同的 url ( student/ver)。

我的入口:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    ingress.kubernetes.io/rewrite-target: /
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
  name: ingress-resource
spec:
  rules:
  - host: example.com
    http:
      paths:
      - backend:
          serviceName: lesson-streaming
          servicePort: 80
        path: /student
Run Code Online (Sandbox Code Playgroud)

我花了好几天的时间来解决这个问题,但一次都没有成功。


编辑:

入口更改为以下内容 - 不是我的要求说的http 404

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    ingress.kubernetes.io/rewrite-target: /$2
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
  name: ingress-resource
  namespace: default
spec:
  rules:
  - host: example.com
    http:
      paths:
      - backend:
          serviceName: lesson-streaming
          servicePort: 80
        path: /student(/|$)(.*)
Run Code Online (Sandbox Code Playgroud)

kit*_*itt 8

您可以按照链接正确使用rewrite-target注释并保留正确的密钥nginx.ingress.kubernetes.io/rewrite-target

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
  name: rewrite
  namespace: default
spec:
  rules:
  - host: rewrite.bar.com
    http:
      paths:
      - backend:
          serviceName: http-svc
          servicePort: 80
        path: /something(/|$)(.*)
Run Code Online (Sandbox Code Playgroud)