kubernetes集群内的Nginx微服务网关配置
基本上,我们有一组微服务部署到AWS中托管的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;
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;
}