2017-07-18 99 views
1

我一直在尝试部署我的web应用程序kubernetes在Kubernetes的前端和后端配置一个Nginx

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

我有3件在我的系统中,nginx,正面和背面。我构建了3个部署,3个服务,并使用nodePort: 30050仅显示了我的nginx服务。

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

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 DNS解析之外,其他的一切都很顺利。

如果我做kubectl exec -it my-nginx-pod -- /bin/bash并试图蜷缩其他2个服务中的其中一个:curl myfront:4200它可以正常工作。

如果我尝试nslookup其中之一,它也可以。

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

为什么nginx没有正确解析上游名字? 我对此很感兴趣。

+0

只是一个旁注:也许你想看看Ingress和Nginx Ingress控制器。这样您就不需要再手动编写Nginx配置了,请参阅https://kubernetes.io/docs/concepts/services-networking/ingress/。 –

回答

1

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

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

更多细节,该相关this answer被发现。因为它很可能是Nginx中的缓存,你所描述的,这也可以解释为什么重新启动(或重新加载)Nginx将解决这个问题。至少有一段时间,直到DNS条目再次改变。

我认为这与Kubernetes无关。前段时间,当Nginx缓存经常更改IP的AWS ELBs的DNS条目时,我遇到了同样的问题。