入口、重写目标、前端和API的URL相同.版本0.22.0+



我正在准备一个这样的设置:

  • 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-在前端路径的和处添加(/|$)(.*)

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版本更旧,而且不再有效。具有多目标重写的kubernetes入口

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

我测试了这个,它与这个正则表达式一起工作:

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

相关内容

  • 没有找到相关文章

最新更新