微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用带有动态参数的 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 举报,一经查实,本站将立刻删除。