Поделиться через


Время ожидания TCP при подключении kubectl или других сторонних средств к серверу API

В этой статье описывается устранение неполадок с временем ожидания TCP, возникающих при использовании kubectl или других сторонних средств для подключения к серверу API в Microsoft Служба Azure Kubernetes (AKS). Для обеспечения целей уровня обслуживания (SLOS) и соглашений об уровне обслуживания AKS использует плоскости управления высокой доступности (HA), которые масштабируются вертикально и горизонтально на основе числа ядер.

Симптомы

Время ожидания повторного подключения возникает.

Причина 1. Модули Pod, ответственные за обмен данными между узлами и плоскостями управления, не выполняются

Если только несколько команд API выполняются последовательно, следующие модули pod могут не находиться в состоянии выполнения.

  • konnectivity-agent
  • tunnelfront
  • aks-link

Примечание.

В более новых версиях tunnelfront AKS и aks-link заменены konnectivity-agentна , поэтому вы увидите konnectivity-agentтолько .

Эти модули pod отвечают за обмен данными между узлом и плоскости управления.

Решение. Сокращение использования узлов узла или стресс

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

Чтобы проверить, на каком узле размещен модуль pod, а также использование узла konnectivity-agent , выполните следующие команды:

# Check which node the konnectivity-agent pod is hosted on
$ kubectl get pod -n kube-system -o wide
    
# Check the usage of the node hosting the pod
$ kubectl top node

Причина 2. Доступ заблокирован на некоторых необходимых портах, полных доменных именах и IP-адресах

Если необходимые порты, полные доменные имена (FQDN) и IP-адреса не все открыты, несколько вызовов команд могут завершиться ошибкой. Безопасная, туннелированная связь в AKS между сервером API и kubelet (через konnectivity-agent pod) требует успешной работы некоторых элементов.

Решение. Открытие необходимых портов, полных доменных имен и IP-адресов

Дополнительные сведения о том, какие порты, полные доменные имена и IP-адреса необходимо открыть, см. в статьях Правила исходящей сети и полного доменного имени для кластеров Служба Azure Kubernetes (AKS).

Причина 3. Расширение TLS для согласования протокола application-Layer блокируется

Чтобы установить соединение между плоскостем управления и узлами, konnectivity-agent модуль pod требует расширения TLS для согласования протокола уровня приложений (ALPN). Возможно, вы ранее заблокировали это расширение.

Решение. Включение расширения ALPN

Включите расширение ALPN в модуле konnectivity-agent pod, чтобы предотвратить истечение времени ожидания TCP.

Причина 4. Диапазоны авторизованных IP-адресов сервера API не охватывают текущий IP-адрес.

Если на сервере API используются авторизованные диапазоны IP-адресов, вызовы API будут заблокированы, если IP-адрес не включен в авторизованные диапазоны.

Решение. Измените авторизованные диапазоны IP-адресов, чтобы он охватывал IP-адрес.

Измените диапазоны авторизованных IP-адресов таким образом, чтобы ваш IP-адрес был охвачен. Дополнительные сведения см. в разделе Об обновлении разрешенных диапазонов IP-адресов сервера API кластера.

Причина 5. Утечка вызовов клиента или приложения к серверу API

Частые вызовы GET могут накапливать и перегружать сервер API.

Решение. Используйте часы вместо вызовов GET, но убедитесь, что приложение не утечки этих вызовов

Убедитесь, что вы используете часы вместо частых вызовов GET к серверу API. Кроме того, необходимо убедиться, что сторонние приложения не утечка подключений или вызовов GET. Например, в архитектуре микрослужб Istio ошибка в приложении миксера создает подключение сервера API при каждом чтении секрета внутри системы. Так как это поведение происходит через регулярный интервал, подключения часов быстро накапливаются. Эти подключения в конечном итоге вызывают перегрузку сервера API независимо от шаблона масштабирования.

Причина 6. Слишком много выпусков в развертываниях Helm

Если в развертываниях Helm (диспетчер пакетов Kubernetes) используется слишком много выпусков, узлы начинают использовать слишком много памяти. Это также приводит к большому количеству ConfigMap объектов (данных конфигурации), что может привести к ненужным всплескам использования на сервере API.

Решение. Ограничение максимального количества редакций для каждого выпуска

Так как максимальное количество исправлений для каждого выпуска по умолчанию бесконечно, необходимо выполнить команду, чтобы задать это максимальное число разумным значением. Для Helm 2 команда helm 2 является helm init. Для Helm 3 команда helm обновление. --history-max <value> Задайте параметр при выполнении команды.

Версия Команда
Helm 2 helm init --history-max <maximum-number-of-revisions-per-release> ...
Helm 3 helm upgrade ... --history-max <maximum-number-of-revisions-per-release> ...

Причина 7. Внутренний трафик между узлами блокируется

В кластере AKS могут возникать внутренние блокировки трафика между узлами.

Решение. Устранение неполадок с ошибкой> "dial tcp <Node_IP:10250: время ожидания ввода-вывода"

Сведения об устранении неполадок со временем ожидания TCP, например "dial tcp <Node_IP>:10250: i/o timeout".

Причина 8. Кластер является частным

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

Решение. Использование клиента, который может получить доступ к подсети AKS

Так как кластер является частным, а его уровень управления находится в подсети AKS, он не может быть подключен к серверу API, если только он не находится в сети, которая может подключиться к подсети AKS. Это ожидаемое поведение.

В этом случае попробуйте получить доступ к серверу API из клиента в сети, которая может взаимодействовать с подсетью AKS. Кроме того, убедитесь, что группы безопасности сети (NSG) или другие устройства между сетями не блокируют пакеты.

Заявление об отказе от ответственности за сведения о продуктах сторонних производителей

В этой статье упомянуты программные продукты независимых производителей. Корпорация Microsoft не дает никаких гарантий, подразумеваемых и прочих, относительно производительности и надежности этих продуктов.

Свяжитесь с нами для получения помощи

Если у вас есть вопросы или вам нужна помощь, создайте запрос в службу поддержки или обратитесь за поддержкой сообщества Azure. Вы также можете отправить отзыв о продукте в сообщество отзывов Azure.