2017-07-18 3 views
1

Ich habe Probleme bei der Bereitstellung meiner Web-App in kubernetes.Konfigurieren eines Nginx vor meiner Vorder- und Rückseite auf Kubernetes

Ich wollte alte Bereitstellung mit Nginx als Reverse-Proxy vor meinem Back-und Front-End-Dienste imitieren.

Ich habe 3 Stück in meinem System, nginx, Vorder-und Rückseite. Ich baute 3 Bereitstellungen, 3 Dienste und legte nur meinen Nginx-Dienst unter Verwendung von nodePort: 30050 offen.

Ohne weitere Verzögerungen, dies ist mein 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; 
    }   
} 

Ich habe versucht, Locke zu installieren und nslookup in einem der Schoten und versuchte manuelle Anforderung auf Cluster-interne Endpunkte zu tun ... Tränen kamen Meine Augen, alles funktioniert ... Ich bin fast ein Entwickler, der der Cloud würdig ist.

Alles funktioniert reibungslos ... alles außer nginx DNS-Auflösung.

Wenn ich kubectl exec -it my-nginx-pod -- /bin/bash tun und versuchen, 1 der anderen 2 Dienste zu rollen: curl myfront:4200 funktioniert es richtig.

Wenn ich versuche, einen von ihnen zu suchen, funktioniert es auch.

Danach habe ich versucht, in der nginx.conf, die Service-Namen mit den Pods IPs zu ersetzen. Nach dem Neustart des nginx-Dienstes funktionierte alles.

Warum löst nginx die Upstream-Namen nicht korrekt auf? Ich bin verrückt darüber.

+0

nur eine Nebenbemerkung: Vielleicht möchten Sie sich Ingresses und den Nginx Ingress Controller ansehen. Auf diese Weise müssen Sie die Nginx-Konfiguration nicht mehr manuell schreiben, siehe https://kubernetes.io/docs/concepts/services-networking/ingress/. –

Antwort

1

Nginx speichert die aufgelösten IPs zwischen. Um Nginx zu zwingen DNS zu beheben, können Sie eine Variable vorstellen:

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

Weitere Details finden Sie in diesem verwandten this answer finden.

Da es wahrscheinlich ist, ein Zwischenspeichern in Nginx, was Sie beschreiben, würde es auch erklären, warum Neustart (oder Neuladen) Nginx wird das Problem beheben. Zumindest für eine Weile bis sich der DNS-Eintrag ändert, nochmal.

Ich denke, es ist nicht mit Kubernetes verwandt. Ich hatte das gleiche Problem vor einiger Zeit, als Nginx DNS-Einträge von AWS ELBs zwischenspeichert, die häufig IPs ändern.

Verwandte Themen