2017-07-18 76 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條目時,我遇到了同樣的問題。