kubernetes dns resolver in nginx

10

Ich entwickelte mich lokal in docker-composeund hatte einen Nginx-Container, der so etwas einfach machte proxy_pass:

location /app/ {
    proxy_pass http://webapp:3000/;

    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;

    resolver 127.0.0.11;
}

Ich möchte jetzt zu kubernetesGKE wechseln , und die letzte Zeile bereitet mir Probleme.

Ich habe versucht, den Resolver auf Folgendes umzustellen:

    resolver kube-dns;

Ich habe auch verschiedene andere IPs und Namen ausprobiert, aber es wird immer wieder ein Fehler angezeigt:

nginx: [emerg] host not found in resolver "kube-dns"

Mein Kubernetes-Setup besteht darin, dass ich einen einzelnen Pod mit zwei Containern habe: 'webapp' und 'nginx'. Ich möchte einfach einen externen serviceHinweis proxy_passauf Nginx haben , der auf Webapp kann.

Irgendwelche Ideen?

sharif9876
quelle

Antworten:

9

Sie müssen den vollqualifizierten Domänennamen für die kube-dns und die Dienste angeben.
Für den GKE-Standard kube-dns wäre dies beispielsweise: kube-dns.kube-system.svc.cluster.local
. Wenn Sie sich mit Ihrem Webapp- Dienst im Standard-Namespace befinden, lautet dies: webapp.default.svc. cluster.local

Ich weiß, dass die ursprüngliche Frage alt ist, aber vielleicht hilft sie jemandem.

Robert Keck
quelle
Also zur Verdeutlichung, FQDN des Resolvers in der Nginx-Konfiguration oder der tatsächliche Proxy-Pass?
Lennart Rolland
3

Wenn Nginx in Kubernetes lebt, muss der Resolver nicht eingestellt werden, da er an der richtigen Stelle aufgelöst wird. Wenn nginxund webappleben im gleichen Namespace können Sie einfach

proxy_pass http://webapp

Solange Ihr Dienstname für die Webanwendung als Webanwendung bezeichnet wird und Port 80 verwendet.

Wenn nginx außerhalb lebt, sollten Sie einen Ingress-Controller verwenden oder den Dienst für die Webanwendung auf einen Nodeport setzen. Ein Nodeport öffnet auf allen Knoten denselben Port, sodass Sie den Lastausgleich zwischen ihnen auf der Nginx-Seite durchführen können.

Mike
quelle
11
Dies ist nicht wahr, wenn Sie eine Variable innerhalb der Anweisung proxy_pass verwenden
hdave