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


Проблемы с подключением туннелю

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

Схема подложки, управляемой Azure AKS, управляемой клиентом виртуальной сети и подсети Azure, а также туннеля из API в модуль pod туннеля.

Примечание.

Ранее компонент туннеля AKS был tunnel-front. Теперь он был перенесен в службу Konnectivity, вышестоящий компонент Kubernetes. Дополнительные сведения об этой миграции см. в заметках о выпуске AKS и журнале изменений.

Предварительные требования

Симптомы

Вы получаете сообщение об ошибке, которое напоминает следующие примеры о порту 10250:

Ошибка с сервера: get "https://< aks-node-name>:10250/containerLogs/namespace>/<<pod-name>/<container-name>": dial tcp <aks-node-ip>:10250: i/o timeout

Ошибка с сервера: ошибка набора серверной части: dial tcp <aks-node-ip>:10250: i/o timeout

Сервер API Kubernetes использует порт 10250 для подключения к kubelet узла для получения журналов. Если порт 10250 заблокирован, журналы kubectl и другие функции будут работать только для модулей pod, выполняемых на узлах, в которых запланирован компонент туннеля. Дополнительные сведения см. в разделе "Порты и протоколы Kubernetes: рабочие узлы".

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

  • Веб-перехватчики контроллера приема

  • Возможность извлечения журнала (с помощью команды kubectl logs )

  • Выполнение команды в контейнере или получение внутри контейнера (с помощью команды kubectl exec )

  • Переадресация одного или нескольких локальных портов pod (с помощью команды kubectl port-forward )

Причина 1. Группа безопасности сети (NSG) блокирует порт 10250

Примечание.

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

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

Если группа безопасности сети блокирует порт 10250 на уровне виртуальной сети, функции туннеля (например, журналы и выполнение кода) будут работать только для модулей pod, запланированных на узлах, где запланированы модули pod туннеля. Другие модули pod не будут работать, так как их узлы не смогут достичь туннеля, а туннель запланирован на других узлах. Чтобы проверить это состояние, можно проверить подключение с помощью команд netcat (nc) или telnet. Вы можете запустить команду az vmss run-commande , чтобы провести тест подключения и проверить, успешно ли выполнено, время ожидания или возникает другая проблема:

az vmss run-command invoke --resource-group <infra-or-MC-resource-group> \
    --name <virtual-machine-scale-set-name> \
    --command-id RunShellScript \
    --instance-id <instance-id> \
    --scripts "nc -v -w 2 <ip-of-node-that-schedules-the-tunnel-component> 10250" \
    --output tsv \
    --query 'value[0].message'

Решение 1. Добавление правила NSG для разрешения доступа к порту 10250

Если вы используете группу безопасности сети и у вас есть определенные ограничения, убедитесь, что вы добавили правило безопасности, которое разрешает трафик для порта 10250 на уровне виртуальной сети. На следующем изображении портал Azure показан пример правила безопасности:

Снимок экрана: область

Если вы хотите быть более строгим, вы можете разрешить доступ к порту 10250 только на уровне подсети.

Примечание.

  • Поле "Приоритет" должно быть настроено соответствующим образом. Например, если у вас есть правило, которое запрещает несколько портов (включая порт 10250), правило, отображаемое на изображении, должно иметь более низкий приоритет (более низкие числа имеют более высокий приоритет). Дополнительные сведения о приоритете см. в разделе "Правила безопасности".

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

Причина 2. Средство неусложненного брандмауэра (UFW) блокирует порт 10250

Примечание.

Это приводит к любому компоненту туннеля, который у вас есть в кластере AKS.

Несложный брандмауэр (UFW) — это программа командной строки для управления брандмауэром netfilter . Узлы AKS используют Ubuntu. Поэтому UFW устанавливается на узлах AKS по умолчанию, но UFW отключен.

По умолчанию, если UFW включен, он блокирует доступ ко всем портам, включая порт 10250. В этом случае вряд ли можно использовать Secure Shell (SSH) для подключения к узлам кластера AKS для устранения неполадок. Это связано с тем, что UFW также может блокировать порт 22. Чтобы устранить неполадки, можно запустить команду az vmss run-commande , чтобы вызвать команду ufw, которая проверяет, включена ли UFW:

az vmss run-command invoke --resource-group <infra-or-MC-resource-group> \
    --name <virtual-machine-scale-set-name> \
    --command-id RunShellScript \
    --instance-id <instance-id> \
    --scripts "ufw status" \
    --output tsv \
    --query 'value[0].message'

Что делать, если результаты указывают, что UFW включен, и он не разрешает порт 10250? В этом случае функции туннеля (например, журналы и выполнение кода) не будут работать для модулей pod, запланированных на узлах с включенным UFW. Чтобы устранить проблему, примените одно из следующих решений на UFW.

Внимание

Прежде чем использовать это средство для внесения изменений, просмотрите политику поддержки AKS (особенно обслуживание узлов и доступ), чтобы предотвратить вход кластера в неподдерживаемый сценарий.

Примечание.

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

Решение 2a. Отключение неусложненного брандмауэра

Выполните следующую az vmss run-command invoke команду, чтобы отключить UFW:

az vmss run-command invoke --resource-group <infra-or-MC-resource-group> \
    --name <virtual-machine-scale-set-name> \
    --command-id RunShellScript \
    --instance-id <instance-id> \
    --scripts "ufw disable" \
    --output tsv \
    --query 'value[0].message'

Решение 2b. Настройка несложного брандмауэра для разрешения доступа к порту 10250

Чтобы принудительно разрешить доступ к порту 10250, выполните следующую az vmss run-command invoke команду:

az vmss run-command invoke --resource-group <infra-or-MC-resource-group> \
    --name <virtual-machine-scale-set-name> \
    --command-id RunShellScript \
    --instance-id <instance-id> \
    --scripts "ufw allow 10250" \
    --output tsv \
    --query 'value[0].message'

Причина 3. Инструмент iptables блокирует порт 10250

Примечание.

Это приводит к любому компоненту туннеля, который у вас есть в кластере AKS.

Средство iptables позволяет системным администраторам настраивать правила фильтрации IP-пакетов брандмауэра Linux. Правила можно настроить iptables для блокировки связи через порт 10250.

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

iptables --list --line-numbers

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

  • num (номер правила)
  • target
  • prot (протокол)
  • opt
  • source
  • destination

INPUT Содержит ли цепочка правило, в котором находится целевой объектDROP, протокол имеет tcpзначение и назначение tcp dpt:10250? Если это так, iptables блокирует доступ к целевому порту 10250.

Решение 3. Удаление правила iptables, которое блокирует доступ к порту 10250

Выполните одну из следующих команд, чтобы удалить iptables правило, которое запрещает доступ к порту 10250:

iptables --delete INPUT --jump DROP --protocol tcp --source <ip-number> --destination-port 10250
iptables --delete INPUT <input-rule-number>

Чтобы устранить точный или потенциальный сценарий, рекомендуется проверить iptable вручную , выполнив iptables --help команду.

Внимание

Прежде чем использовать это средство для внесения изменений, просмотрите политику поддержки AKS (особенно обслуживание узлов и доступ), чтобы предотвратить вход кластера в неподдерживаемый сценарий.

Причина 4. Исходящий порт 1194 или 9000 не открыт

Примечание.

Эта причина относится только к только модулям tunnel-front pod и aks-link модулям pod.

Существуют ли ограничения исходящего трафика, например из брандмауэра AKS? Если есть, порт 9000 требуется для включения правильной tunnel-front функциональности модуля pod. Аналогичным образом для модуля pod требуется aks-link порт 1194.

Коннекттивность зависит от порта 443. По умолчанию этот порт открыт. Поэтому вам не нужно беспокоиться о проблемах с подключением на этом порту.

Решение 4. Открытие порта 9000

Хотя tunnel-front он был перемещен в службу Konnectivity, некоторые кластеры AKS по-прежнему используются tunnel-front, что зависит от порта 9000. Убедитесь, что виртуальное устройство или любое сетевое устройство или программное обеспечение разрешает доступ к порту 9000. Дополнительные сведения о необходимых правилах и зависимостях см. в статье "Глобальные правила сети Azure".

Причина 5. Исчерпание портов преобразования сетевых адресов источника (SNAT)

Примечание.

Это приводит к любому компоненту туннеля, который у вас есть в кластере AKS. Однако он не применяется к частным кластерам AKS. Исчерпание портов преобразования сетевых адресов источника (SNAT) может происходить только для общедоступного обмена данными. Для частных кластеров AKS сервер API находится в виртуальной сети ИЛИ подсети AKS.

Если происходит исчерпание портов SNAT (сбой портов SNAT), узлы не могут подключаться к серверу API. Контейнер туннеля находится на стороне сервера API. Поэтому подключение к туннелям не будет установлено.

Если ресурсы портов SNAT исчерпаны, исходящие потоки завершаются ошибкой, пока существующие потоки не выпускают некоторые порты SNAT. Azure Load Balancer освобождает порты SNAT при закрытии потока. В нем используется четырехминутное время ожидания простоя для восстановления портов SNAT из потоков простоя.

Порты SNAT можно просмотреть из метрик подсистемы балансировки нагрузки AKS или службы диагностика, как описано в следующих разделах. Дополнительные сведения о просмотре портов SNAT см. в Разделы справки просмотр статистики подключения для исходящего трафика?.

Метрики подсистемы балансировки нагрузки AKS

Чтобы использовать метрики подсистемы балансировки нагрузки AKS для просмотра портов SNAT, выполните следующие действия.

  1. В портал Azure найдите и выберите службы Kubernetes.

  2. В списке служб Kubernetes выберите имя кластера.

  3. В области меню кластера найдите заголовок "Параметры ", а затем выберите "Свойства".

  4. Выберите имя, указанное в группе ресурсов инфраструктуры.

  5. Выберите подсистему балансировки нагрузки Kubernetes .

  6. В области меню подсистемы балансировки нагрузки найдите заголовок "Мониторинг " и выберите "Метрики".

  7. Для типа метрики выберите число подключений SNAT.

  8. Выберите Применить разделение.

  9. Задайте для параметра "Разделить по состоянию подключения".

Диагностика службы

Чтобы использовать службу диагностика для просмотра портов SNAT, выполните следующие действия.

  1. В портал Azure найдите и выберите службы Kubernetes.

  2. В списке служб Kubernetes выберите имя кластера.

  3. В области меню кластера выберите " Диагностика и решение проблем".

  4. Выберите "Проблемы с подключением".

  5. В разделе "Подключение SNAT" и "Выделение портов" выберите "Просмотр сведений".

  6. При необходимости нажмите кнопку "Диапазон времени" для настройки интервала времени.

Решение 5a. Убедитесь, что приложение использует пул подключений

Это может произойти, так как приложение не использует существующие подключения. Рекомендуется не создавать одно исходящее подключение для каждого запроса. Такая конфигурация может привести к исчерпанию подключения. Проверьте, соответствует ли код приложения рекомендациям и использует ли пул подключений. Большинство библиотек поддерживают пул подключений. Поэтому вам не нужно создавать новое исходящее подключение для каждого запроса.

Решение 5b. Настройка выделенных исходящих портов

Если все в приложении в порядке, необходимо настроить выделенные исходящие порты. Дополнительные сведения о выделении исходящих портов см. в разделе "Настройка выделенных исходящих портов".

Решение 5c. Использование шлюза преобразования управляемых сетевых адресов (NAT) при создании кластера

Вы можете настроить новый кластер для использования шлюза преобразования сетевых адресов (NAT) для исходящих подключений. Дополнительные сведения см. в статье "Создание кластера AKS с помощью управляемого шлюза NAT".

Заявление об отказе от ответственности за контактные данные сторонней организации

Корпорация Майкрософт предоставляет контактные данные сторонних производителей в целях получения дополнительных сведений по данной теме. Эти данные могут быть изменены без предварительного уведомления. Корпорация Майкрософт не гарантирует точность контактных данных сторонних производителей.

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

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