gpt4 book ai didi

amazon-web-services - Kubernetes 中的 NGINX 无法解析 DNS

转载 作者:行者123 更新时间:2023-12-04 10:03:14 24 4
gpt4 key购买 nike

我有一个使用 kube-aws 设置的 Kubernetes 集群.我正在尝试运行自定义 NGINX 配置,该配置使用 DNS 解析来代理_pass。这是 NGINX 代码块

location /api/v1/lead {
resolver 10.3.0.10 ipv6=off;
set $container lead-api;
proxy_pass http://$container:3000;
}

10.3.0.10 来自 Kubernetes 中找到的 DNS 服务的集群 IP。我还尝试了 127.0.0.11,这是我们在 docker-compose/docker 环境中使用的。
$ kubectl describe --namespace=kube-system service kube-dns
Name: kube-dns
Namespace: kube-system
Labels: k8s-app=kube-dns
kubernetes.io/cluster-service=true
kubernetes.io/name=KubeDNS
Selector: k8s-app=kube-dns
Type: ClusterIP
IP: 10.3.0.10
Port: dns 53/UDP
Endpoints: 10.2.26.61:53
Port: dns-tcp 53/TCP
Endpoints: 10.2.26.61:53
Session Affinity: None

此配置适用于使用 docker-compose 的三种不同环境。但是我在 Kubernetes 集群的 NGINX 日志中收到以下错误

[error] 9#9: *20 lead-api could not be resolved (2: Server failure), client: 10.2.26.0, server: , request: "GET /api/v1/lead/661DF757-722B-41BB-81BD-C7FD398BBC88 HTTP/1.1"



如果我在 NGINX pod 中运行 nslookup,我可以使用相同的 dns 服务器解析主机:
$ kubectl exec nginx-1855584872-kdiwh -- nslookup lead-api
Server: 10.3.0.10
Address: 10.3.0.10#53

Name: lead-api.default.svc.cluster.local
Address: 10.3.0.167

我不知道这是否重要,但请注意错误的“服务器”部分是空的。当我查看 dnsmasq 的 pod 日志时,我看不到任何相关内容。如果我将 NGINX block 更改为对 proxy_pass 进行硬编码,那么它可以很好地解决。但是,我还有其他需要动态代理名称的配置。我可以以这种方式对每个上游进行硬编码,但我想知道如何使 DNS 解析器工作。
location /api/v1/lead {
proxy_pass http://lead-api:3000;
}

最佳答案

解析名称失败,因为您需要使用完全限定域名。也就是说,您应该使用:
lead-api.<namespace>.svc.cluster.local
不只是
lead-api
只使用主机名通常会起作用,因为在 kubernetes 中 resolv.conf配置了搜索域,因此您通常不需要提供服务的 FQDN。例如:

search default.svc.cluster.local svc.cluster.local cluster.local
nameserver 10.3.240.10
options ndots:5

但是,当您告诉 nginx 使用自定义解析器时,必须指定 FQDN,因为它没有从这些域搜索规范中受益。

关于amazon-web-services - Kubernetes 中的 NGINX 无法解析 DNS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40682677/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com