【发布时间】:2021-06-14 18:05:26
【问题描述】:
我在使用 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 的入口规则来实现这一点?
感谢您的帮助
【问题讨论】:
标签: c# nginx kubernetes asp.net-web-api nginx-ingress