【问题标题】:Ingress, rewrite-target, frontend and API same URL. Version 0.22.0+入口、重写目标、前端和 API 相同的 URL。版本 0.22.0+
【发布时间】:2020-12-04 06:47:35
【问题描述】:

我正在整理这样的设置:

  • example.com #frond end
  • example.com/api
  • example.com/authentication

显然,他们每个人都分离了应用程序,应该能够继续他们自己的道路,ex. http://example.com/api/v1/test?v=ok

现在我有一个这样的 yaml:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
 name: test-ingress
 annotations:
   nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
 rules:
 - http:
     paths:
     - path: /
       backend:
         serviceName: frontend-service
         servicePort: 80
     - path: /api(/|$)(.*)
       backend:
         serviceName: backend-service
         servicePort: 80
     - path: /authentication(/|$)(.*)
       backend:
         serviceName: identityserver-service
         servicePort: 80

/api 和 /authentication 以我想要的方式运行,但前端的子路径不起作用。因此,例如 http://example.com/css/bootstrap.css 未找到。

到目前为止,我已经尝试过

1-在前端路径的and处添加(/|$)(.*)

2-添加一个前端路径的副本与/.*的支持和端口和路径相同

他们都没有解决问题。

这是描述结果:

Name:             test-ingress
Namespace:        default
Address:          127.0.0.1
Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
Rules:
  Host        Path  Backends
  ----        ----  --------
  *
              /                          frontend-service:80 (10.1.80.38:80,10.1.80.43:80,10.1.80.50:80)
              /api(/|$)(.*)              backend-service:80 (10.1.80.39:80,10.1.80.42:80,10.1.80.47:80)
              /authentication(/|$)(.*)   identityserver-service:80 (10.1.80.40:80,10.1.80.41:80,10.1.80.45:80)
Annotations:  nginx.ingress.kubernetes.io/rewrite-target: /$2
Events:
  Type    Reason  Age                 From                      Message
  ----    ------  ----                ----                      -------
  Normal  UPDATE  43s (x14 over 13h)  nginx-ingress-controller  Ingress default/test-ingress

PS:我发现一些答案似乎早于版本 0.22.0 并且不再工作 ex 。 kubernetes ingress with multiple target-rewrite

【问题讨论】:

    标签: kubernetes yaml kubernetes-ingress nginx-ingress


    【解决方案1】:

    您的问题在于不正确的正则表达式。 如果启用了多行标志,$ 运算符匹配字符串的结尾或行的结尾。对于第一组,您正在捕获 /$,但您的字符串没有结束并且不匹配。

    我对此进行了测试,它适用于这个正则表达式:

     paths:
     - path: /()(.*)
       backend:
         serviceName: frontend-service
         servicePort: 80
    

    【讨论】:

    • 太棒了,这正是我所缺少的......谢谢!
    猜你喜欢
    • 2020-04-19
    • 2018-05-29
    • 1970-01-01
    • 2014-06-13
    • 2021-01-19
    • 2017-11-24
    • 1970-01-01
    • 2016-08-11
    • 2018-09-06
    相关资源
    最近更新 更多