我在尝试在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没有正确解析上游名称? 我为此疯狂。
答案 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。