我们有一个Kubernetes集群,其中有1个主节点和3个由kops管理的节点,用于我们的应用程序部署。我们几乎没有Pod到Pod的连接,但是就像Kubernetes中的自动缩放功能一样。我们过去几个月一直在使用它,但是最近开始出现问题,即我们的Pod随机无法连接到Redis或数据库,并出现以下错误:
Set state pending error: dial tcp: lookup redis.id.0001.use1.cache.amazonaws.com on 100.64.0.10:53: read udp 100.126.88.186:35730->100.64.0.10:53: i/o timeout
或
OperationalError: (psycopg2.OperationalError) could not translate host name “postgres.id.us-east-1.rds.amazonaws.com” to address: Temporary failure in name resolution
奇怪的是,这种情况仅在某些时间发生,然后在重新创建pod时,它将再次起作用,并且此后不久就会使它跳闸。
我们尝试不遵守Kube的所有kube-dns调试说明,尝试了无数解决方案,例如更改ndots配置,甚至尝试过迁移到CoreDNS,但仍然存在完全相同的间歇性问题。我们使用Calico进行网络连接,但由于没有其他服务出现问题,因此很难说它是否在网络级别发生。
是否有人对在其他地方寻找导致此行为的原因有任何想法,或者如果您在经历过此行为之前无法分享自己的解决方法?
谢谢
CoreDNS的Pod看起来不错
⇒ kubectl get pods --namespace=kube-system
NAME READY STATUS RESTARTS AGE
...
coredns-784bfc9fbd-xwq4x 1/1 Running 0 3h
coredns-784bfc9fbd-zpxhg 1/1 Running 0 3h
...
我们启用了登录CoreDNS的功能,并看到请求实际上是通过以下方式发送的:
⇒ kubectl logs coredns-784bfc9fbd-xwq4x --namespace=kube-system
.:53
2019-04-09T00:26:03.363Z [INFO] CoreDNS-1.2.6
2019-04-09T00:26:03.364Z [INFO] linux/amd64, go1.11.2, 756749c
CoreDNS-1.2.6
linux/amd64, go1.11.2, 756749c
[INFO] plugin/reload: Running configuration MD5 = 7f2aea8cc82e8ebb0a62ee83a9771ab8
[INFO] Reloading
[INFO] plugin/reload: Running configuration MD5 = 73a93c15a3b7843ba101ff3f54ad8327
[INFO] Reloading complete
...
2019-04-09T02:41:08.412Z [INFO] 100.126.88.129:34958 - 18745 "AAAA IN sqs.us-east-1.amazonaws.com.cluster.local. udp 59 false 512" NXDOMAIN qr,aa,rd,ra 152 0.000182646s
2019-04-09T02:41:08.412Z [INFO] 100.126.88.129:51735 - 62992 "A IN sqs.us-east-1.amazonaws.com.cluster.local. udp 59 false 512" NXDOMAIN qr,aa,rd,ra 152 0.000203112s
2019-04-09T02:41:13.414Z [INFO] 100.126.88.129:33525 - 52399 "A IN sqs.us-east-1.amazonaws.com.ec2.internal. udp 58 false 512" NXDOMAIN qr,rd,ra 58 0.001017774s
2019-04-09T02:41:18.414Z [INFO] 100.126.88.129:44066 - 47308 "A IN sqs.us-east-1.amazonaws.com. udp 45 false 512" NOERROR qr,rd,ra 140 0.000983118s
...
服务和端点看起来不错
⇒ kubectl get svc --namespace=kube-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kube-dns ClusterIP 100.64.0.10 <none> 53/UDP,53/TCP 63d
...
⇒ kubectl get ep kube-dns --namespace=kube-system
NAME ENDPOINTS AGE
kube-dns 100.105.44.88:53,100.127.167.160:53,100.105.44.88:53 + 1 more... 63d
...
答案 0 :(得分:0)
我们也遇到了这个问题,但问题在于查询超时。
测试后的最佳方法是在所有节点和所有POD上引用其自己的节点DNS的dns。这样可以节省与其他节点Pod的往返路程,因为您可以为DNS运行多个Pod,但是dns服务将以某种方式分配流量,而POD最终将在节点之间拥有更多的网络流量。不确定是否可以在亚马逊eks上使用。