Подтвердить что ты не робот

"Невозможно подключить тайм-аут квитирования Net/HTTP: TLS" - Почему Kubectl не может подключиться к серверу Azure Kubernetes? (АКС)

  Мой вопрос (к MS и всем остальным): почему возникает эта проблема, и какие обходные пути могут быть реализованы самими пользователями/клиентами, а не службой поддержки Microsoft?

Очевидно, было несколько других вопросов по этому вопросу:

  1. Ошибка управляемого Azure Kubernetes
  2. Не удается связаться с нашим Azure-AKS kube - тайм-аут рукопожатия TLS
  3. Azure Kubernetes: Тайм-аут рукопожатия TLS (этот отзыв имеет некоторые отзывы Microsoft)

В репозитории AKS опубликовано несколько выпусков GitHub:

  1. https://github.com/Azure/AKS/issues/112
  2. https://github.com/Azure/AKS/issues/124
  3. https://github.com/Azure/AKS/issues/164
  4. https://github.com/Azure/AKS/issues/177
  5. https://github.com/Azure/AKS/issues/324

Плюс несколько тем в твиттере:

  1. https://twitter.com/ternel/status/955871839305261057

TL; DR

Skip to workarounds in Answers below.

В настоящее время лучшим решением является отправка запроса о помощи - и подождите - или воссоздание кластера AKS (возможно, несколько раз, скрестите пальцы, см. ниже...), но должно быть что-то лучшее. По крайней мере, предоставьте возможность пользователям AKS для предварительного просмотра, независимо от уровня поддержки, обновить уровень серьезности запросов на поддержку для ЭТОЙ конкретной проблемы.

Вы также можете попробовать масштабировать свой кластер (при условии, что это не сломает ваше приложение).

А как насчет GitHub?

Многие из указанных выше проблем GitHub были закрыты как решенные, но проблема сохраняется. Ранее существовал документ с объявлениями о проблеме, но в настоящее время такие обновления статуса недоступны, хотя проблема продолжает появляться:

  1. https://github.com/Azure/AKS/tree/master/annoucements

Я публикую это, поскольку у меня есть несколько новых лакомых кусочков, которых я не видел в других местах, и мне интересно, есть ли у кого-нибудь идеи относительно других возможных вариантов решения этой проблемы.

Затрагиваемое использование ресурсов виртуальных машин и узлов

Первая часть, которую я не видел, упоминавшаяся где-то в другом месте, - это использование ресурсов на узлах /vms/instance, на которые влияет вышеуказанная проблема Kubectl "Невозможно подключиться к серверу: net/http: TLS handshake timeout".

Использование производственного узла

Узлы на моем затронутом кластере выглядят так:

net/http: TLS handshake timeout

Падение загрузки и сети io сильно коррелирует как с увеличением использования диска, так и с периодом времени, когда мы начали испытывать проблему.

Общее использование узлов/виртуальных машин, как правило, остается неизменным до появления этой диаграммы в течение предыдущих 30 дней, за исключением нескольких проблем, связанных с трафиком на рабочих сайтах/обновлениями и т.д.

Метрики после устранения проблем (добавлено вскрытие)

К вышеупомянутому пункту, вот метрики того же узла после масштабирования вверх, а затем обратно вниз (что, как оказалось, облегчает нашу проблему, но не всегда работает - см. ответы внизу):

enter image description here

Обратите внимание на "провал" в процессоре и сети? Это когда проблема Net/http: TLS повлияла на нас - и когда сервер AKS был недоступен для Kubectl. Похоже, он не общался с VM/Node, а также не отвечал на наши запросы.

Как только мы вернулись (масштабировали # узлы вверх на один, а затем вернулись вниз - см. ответы об обходном пути), показатели (ЦП и т.д.) Вернулись в нормальное состояние - и мы смогли подключиться из Kubectl. Это означает, что мы, вероятно, можем создать сигнал тревоги для этого поведения (и у меня есть проблема, спрашивая об этом на стороне DevOps Azure: https://github.com/Azure/AKS/issues/416)

Размер узла потенциально влияет на частоту выпуска

Циммергрен на GitHub указывает, что у него меньше проблем с большими экземплярами, чем с пустыми узлами меньших узлов. Это имеет смысл для меня и может указывать на то, что серверы AKS распределяют рабочую нагрузку (см. следующий раздел) в зависимости от размера экземпляров.

"Размер узлов (например, D2, A4 и т.д.) :) Я сталкивался с тем, что при работе на А4 и выше мой кластер более здоров, чем, например, на А2. (К сожалению, у меня более десятка подобных опытов с комбинациями размеров и сбоями кластеров). "(https://github.com/Azure/AKS/issues/268#issuecomment-375715435)

Другие ссылки на размер кластера:

  1. giorgited (https://github.com/Azure/AKS/issues/268#issuecomment-376390692)

Может ли сервер AKS, отвечающий за более мелкие кластеры, попадать чаще?

Наличие нескольких "серверов" управления AKS в одном регионе Az

Следующее, что я не видел, упомянутое в другом месте, это тот факт, что вы можете иметь несколько кластеров, работающих бок о бок в одном и том же регионе, где один кластер (производство для нас в этом случае) получает "net/http: TLS handshake timeout" а другой работает нормально и может нормально подключаться через Kubectl (для нас это наша идентичная промежуточная среда).

Тот факт, что пользователи (Zimmergren и т.д. Выше), кажется, считают, что размер узла влияет на вероятность того, что эта проблема повлияет, вы также указываете на то, что размер узла может относиться к тому, как обязанности субрегиона назначаются субрегиональному AKS. серверы управления.

Это может означать, что повторное создание кластера с другим размером кластера с большей вероятностью поместит вас на другой сервер управления, что облегчит проблему и уменьшит вероятность того, что потребуется многократное повторное создание.

Использование промежуточного кластера

Оба наших кластера AKS находятся на востоке США. В качестве ссылки на приведенные выше метрики "производственного" кластера использование ресурсов "промежуточного" кластера (также восток США) не приводит к значительному падению ввода-вывода ЦП/сети - И не имеет увеличения дискового и т.д. За тот же период:

net/http: TLS handshake timeout staging instance is reachable via kubectl.

На идентичные среды влияют по-разному

Оба наших кластера работают с одинаковыми входами, службами, модулями и контейнерами, поэтому маловероятно, что что-то, что делает пользователь, вызывает эту проблему.

Повторное создание успешное ИНОГДА.

Вышеупомянутое существование нескольких субрегиональных обязанностей сервера управления AKS имеет смысл с поведением, описанным другими пользователями на github (https://github.com/Azure/AKS/issues/112), где некоторые пользователи могут воссоздать кластер (с которым можно связаться), в то время как другие повторно создать и все еще иметь проблемы.

Чрезвычайная ситуация может = многократное воссоздание

В чрезвычайной ситуации (т.е. ваш производственный сайт... как наш... необходимо управлять) вы можете НАДЕЖНО просто заново создать, пока не получите работающий кластер, который оказывается на другом сервере управления AKS экземпляр (тот, который не затронут), но имейте в виду, что это может не произойти с первой попытки - воссоздание кластера AKS происходит не совсем мгновенно.

Это сказал...

Ресурсы на затронутых узлах продолжают функционировать

Кажется, что все контейнеры/входы/ресурсы на нашей затронутой виртуальной машине работают хорошо, и у меня нет никаких сигналов тревоги для мониторинга времени безотказной работы/ресурсов (кроме странности использования, указанной выше на графиках)

Я хочу знать, почему возникает эта проблема, и какие обходные пути могут быть реализованы самими пользователями, а не службой поддержки Microsoft (в настоящее время есть билет). Если у вас есть идея, дайте мне знать.

Потенциальные намеки на причину

  1. https://github.com/Azure/AKS/issues/164#issuecomment-363613110
  2. https://github.com/Azure/AKS/issues/164#issuecomment-365389154

Почему нет ГКЕ?

Я понимаю, что Azure AKS находится в предварительном просмотре и что многие люди перешли в GKE из-за этой проблемы(). Тем не менее, мой опыт работы с Azure до сих пор был только положительным, и я предпочел бы предложить решение, если это вообще возможно.

А также... GKE иногда сталкивается с чем-то похожим:

  1. Тайм-аут рукопожатия TLS с kubernetes в GKE

Мне было бы интересно посмотреть, решило ли проблему масштабирование узлов в GKE.

4b9b3361

Ответ 1

Обходное решение 1 (может не работать для всех)

Интересное решение (работающее для меня) для тестирования - это масштабирование количества узлов в вашем кластере, а затем назад...

enter image description here

  1. Войдите в Azure Console - сервисное лезвие Kubernetes.
  2. Увеличьте свой кластер на 1 узел.
  3. Дождитесь завершения масштабирования и попытайтесь подключиться (вы должны быть в состоянии).
  4. Увеличьте масштаб кластера до нормального размера, чтобы избежать увеличения затрат.

В качестве альтернативы вы можете (возможно) сделать это из командной строки:

az aks scale --name <name-of-cluster> --node-count <new-number-of-nodes> --resource-group <name-of-cluster-resource-group>

Поскольку это проблема, и я использовал веб-интерфейс, я не уверен, что вышеописанное идентично или будет работать.

Общее время, которое потребовалось мне ~ 2 минуты - для моей ситуации, которая намного лучше, чем повторное создание/настройка кластера (возможно, несколько раз...)

Что, как говорится....

Zimmergren поднимает некоторые хорошие моменты, что масштабирование не является истинным решением:

"Иногда это работало, когда кластер самостоятельно исцелял период после масштабирования. Иногда это случалось с теми же ошибками. Я не рассматриваю масштабирование решения этой проблемы, поскольку это вызывает другие проблемы в зависимости от того, как настроены настройки. не будет доверять этой рутине для рабочей нагрузки GA, это точно. В текущем предварительном просмотре это немного дикий запад (и ожидаемый), и я счастлив взорвать кластер и создать новый, когда это прерывается непрерывно. " (https://github.com/Azure/AKS/issues/268#issuecomment-395299308)

Обратная связь с Azure

Поскольку у меня был билет поддержки, открытый в то время, когда я столкнулся с вышеупомянутым масштабирующим решением, я смог получить обратную связь (или, скорее, догадка) о том, что вышеприведенное могло бы сработать, здесь перефразированный ответ:

"Я знаю, что масштабирование кластера иногда может помочь, если вы попадаете в состояние, когда количество узлов несовместимо между" az aks show "и" kubectl get nodes ". Это может быть похоже".

Обходные ссылки:

  1. Пользователь GitHub Масштабируемые узлы с консоли и исправили проблему: https://github.com/Azure/AKS/issues/268#issuecomment-375722317

Обходной путь не работал?

Если это НЕ работает для вас, отправьте комментарий ниже, поскольку я собираюсь попытаться сохранить обновленный список того, как часто возникает проблема, независимо от того, разрешает ли она себя и работает ли это решение через пользователей Azure AKS (выглядит как это не работает для всех).

Пользователи масштабирования вверх/вниз DID НЕ работают для:

  1. omgsarge (https://github.com/Azure/AKS/issues/112#issuecomment-395231681)
  2. Циммергрен (https://github.com/Azure/AKS/issues/268#issuecomment-395299308)
  3. Сама операция sercand-scale потерпела неудачу - не уверен, что это повлияло бы на возможность подключения (https://github.com/Azure/AKS/issues/268#issuecomment-395301296)

Масштабирование вверх/вниз DID работает для:

  1. мне
  2. LohithChanda (https://github.com/Azure/AKS/issues/268#issuecomment-395207716)
  3. Циммергрен (https://github.com/Azure/AKS/issues/268#issuecomment-395299308)

Специальная поддержка Azure AKS

Если после всего диагноза вы все еще страдаете от этой проблемы, пожалуйста, не стесняйтесь отправлять электронную почту на адрес [email protected]

Ответ 2

Добавление другого ответа, поскольку это теперь официальное решение Azure Support, когда указанные попытки не работают. Я не сталкивался с этой проблемой через некоторое время, поэтому я не могу проверить это, но кажется, что это имеет смысл для меня (на основе предыдущего опыта).

Кредит на эту одну/полную тему, найденную здесь (https://github.com/Azure/AKS/issues/14#issuecomment-424828690)

Проверка проблем туннелирования

  1. ssh к узлу агента, который запускает контейнер tunnelfront
  2. получить туннельные журналы: "docker ps" → "докеры"
  3. "nslookup", чей fqdn может получить из команды выше → если он разрешает ip, что означает, что dns работает, а затем перейдите к следующему шагу
  4. "ssh -vv azureuser @-p 9000" → если порт работает, перейдите к следующему шагу
  5. "docker exec -it/bin/bash", введите "ping google.com ", если это не ответ, что означает, что передняя панель туннеля не имеет внешней сети, а затем выполните следующий шаг
  6. перезапустите kube -p roxy, используя "kubectl delete po -n kube-system", выберите router kube -p, который запускается на том же узле с туннелем. клиент может использовать "kubectl get po -n kube-system -o wide"

Я чувствую, что эта конкретная работа может быть автоматизирована (наверняка на стороне Azure, но, вероятно, на стороне сообщества).

Специальная поддержка Azure AKS

Если после всего диагноза вы все еще страдаете от этой проблемы, пожалуйста, не стесняйтесь отправлять электронную почту на адрес [email protected]

Ответ 3

Обходной путь 2 Повторно создайте кластер (несколько очевидный)

Я добавляю это, потому что есть некоторые детали, которые нужно иметь в виду, и хотя я затронул это в своем первоначальном Вопросе, эта вещь получила много времени, поэтому я добавляю конкретные подробности о повторном создании здесь.

Повторное создание кластера не всегда работает

Согласно вышеизложенному в моем первоначальном вопросе есть несколько экземпляров AKS Server, которые делят ответственность за данный регион Azure (мы думаем). Некоторые или все из них могут быть затронуты этой ошибкой, в результате чего ваш кластер будет недоступен через Kubectl.

Это означает, что если вы заново создаете свой кластер, а некоторые - как на одном и том же сервере AKS, возможно, что новый кластер также будет недоступен...

Дополнительные попытки повторного создания

Вероятно, повторное создание несколько раз приведет к тому, что вы в конечном итоге приземлитесь на свой новый кластер на одном из других серверов AKS (который работает нормально). Насколько я могу судить, я не вижу никаких признаков того, что ВСЕ серверы AKS будут сталкиваться с этой проблемой сразу через некоторое время (если когда-либо).

Разный размер узла кластера

Если вы находитесь в крайнем случае и хотите наивысшую возможную вероятность (мы этого не подтвердили), что ваше повторное создание приземляется на другом сервере управления AKS - выберите другой размер узла при создании нового кластера (см. Раздел "Размер узла" начальный вопрос выше).

Я открыл этот билет, обратившись к Azure DevOps, независимо от того, является ли размер узла ACTUALLY соответствующим решению о том, какие кластеры администрируются с помощью серверов управления AKS: https://github.com/Azure/AKS/issues/416

Поддержка Ticket Fix vs. Self Healing

Поскольку есть много пользователей, которые указывают, что проблема иногда решает сам и просто уходит, я думаю, что разумно догадаться, что поддержка действительно исправляет оскорбительный сервер AKS (что может привести к тому, что другие пользователи, имеющие свои кластеры, исправлены) - Self Heal ') в отличие от фиксации отдельного пользовательского кластера.

Создание билетов на поддержку

Для меня вышеизложенное, скорее всего, означает, что создание билета, вероятно, является хорошей вещью, поскольку он будет исправлять другие пользовательские кластеры, испытывающие одну и ту же проблему, - это также может быть аргументом для разрешения эскалации серьезности проблемы эмиссии для этой конкретной проблемы.

Я думаю, что это также достойный показатель того, что, возможно, поддержка Azure не выяснила, как полностью предупредить проблему, и в этом случае создание талона поддержки также служит этой цели.

Я также спросил Azure DevOps, будут ли они предупреждать о проблеме (исходя из моего опыта, легко визуализирующего проблему на основе изменений производительности процессора и сети IO) на их стороне: https://github.com/Azure/AKS/issues/416

Если NOT (не слышал назад), то имеет смысл создать билет EVEN, если вы планируете воссоздать свой кластер, поскольку этот билет затем сделает Azure DevOps осведомленным о проблеме, что приведет к исправлению для других пользователей в этом управлении кластером сервер.

Вещи, чтобы сделать Cluster Re-Creation проще

Я добавлю к этому (отзывы/идеи приветствуются), но с головы:

  1. Будьте осмотрительны (очевидны) о том, как вы храните все файлы YAML, используемые для создания кластера (даже если вы не будете повторно развертывать часто для своего приложения по дизайну).
  2. Сценарий изменений DNS для ускорения указания на новый экземпляр. Если у вас есть приложение или служба, использующая общественность, которая использует DNS (возможно, что-то вроде этого примера для доменов Google: https://gist.github.com/cyrusboadway/5a7b715665f33c237996, Полные документы: https://cloud.google.com/dns/api/v1/)

Ответ 4

У нас только что была эта проблема для одного из наших кластеров. Отправил заявку в службу поддержки и через 5 минут перезвонил инженеру, спрашивающему, можно ли им перезапустить API-сервер. Через 2 минуты снова заработало.

Причина была в тайм-аутах в очереди сообщений.