Kubernetes CoreDNS 间歇性解析名称

Kubernetes CoreDNS resolving names intermittently

我有一个双节点 Kubernetes EKS 集群,它是 运行 "v1.12.6-eks-d69f1"

Amazon VPC CNI Plugin for Kubernetes version: amazon-k8s-cni:v1.4.1
CoreDNS version: v1.1.3
KubeProxy: v1.12.6

集群上有两个 CoreDNS pods 运行。

我遇到的问题是我的 pods 间歇性地解析内部 DNS 名称。 (外部 DNS 名称的解析工作正常)

root@examplecontainer:/# curl http://elasticsearch-dev.internaldomain.local:9200/
curl: (6) Could not resolve host: elasticsearch-dev.internaldomain.local

elasticsearch-dev.internaldomain.local 已在 AWS Route53 内部托管区域中注册。上面的工作间歇性地进行,如果我发出五个请求,其中两个会正确解析,其余的会失败。

这些是上面示例容器中 /etc/resolv.conf 文件的内容:

root@examplecontainer:/# cat /etc/resolv.conf 
nameserver 172.20.0.10
search default.svc.cluster.local svc.cluster.local cluster.local eu-central-1.compute.internal
options ndots:5

知道为什么会发生这种情况吗?

你应该从容器中尝试下面的 dns

卷曲http://elasticsearch-dev.default.svc.cluster.local:9200/

请看看这个"Enabling DNS resolution for Amazon EKS cluster endpoints"here

The Amazon Route 53 private hosted zone that is created for the endpoint is only associated with the worker node VPC.

如果它与您的环境相似。你可以找到解决方案 here.

请分享结果。

我通过从自定义 "DHCP option set" 切换到 AWS 提供的默认 "DHCP option set" 解决了这个问题。我在几个月前创建了自定义 "DHCP option set" 并将其分配给 EKS 集群所在的 VPC 运行...

我是怎么弄清楚的?

在运行"kubectl get events -n kube-system"之后,我体会到了:

Warning  DNSConfigForming  17s (x15 over 14m)  kubelet, ip-10-4-9-155.us-west-1.compute.internal  Nameserver limits were exceeded, some nameservers have been omitted, the applied nameserver line is: 10.4.8.2 8.8.8.8 8.8.4.4

8.8.8.8 和 8.8.4.4 是由我创建的麻烦 "DHCP options set" 注入的。而且我认为我的服务间歇性解析内部 DNS 名称的原因是因为 CoreDNS 服务在内部以循环方式将 DNS 请求转发到 10.4.8.2、8.8.4.4、8.8.8.8。由于最后 2 个 DNS 服务器不知道我的 Route53 内部托管区域 DNS 记录,因此解析间歇性失败。

注意 10.4.8.2 是默认的 AWS 名称服务器。

只要切换到 AWS 提供的默认 "DHCP option set",EKS 服务就可以一致地解析我的内部 DNS 名称。

我希望这对以后的人有所帮助。