kubernetes metrics-server получает 403 от всех узлов

Вопрос или проблема

Я создал кластер kubernetes, используя это руководство для fedora: https://docs.fedoraproject.org/en-US/quick-docs/using-kubernetes/

Я настроил 1 управляющую панель и 1 рабочую ноду (2 VМ libvirt), и я могу развертывать приложения, управлять входами и так далее…

Единственное, чего мне не хватает, это получения некоторых метрик (kubectl top nodes/kubectl top pods), поэтому я попытался установить metrics-server, используя официальный yaml файл (https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml).

Затем я отредактировал развертывание, чтобы исправить ошибки сертификата x509, добавив --kubelet-insecure-tls в список аргументов (это не производственный кластер, поэтому я оставил сертификаты по умолчанию).

Моя проблема в том, что metrics server не работает: в логе отображаются ошибки при получении данных с нод, потому что он получает 403 (запрещено), когда запрашивает ресурсы:

I0919 08:32:37.415029       1 dynamic_serving_content.go:132] "Starting controller" name="serving-cert::/tmp/apiserver.crt::/tmp/apiserver.key"
I0919 08:32:37.415090       1 secure_serving.go:213] Serving securely on [::]:10250
I0919 08:32:37.415119       1 tlsconfig.go:240] "Starting DynamicServingCertificateController"
E0919 08:32:37.417167       1 scraper.go:149] "Failed to scrape node" err="request failed, status: \"403 Forbidden\"" node="f40-work1"
E0919 08:32:37.421847       1 scraper.go:149] "Failed to scrape node" err="request failed, status: \"403 Forbidden\"" node="f40main"

Я застрял и не могу понять, как это решить, Google не может мне помочь…

Версии узлов:

NAME        STATUS   ROLES                                            AGE     VERSION   INTERNAL-IP       EXTERNAL-IP   OS-IMAGE                           KERNEL-VERSION            CONTAINER-RUNTIME
f40-work1   Ready    metrics-server-aggregated-reader                 2d19h   v1.29.8   192.168.124.128   <none>        Fedora Linux 40 (Server Edition)   6.10.10-200.fc40.x86_64   cri-o://1.28.2
f40main     Ready    control-plane,metrics-server-aggregated-reader   2d20h   v1.29.8   192.168.124.146   <none>        Fedora Linux 40 (Server Edition)   6.10.9-200.fc40.x86_64    cri-o://1.28.2

Я пометил оба узла с ролью metrics-server-aggregate-reader, пытаясь исправить ошибки, но безуспешно…

Пока что есть только один УЖАСНЫЙ хак, который сработал для меня на версиях кластера k8s 1.24+ (и да, я прочитал и следовал тоннам вопросов и пробовал разные подходы, включая прямые вопросы авторам metrics-server, ничего не сработало (однако, некоторые, кажется, сработали для некоторых людей)):

Отказ от ответственности: НЕ СЛЕДУЙТЕ ЭТОМУ

Измените --authorization-mode=Webhook на --authorization-mode=AlwaysAllow в среде запуска kubelet (инстансы на базе redhat имеют это определение в unit-файле, я предпочитаю использовать конфигурацию включения drop-in в /etc/systemd/system/kubelet/service.d) и перезапустите kubelet.

Этот хак фактически отключает авторизацию на порту службы kubelet 10250, так что любой, имея сетевое подключение к нему, может сделать всё, что угодно, что он может себе представить.

Буду рад любому более элегантному рабочему решению.

Ответ или решение

Ошибка 403 в Metrics Server Kubernetes: Возможные Решения

Проблема, с которой вы столкнулись, связана с тем, что Metrics Server в вашем кластере Kubernetes не может получить доступ к необходимым метрикам из-за ошибки 403 (доступ запрещен). Это может быть вызвано несколькими причинами, включая неправильные настройки авторизации на узлах Kubernetes. Рассмотрим несколько шагов, которые помогут вам решить данную проблему.

1. Проверка Настроек Авторизации на Узлах Kubelet

Metrics Server использует API Kubelet для получения метрик с рабочих узлов. Обычно Kubelet настроен с использованием режима авторизации Webhook. При этом важно убедиться, что ваш Metrics Server имеет правильные привилегии для доступа к Kubelet.

Проверка привилегий:

  • Убедитесь, что Metrics Server имеет соответствующую роль (Role) и привязку ролей (RoleBinding):
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: kube-system
  name: metrics-server
rules:
- apiGroups: [""] # "" означает rbac.authorization.k8s.io/v1
  resources: ["pods", "nodes"]
  verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: metrics-server
  namespace: kube-system
subjects:
- kind: ServiceAccount
  name: metrics-server
  namespace: kube-system
roleRef:
  kind: Role
  name: metrics-server
  apiGroup: rbac.authorization.k8s.io

2. Настройка Kubelet для Разрешения Метрик

Если после выполнения вышеуказанных шагов ошибка 403 продолжает возникать, возможно, вам следует проверить настройки Kubelet:

  • Убедитесь, что флаг --authorization-mode установлен на корректное значение. Рекомендуется использовать Webhook и убедиться, что Metrics Server имеет доступ. Если вы изменили этот параметр, не забудьте перезапустить Kubelet:
sudo systemctl restart kubelet

3. Настройка Metrics Server

Вы упомянули, что добавили --kubelet-insecure-tls. Убедитесь, что эта настройка правильно указана в развертывании Metrics Server:

spec:
  containers:
  - name: metrics-server
    args:
    - --kubelet-insecure-tls
    ...

Также проверьте, что используемые вами сертификаты (если они не самоподписанные) правильно настроены.

4. Проверка Логов

Проверьте логи Metrics Server для получения дополнительной информации об ошибках. Вы можете использовать следующую команду:

kubectl logs -n kube-system <metrics-server-pod-name>

5. Альтернативные Подходы

Если проблемы сохраняются, вы можете рассмотреть следующее:

  • Использование альтернативного способа развертывания: Попробуйте установить Metrics Server через Helm, что может упростить управление конфигурацией и обновлениями.

  • Обновление Kubelet и Metrics Server: Иногда проблемы могут быть связаны с определенной версией. Убедитесь, что вы используете совместимые версии Kubelet и Metrics Server.

Заключение

Ошибки 403 в Metrics Server могут быть вызваны различными настройками безопасности и привилегиями на уровне облачного кластера Kubernetes. Проверьте настройки авторизации, убедитесь, что Metrics Server имеет необходимые разрешения, и выполните необходимые шаги для конфигурации Kubelet. Эти рекомендации должны помочь вам решить проблему. Если ни один из предложенных шагов не сработал, может быть полезно обратиться к документации Kubernetes и сообществу, чтобы получить дополнительную помощь.

Оцените материал
Добавить комментарий

Капча загружается...