Prometheus, запущенный в Kubernetes, возвращает пустой ответ с сервера и отказано в разрешении

#kubernetes #prometheus

Вопрос:

Я довольно новичок в Kubernetes и Prometheus. Я следовал этим указаниям шаг за шагом.

Я попадаю в раздел, где я выполняю переадресацию портов с:

 kubectl port-forward <prometheus pod> 8080:9090 -n monitoring
 

В этот момент я должен быть в состоянии перейти к http://localhost:8080 чтобы получить панель управления Prometheus. Вместо этого я получаю:

 # curl http://localhost:8080
curl: (52) Empty reply from server
 

И в процессе переадресации портов мне отказывают в разрешении:

 Handling connection for 8080
E0723 19:45:40.532119   18108 portforward.go:400] an error occurred forwarding 8080 -> 9090: error forwarding port 9090 to pod 3a04bc19fcc2f23f2c1b095df8ba472b455f91d6453a72575078b858df8d87a1, uid : exit status 1: 2021/07/23 19:45:40 socat[22259] E connect(5, AF=2 127.0.0.1:9090, 16): Permission denied
 

Если я посмотрю на журналы модуля «прометей», он выглядит счастливым:

 level=info ts=2021-07-23T19:14:38.691Z caller=kubernetes.go:282 component="discovery manager scrape" discovery=kubernetes msg="Using pod service account via in-cluster config"
level=info ts=2021-07-23T19:14:38.692Z caller=kubernetes.go:282 component="discovery manager scrape" discovery=kubernetes msg="Using pod service account via in-cluster config"
level=info ts=2021-07-23T19:14:38.693Z caller=kubernetes.go:282 component="discovery manager scrape" discovery=kubernetes msg="Using pod service account via in-cluster config"
level=info ts=2021-07-23T19:14:38.695Z caller=main.go:1012 msg="Completed loading of configuration file" filename=/etc/prometheus/prometheus.yml totalDuration=10.027206ms remote_storage=8.294µs web_handler=307ns query_engine=2.796µs scrape=801.585µs scrape_sd=3.181796ms notify=23.042µs notify_sd=10.213µs rules=550.517µs
level=info ts=2021-07-23T19:14:38.695Z caller=main.go:796 msg="Server is ready to receive web requests."
 

Сначала я попробовал Google и не нашел никаких совпадений, которые включали бы все вышеперечисленное.

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

 # iptables -xvn -L|grep 8080
      21     1166 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:8080

 

Я подозреваю, что проблема может быть связана с пользователем root, запускающим модуль Prometheus. Если я kubectl exec войду в модуль Prometheus, все также будет принадлежать и работать как root. Я просмотрел ручную установку Prometheus, и в этих инструкциях всегда говорится, что вы создаете пользователя и группу Prometheus и запускаетесь от имени пользователя Prometheus. Но контейнер Prometheus поступает прямо из dockerhub, поэтому я не знаю, как бы я изменил пользователя внутри образа docker. Но на данный момент это всего лишь предположение, и на самом деле я понятия не имею.

Любая помощь будет признательна.

Это сервер Centos 7 под управлением Kubernetes 1.18. Prometheus-последнее изображение dockerhub prom/prometheus

ТИА

-Джон

Комментарии:

1. 1. что произойдет, если вы свернете 0.0.0.0:8080

2. 2. что произойдет, если вы запустите переадресацию портов, чтобы отменить sudo?

3. 3. Просто быстро протестирован на экземпляре GCP(используется ubuntu, а не centos. k8s 1.21)во вновь созданном кластере — после создания пространства имен, конфигурации-map.yaml, роли кластера. ямл и прометей-развертывание. yaml am может успешно выполнить kubectl port-forward prometheus-deployment-599bbd9457-pkxqk 8089:9090 -n monitoring и увидеть результат curl http://localhost:8089 —> ><a href=»/график»>Найдено<a href=»/график»></a>.

4. 4. вы пробовали перенаправить порт kubectl —адрес локального хоста,0.0.0.0 pod/<prometheus pod> 8080:9090 ?

5. Спасибо за все ответы. Извините за поздний ответ, так как я вчера отсутствовал. 1. Если я попытаюсь свернуться до 0.0.0.0:8080, я получу то же самое, что и при использовании localhost. 2. Я переадресовал порт как корневой 3. Да, мне все время отказывают в разрешении. Я задаюсь вопросом, не следует ли мне попробовать более старую версию premetheus в качестве теста. 4. Я попробую это сделать в следующий раз

Ответ №1:

Проблема была решена путем переключения centos в разрешающий режим.

Во время установки kubernetes в системах с поддержкой SELinux вы должны отключить его, чтобы все контейнеры могли получить доступ к файловой системе хоста.

Пожалуйста, обратите внимание, что отключение SELinux by setenforce 0 является лишь временным решением (например, отключение swap by swapoff -a

Чтобы полностью отключить их:

  • SELinux: редактирование /etc/selinux/config и настройка SELINUX=disabled
  • Своп: редактирование /etc/fstab и комментарий(#) запись свопа