使用带有动态参数的 Kubernetes Ingress 到 web API

Use Kubernetes Ingress with dynamic parameters to web API

我在 ASP.NET 核心网络 API 中使用 Kubernetes Ingress 时遇到问题。

假设我有一个带有三个控制器的网络 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: /
spec:
  rules:
  - host: myhost.com
    http:
      paths:
      - path: /(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: myservice
            port:
              number: 80

然后我期望发生的是浏览到 myhost.com/ 将 return“##”,myhost.com/ep1 将 return“1”和 myhost .com/ep2 将 return "2" 但是,所有三个路由 return "##"

我在配置入口时做错了什么吗?使用入口规则时甚至可能吗?如果没有,您如何创建使用动态参数的控制器?假设我想要一个 API 的网络 return 是某个用户 ID 的银行金额,当在 GET 路径中指定其 ID 时:myhost.com/balance/1312323,我如何使用网络 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