DNS Kubernetes периодически терпит неудачу с сервисом kube-dns и модулями CoreDNS, кажущимися ОК - PullRequest
2 голосов
/ 09 апреля 2019

У нас есть кластер Kubernetes с 1 главным и 3 узлами, управляемыми копами, которые мы используем для развертывания наших приложений.У нас есть минимальное соединение «от одного к другому», но нам нравится функция автоматического масштабирования в Kubernetes.Мы использовали это в течение последних нескольких месяцев, но недавно у нас появилась проблема, из-за которой наши модули не могут случайно подключиться к нашему 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

Что странно, так это то, что это происходит только иногда, тогда, когда модуль воссоздан, он снова будет работать, и это вскоре отключит его.

Мы попытались выполнить все инструкции по отладке kube-dns от Kube.безрезультатно, пробовал бесчисленное множество решений, таких как изменение конфигурации ndots и даже экспериментировал с переходом на CoreDNS, но все еще испытывал те же проблемы с перебоями.Мы используем Calico для работы в сети, но трудно сказать, происходит ли это на сетевом уровне, поскольку у нас не было проблем с другими сервисами.

Есть ли у кого-нибудь идеи, где еще искать, что может быть причинойтакое поведение, или если вы сталкивались с таким поведением раньше, не могли бы вы рассказать, как вы его решили?

Спасибо

Стручки для CoreDNS выглядят хорошо

⇒  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
...

1 Ответ

0 голосов
/ 09 апреля 2019

Мы также сталкивались с этой проблемой, но проблема была с тайм-аутом запроса.

Лучший способ после тестирования состоял в том, чтобы запустить dns на всех узлах и всех POD, ссылаясь на свой собственный DNS-узел.Это сохранит циклические переходы к другим модулям узлов, потому что вы можете запускать несколько модулей для DNS, но служба DNS будет распределять трафик каким-то образом, и в результате POD будет иметь больший сетевой трафик между узлами.Не уверен, если это возможно на Амазон Экс.

...