Чудесная ошибка nodelocaldns
dial tcp 10.233.0.3:53: i/o timeout
Исходные данные
10.233.0.3, как наверное понятно из контекста — это DNS сервер кластера. Обычно этот IP используется при установке кластера кубернетес при помощи kubespray. На самом деле — это сервис типа ClusterIP, который перекидывает данные на два пода coredns. В системе это выглядит как то так:
# ipvsadm -Ln | grep -A2 10.233.0.3 TCP 10.233.0.3:53 rr -> 10.233.65.9:53 Masq 1 0 32 -> 10.233.66.210:53 Masq 1 0 32
nodelocaldns, установленные на нодах кластера, пытаются до него достучаться по протоколу tcp.
Когда появляется ошибка
После добавления новой ноды в кластер при помощи kubespray. Что то типа такого:
# ansible-playbook -i inventory/my-cluster/inventory.ini scale.yml
После этого все поды на новой ноде перестанут резолвить DNS имена. При этом прямое обращение по IP к coredns будет работать.
# telnet 10.233.65.9 53 Trying 10.233.65.9... Connected to 10.233.65.9. Escape character is '^]'. Connection closed by foreign host.
А вот обращение на IP сервиса уже нет.
Как лечить
При добавлении ноды в кластер никогда не используйте scale.yml. Пользуйтесь только cluster.yml, Т.е. добавили новую ноду в инвентори файл и сразу cluster.yml.
Если всё же сначала сделали scale и получили ошибку, просто перезапустите плейбук cluster.yml. И все станет хорошо.