#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
и комментарий(#) запись свопа