如何解决使用带有动态参数的 Kubernetes Ingress 到 Web API
我在使用 Kubernetes Ingress 和 ASP.NET 核心 Web API 时遇到问题。
假设我有一个带有三个控制器的 Web API(用于演示三个路由 /、/ep1、/ep2 的简化代码):
endpoints.MapGet("/",async context =>
{
await context.Response.WriteAsync("##");
});
endpoints.MapGet("/ep1",async context =>
{
await context.Response.WriteAsync("1");
});
endpoints.MapGet("/ep2",async context =>
{
await context.Response.WriteAsync("2");
});
我想要的是定义一个将内部路由传递给应用程序的入口规则:
apiVersion: networking.k8s.io/v1
kind: Ingress
Metadata:
name: ingress
annotations:
kubernetes.io/ingress.class: Nginx
Nginx.ingress.kubernetes.io/use-regex: "true"
Nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
rules:
- host: myhost.com
http:
paths:
- path: /(/|$)(.*)
pathType: Prefix
backend:
service:
name: myservice
port:
number: 80
然后我期望发生的是浏览到 myhost.com/ 将返回“##”,myhost.com/ep1 将返回“1”而 myhost.com/ep2 将返回“2” 但是,所有三个路由都返回“##”
我在配置入口时做错了什么吗?使用入口规则时甚至可能吗?如果没有,您如何创建使用动态参数的控制器?假设我想要一个 Web API,它返回某个用户 ID 的银行金额,在 GET 路径中指定其 ID 时:myhost.com/balance/1312323,我如何使用 Web API 和 Kubernetes 的入口规则来实现这一点?
感谢您的帮助
解决方法
应用程序内的路由应由应用程序处理。因此,不需要定义动态路径。试试这个。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: myhost.com
http:
paths:
- path: /
backend:
service:
name: myservice
port:
number: 80
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。