web-dev-qa-db-ja.com

nginxのkubernetes dnsリゾルバ

docker-compose、そして単純な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;
}

GKEのkubernetesに移動したいと思います。最後の行で問題が発生しています。

私はリゾルバーを次のように切り替えようとしました:

    resolver kube-dns;

他にもさまざまなIPと名前を試しましたが、次のようなエラーが発生し続けます。

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

私のkubernetesセットアップは、「webapp」と「nginx」の2つのコンテナーを持つ単一のポッドがあることです。私は単に、serviceがnginxを指すproxy_passからwebappへ。

何か案は?

10
sharif9876

Kube-dnとサービスのFQDNを指定する必要があります。
たとえばGKE kube-dns標準の場合、次のようになります:kube-dns.kube-system.svc.cluster.local
そしてwebappサービスでデフォルトの名前空間にいる場合、それは次のようになります:webapp.default.svc.cluster.local

私は元の質問が古いことを知っていますが、多分それは誰かを助けるでしょう。

9
Robert Keck

Nginxがkubernetes内にある場合は、正しい場所に解決されるため、リゾルバーを設定する必要はありません。 nginxwebappが同じ名前空間にある場合は、単純に

proxy_pass http://webapp

Webappのサービス名がwebappで、ポート80を使用している限り。

Nginxが外部にある場合は、イングレスコントロールを使用するか、webappのサービスをノードポートに設定する必要があります。ノードポートはすべてのノードで同じポートを開くため、nginx側でノード間で負荷を分散できます。

2
Mike