Недавно я обновил свой локальный кластер Kubernetes с 1.12.1 до 1.13.0 для очевидные причины, но теперь мой kubectl, запущенный на главном узле, больше не может получать логи контейнера ни с одного узла, кроме самого главного.
Эта проблема возникает на обоих узлах, где kubelet был обновлен до 1.13.0, а также на узлах, где kubelet все еще работает под версией 1.12.1. Это заставляет меня думать, что проблема не в самом kubelet, а в том, что что-то в обработке конфигурации в версии 1.13.0 изменилось, что привело к сбою регистрации.
Когда я делаю kubectl logs -f pod/podname-749c5c589f-vt7hj
, Я получил:
Error from server: Get https://10.48.76.46:10250/containerLogs/default/podname-749c5c589f-vt7hj/podname?follow=true: Forbidden
Я проверил все очевидные вещи, такие как сетевые соединения между мастером и миньоном, запускающим этот модуль, а также любые прокси, которые могут быть настроены, но он продолжает давать сбой. Также журнал kubelet на узле minion не регистрирует никаких ошибок.
Кроме того, другие обычные команды kubelet для этого модуля, например attach
и exec
отлично работают для этого модуля, поэтому связь между узлами работает нормально. Также сам модуль работает нормально, я просто не вижу его журналы.
Есть идеи, что случилось в 1.13.0, что могло привести к поломке?
У меня была переменная среды no_proxy для имен узлов миньонов в файле конфигурации kube-apiserver.yaml, но по какой-то причине kube-apiserver был подключен к IP-адресам узлов миньонов, а не к именам хостов. Раньше в версии 1.12.1 он этого не делал, так как подключался к главному узлу только через его IP-адрес. Я добавил IP-адреса всех узлов миньонов в конфигурацию, перезапустил kubelet (и, следовательно, kube-apiserver), и проблема теперь решена.
Совет: если вам нужно использовать прокси http / https для извлечения изображений из Интернета. убедитесь, что вы добавили и имя хоста, и IP-адрес всех основных узлов и миньонов в переменную среды no_proxy.