2017-07-18 11 views
1

kubernetesに私のWebアプリケーションをデプロイしようとして問題が発生しました。Kubernetesのフロントエンドとバックエンドの前にNginxを設定する

私は私の背中とフロントエンドサービスの前にリバースプロキシとして働いてnginxの古いデプロイを模倣したかったです。

私のシステムでは、nginx、前後に3枚あります。私は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をポッドの1の内側に、クラスタ内のエンドポイントに手動要求を実行しようとしました...涙がするようになりました私の目は、すべてが働いている...私はほぼ開発者の雲の価値がある。

すべてがスムーズに動作しています... nginxのDNS解像度以外はすべてです。

私はkubectl exec -it my-nginx-pod -- /bin/bashを行うと、他の2つのサービスの1をカールしようとした場合:curl myfront:4200それが正常に動作します。

もし私がそれらのうちの1つをnslookupしようとするとうまくいきます。この後

私は、nginx.confで、ポッドのIPを持つサービス名を交換しようとしました。 nginxサービスを再起動した後、すべてが機能していました。

nginxがアップストリーム名を正しく解決しないのはなぜですか? 私はこれ以上ナッツをしています。

+0

ちょうどsidenote:おそらくあなたはIngressesとNginx Ingressコントローラを見たいと思うかもしれません。この方法で、Nginxの設定を手動で書き込む必要はありません。https://kubernetes.io/docs/concepts/services-networking/ingress/を参照してください。 –

答えて

1

Nginxは解決されたIPをキャッシュします。 DNSを解決するためにnginxのを強制するには、変数を導入することができます

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

詳細はこの関連this answerで見つけることができます。

それはおそらくnginxのではキャッシュであるので、あなたが記述するもの、それはまた再起動(または再ロード)理由を説明するだろうnginxのは、問題を解決します。 DNSエントリが変更されるまで、少なくともしばらくの間、もう一度。

クーベルネットには関係ないと思います。しばらく前にNginxがIPを頻繁に変更するAWS ELBのDNSエントリをキャッシュしたとき、同じ問題が発生しました。

関連する問題