nginx 中的 kubernetes dns 解析器

sha*_*876 16 nginx kubernetes google-kubernetes-engine

我在本地开发docker-compose,并且有一个 nginx 容器做一个简单的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;
}
Run Code Online (Sandbox Code Playgroud)

我现在想转移到 kubernetesGKE 中,最后一行给我带来了麻烦。

我试图将解析器切换到:

    resolver kube-dns;
Run Code Online (Sandbox Code Playgroud)

我还尝试了各种其他 IP 和名称,但我不断收到以下错误:

nginx: [emerg] host not found in resolver "kube-dns"
Run Code Online (Sandbox Code Playgroud)

我的 kubernetes 设置是我有一个 pod,有 2 个容器:“webapp”和“nginx”。我只想有一个service指向 nginx的外部可以proxy_pass指向 webapp 的。

有任何想法吗?

小智 18

您必须为 kube-dns 和服务指定 FQDN。
例如,对于 GKE kube-dns 标准,它将是:kube-dns.kube-system.svc.cluster.local
如果您使用webapp服务的默认命名空间,它将是:webapp.default.svc。集群.local

我知道最初的问题很老,但也许它对某人有帮助。

  • 解析器 kube-dns.kube-system.svc.cluster.local ipv6=off; - 这也适用于 Digital Ocean 的 Kubernetes (3认同)

Mik*_*ike 1

如果 nginx 位于 kubernetes 内部,则无需设置解析器,因为它将解析到正确的位置。如果nginxwebapp生活在同一个命名空间中,你可以简单地

proxy_pass http://webapp
Run Code Online (Sandbox Code Playgroud)

只要您的 Web 应用程序的服务名称称为 webapp 并使用端口 80。

如果 nginx 位于外部,那么您应该使用入口控件或将 Web 应用程序的服务设置为节点端口。Nodeport 将在所有节点上打开相同的端口,以便您可以在 nginx 端在它们之间进行负载平衡。

  • 如果您在 proxy_pass 指令中使用变量,则情况并非如此:/sf/ask/1237997211/ (23认同)