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

avwztpqn  于 2022-11-02  发布在  Kubernetes
关注(0)|答案(3)|浏览(163)

我有一个服务和一个带有kubenetes nginx入口控制器的入口资源。我希望我的url的/student路径去到应用程序的根目录,并匹配任何其他跟随student的url段。
例如: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

我花了几天的时间来研究这个问题,一次也没有成功。
编辑:
入口更改为以下内容-不是我的请求,而是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(/|$)(.*)
pbpqsu0x

pbpqsu0x1#

您可以按照链接正确使用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(/|$)(.*)
omvjsjqw

omvjsjqw2#

我已经尝试过很多次在nginx入口控制器中正确执行基于路径的路由,但我发现了基于路径的路由不起作用的主要原因。
(nginx.ingress.kubernetes.io/rewrite-target: /)替换为(nginx.org/rewrites: "serviceName=servicename rewrite=/")
必须在spec中添加ingressClassName
在我的例子中,我有kubernetes 1.23.0 & nginx/1.21.6
我希望这能解决上面的问题。祝你好运

sh7euo9m

sh7euo9m3#

我正在使用k8 - v1.25.2沿着nginx-入口v2.4.1 https://docs.nginx.com/nginx-ingress-controller/installation/installation-with-manifests/
nginx.ingress.kubernetes.io/rewrite-target: $2 -不工作
请改为用途:“nginx.org/rewrites:服务名称=应用程序1-svc重写=/;服务名称=应用程序2-服务重写=/”
api版本:networking.k8s.io/v1类型:入口元数据:名称:路径入口命名空间:默认注解:
nginx.org/rewrites: 服务名称=应用程序1-svc重写=/;服务名称=应用程序2-svc rewrite=/”规格:输入类名:Nginx
规则:

  • 您apps.relo.com。
  • 后端:服务:名称:app 1-svc端口:编号:2041路径:/app 1路径类型:首码
  • 后端:服务:名称:app 2-svc端口:编号:2042路径:/app 2路径类型:首码

相关问题