kubernetes集群内的Nginx微服务网关配置

kubernetes集群内的Nginx微服务网关配置,nginx,kubernetes,.net-core,Nginx,Kubernetes,.net Core,基本上,我们有一组微服务部署到AWS中托管的kubernetes集群。我们希望通过nginx中的网关配置来运行这些 我们当前不工作的配置看起来像这样- upstream some-api1 { server some-api1:80; } upstream some-api2 { server some-api2:80; } upstream some-api3 { server some-api3:80; } server { listen 80;

基本上,我们有一组微服务部署到AWS中托管的kubernetes集群。我们希望通过nginx中的网关配置来运行这些

我们当前不工作的配置看起来像这样-

upstream some-api1 {
    server some-api1:80;
}

upstream some-api2 {
    server some-api2:80;
}

upstream some-api3 {
    server some-api3:80;
}

server {
    listen 80;
    server_name gateway.something.com;
    location /api1 {
        proxy_pass  http://some-api1;
    }
    location /api2 {
        proxy_pass  http://some-api2;
    }
    location /api3 {
        proxy_pass  http://some-api3;
    }
}
我们的服务是用dotnetcore构建的,因此底层的url类似于{api/controllername}。当我尝试通过postman访问这些端点时,我总是得到404,这告诉我它无法解析这些映射

但是,我可以使用这样的api的显式配置来访问集群中的api(这是我不想做的)-


如果有人能解释一下配置的错误,或者推荐最好的方法,我们将不胜感激。

正如@Luminance所建议的那样,您将看到/api1的流量转到目标服务的基本路径上的some-api1/api1,而不仅仅是some-api1(这是您的应用程序将响应的)。接下来,您可以像这样重新编写该目标

location /api1 {
       rewrite ^/api1(.*) /$1 break;
       proxy_pass http://some-api1;
    }

您得到的是普通的404还是nginx默认的后端404?nginx如何暴露于集群之外的世界(NodePort?LoadBalancer?)?您是否有带有服务名称的Kubernetes服务描述符?如果您可以包含“kubectl get services--all namespace”的输出,这可能会有所帮助。您似乎还需要添加
代理过程的路径:
代理过程http://some-api3/api3;
如果您还想传递查询参数,那么这将是:
proxy\u passhttp://some-api3/api3$is_args$args@Ryan-感谢您的反馈!。我刚刚更新了原来的帖子。我仔细检查了集群服务描述符,那里的一切似乎都很好。作为概念证明,我能够通过postman访问一个api,使用我的编辑中描述的显式配置。你可能了解一些关于入口的事情,我需要进一步调查。我希望它在nginx中是一个简单的配置,但我没有。@Zakaria-谢谢你的建议。我确实试过你提到的这似乎也没什么不同。正如我在更新后的帖子中提到的,我能够使用显式/映射与postman一起访问api。如果我正确理解了您想要实现的目标,我认为您可以使用“重写”指令解决这个问题。Try:
location/api1{rewrite/api1/(.*)/$1 break;proxy\u passhttp://some-api1;}
。其他代理传递也是如此。
location /api1 {
       rewrite ^/api1(.*) /$1 break;
       proxy_pass http://some-api1;
    }