如何解决如何在没有入口路径的情况下路由路径和服务的子字符串
我有三个问题:
1 - 如何正确实现正则表达式以匹配入口路径的第一部分?
- path: /^search_[0-9A-Z]{9}
backend:
serviceName: global-search-service
servicePort: 5050
我想匹配任何以 /search_
开头的路径,例如 /search_model
或 /search_make
2 - 我如何访问没有路径只有端口的服务。
path:
pathType: Exact
backend:
serviceName: chart-display
servicePort: 10000
我只是使用 iframe 显示此服务。我只有端口号,如何访问?
3 - 我托管了两个不同的 React 应用程序,当我将它们的路径设置为 root /
时,它们都可以工作。我如何实现它们以使用 root 路径?
尝试问题 3。
所以我想出了这样的东西对吗?
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: admin-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /admin
backend:
serviceName: web2-service
servicePort: 2000
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: normal-ingress
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/use-regex: "true"
spec:
rules:
- http:
paths:
- path: /
backend:
serviceName: web1-service
servicePort: 1000
加载 <my-ip>/admin
不会转到 web2-service,如果我将它们都留在 /
,它会自动转到 web1-service。恳请指教
解决方法
对于第一个问题,您可以在路径中使用正则表达式而不会出现任何问题,您只需要使用 use-regex 对入口进行注释,至少根据文档 (https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#use-regex)
类似于:
metadata:
name: your-name
annotations:
nginx.ingress.kubernetes.io/use-regex: "true"
spec:
...
或者作为替代,如果您将注释用于重写目标,则还应强制执行正则表达式。
至于要使用的正则表达式,为了匹配路径的开头,例如所有以 something 开头的路径,例如 something_first 或 something_another,你可以选择简单的:
something_[a-zA-Z0-9]*
对于第二个问题,我不确定您要问什么。 Ingress 应该与 http 或 https 请求一起使用,并且应该提供路径。如果您想简单地在给定端口外部公开服务,您可以选择 LoadBalancer 服务。
在内部,您想访问的服务仅在根路径的 http 中回答一个端口?或者做一些不同的事情?如果它只在根路径上应答,您可以将请求中的所有路径都匹配到根路径。
至于如何让请求的所有路径都重写为root,可以使用rewrite annotation,例如:
nginx.ingress.kubernetes.io/rewrite-target: /
有关此注释的更多信息,请查看文档,因为它可以做很多事情 (https://kubernetes.github.io/ingress-nginx/examples/rewrite/)
还要记住,如果要在两个不同的地方重写两个服务,则需要将 Ingress 拆分为两个独立的 Ingress
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。