
У меня проблема, когда запись dns для внешнего домена сломалась. Характер проблемы на данный момент неизвестен.
Этот домен был запрошен из кластера kubernetes pod в Google Kubernetes Engine, когда запись была сломана. Проблема сохраняется (инцидент произошел более 2 месяцев назад) при запросе этого домена из кластера.
Кластерный DNS-резолвер использует metadata.google.internal для разрешения DNS, и из кластера эти запросы с помощью dig будут:
dig problematic.external.domain @169.254.169.254
# does not resolve and takes over 2 seconds
dig problematic.external.domain @1.1.1.1
# resolves correctly under 200ms
Создание новой виртуальной машины в том же проекте и зоне корректно разрешает проблемный домен. Это влияет только на активный сервер метаданных кластера DNS-резолвер.
Есть ли способ очистить кэши DNS или какие-либо другие предложения?
В целом я стараюсь избегать редактирования настроек DNS внутри кластера и предпочел бы использовать другие способы исправления.
Изменить дополнительную информацию:
NodeLocal DNSCache
уже активен в кластере и ссылается на эту документациюhttps://cloud.google.com/kubernetes-engine/docs/how-to/nodelocal-dns-cacheпроблема в метаданных dns сервера. Этот отрывок из списка преимуществ:
DNS queries for external URLs (URLs that don't refer to cluster resources) are forwarded directly to the local Cloud DNS metadata server, bypassing kube-dns.
Какой IP 169.254.169.254
решение1
Хотя не существует специального способа очистки сервера метаданных Cloud DNS, у каждого запроса есть TTL, и в большинстве случаев GCE DNS его учитывает. По истечении определенного времени он истекает, и кэш становится недействительным.
Тем не менее, если проблема связана с кэшем, ее следует устранить, заблокировав узел GKE с помощью kubectl cordon $NODENAME
команды.
Кроме того, вы можете обойти GCE DNS, указав конфигурацию заглушки DNS. Проверьтеэта ссылкадля получения подробной информации.
решение2
Дополнение NodeLocal DNS-кэша может помочь в разрешении упомянутых доменов в вашем случае, поскольку оно перенаправляет DNS-запросы для внешних URL-адресов непосредственно на локальный сервер метаданных Cloud DNS, минуя kube-dns, и поскольку ваша виртуальная машина Compute Engine может разрешать упомянутые DNS (используя локальный облачный DNS), ваш кластер также сможет это сделать.
Ссылаться наэта документациядля получения подробных инструкций по настройке NodeLocal DNSCache в кластере GKE.