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

时间:2018-08-18 08:28:43

标签: 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;
    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;
    }
}

我们的服务是使用dotnet核心构建的,因此基础URL类似于http://some-api1/ {api / controllername}。尝试通过邮递员访问这些端点时,我总是得到404,这表明我无法解析这些映射。

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

server {
    listen 80;
    server_name someapi1.something.com;
    location /{
        proxy_pass http://some-api1;
    }   
}..

如果有人可以阐明配置的问题或推荐最佳方法,将不胜感激。

1 个答案:

答案 0 :(得分:1)

正如@Luminance所建议的那样,您看到到/ api1的流量流到该目标服务的基本路径上的some-api1 / api1而不是some-api1(这是您的应用程序将响应的)。在https://gist.github.com/soheilhy/8b94347ff8336d971ad0之后,您可以像这样重写该目标

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