在Kubernetes上在我的前端和后端配置Nginx

时间:2017-07-18 00:04:02

标签: nginx dns kubernetes

我在尝试在kubernetes部署我的网络应用时遇到了问题。

我想在我的后端和前端服务面前使用nginx作为反向代理来模仿旧部署。

我的系统有3件,nginx,正面和背面。我构建了3个部署,3个服务,并使用[ Document { _id: 'fpYe5XepB9AfJM4PJ', } ] 仅公开了我的nginx服务。

没有进一步的延迟,这是我的nginx.conf:

[ {
    _id: 'fpYe5XepB9AfJM4PJ',
} ]

我尝试在其中一个pod中安装curl和nslookup,并尝试在集群内部端点上进行手动请求......眼泪流到我的眼前,一切正常......我几乎是一个值得开发的开发者。

一切顺利......除了nginx DNS解析之外的一切。

如果我执行nodePort: 30050并尝试卷曲其他两项服​​务中的一项:upstream my-server { server myserver:3000; } upstream my-front { server myfront:4200; } server { listen 80; server_name my-server.com; location /api/v1 { proxy_pass http://my-server; } location / { proxy_pass http://my-front; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; proxy_set_header X-Forwarded-For $remote_addr; } } 它可以正常运行。

如果我尝试nslookup其中一个也可以。

在此之后,我尝试在nginx.conf中替换具有pod IP的服务名称。重新启动nginx服务后,一切正常。

为什么nginx没有正确解析上游名称? 我为此疯狂。

1 个答案:

答案 0 :(得分:1)

Nginx缓存已解析的IP。要强制Nginx解析DNS,您可以引入变量:

location /api/v1 {
    set $url "http://my-server";
    proxy_pass $url;
}

可在此相关this answer中找到更多详细信息。

由于它可能是Nginx中的缓存,你所描述的,它也可以解释为什么重启(或重新加载)Nginx将解决问题。至少有一段时间,直到DNS条目再次发生变化。

我认为,它与Kubernetes无关。不久之前,当Nginx缓存AWS ELB的DNS条目时,我经常会遇到同样的问题,这些条目经常会更改IP。