ИНГРЕСС – Произошла внутренняя ошибка: не удалось вызвать веб-хук “validate.nginx.ingress.kubernetes.io” (…)

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

Это моя система LAB – я изучаю Ingress.

  1. Я развернул базовый/по умолчанию IngressController:
    https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.12.0-beta.0/deploy/static/provider/cloud/deploy.yaml

  2. Я попытался развернуть Ingress.
    Я взял пример отсюда:
    https://kubernetes.io/docs/concepts/services-networking/ingress/#the-ingress-resource


apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: minimal-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx <--- переименовал, чтобы соответствовать ingressClass из IngressController
  rules:
  - http:
      paths:
      - path: /testpath
        pathType: Prefix
        backend:
          service:
            name: test
            port:
              number: 80

К сожалению, я получаю следующую ошибку, которая мне не ясна.
Может кто-то помочь мне разобраться, в чем проблема?

$ kubectl apply -f ingress.yaml
Ошибка от сервера (InternalError): ошибка при создании "ingress.yaml": Произошла внутренняя ошибка: не удалось вызвать вебхука "validate.nginx.ingress.kubernetes.io": не удалось вызвать вебхука: Post "https://ingress-nginx-controller-admission.ingress-nginx.svc:443/networking/v1/ingresses?timeout=10s": dial tcp 10.107.59.228:443: подключение отклонено

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

Ошибка Ingress в Kubernetes: Решение проблемы с Webhook

В процессе работы с Ingress в вашей лабораторной системе Kubernetes вы столкнулись с ошибкой:

Error from server (InternalError): error when creating "ingress.yaml": Internal error occurred: failed calling webhook "validate.nginx.ingress.kubernetes.io": failed to call webhook: Post "https://ingress-nginx-controller-admission.ingress-nginx.svc:443/networking/v1/ingresses?timeout=10s": dial tcp 10.107.59.228:443: connect: connection refused

Эта ошибка указывает на проблемы с вебхуком, который отвечает за валидацию Ingress-ресурсов. Давайте последовательно разберем возможные причины и шаги для устранения данной проблемы.

1. Проверка состояния Ingress Controller

Первое, что необходимо сделать, это убедиться, что ваш Ingress Controller запущен и функционирует корректно. Используйте следующую команду для проверки его состояния:

kubectl get pods -n ingress-nginx

Убедитесь, что все поды Ingress Controller находятся в состоянии Running. Если какой-то из подов не запускается, проверьте его логи:

kubectl logs <имя-пода> -n ingress-nginx

Обратите особое внимание на сообщения об ошибках, которые могут подсказать, что идет не так.

2. Проверьте конфигурацию Admission Webhook

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

kubectl get validatingwebhookconfiguration

Убедитесь, что nginx-ingress-controller-admission присутствует в списке. Затем получите больше информации о нем:

kubectl describe validatingwebhookconfiguration nginx-ingress-controller-admission

Эта команда покажет, как настроен вебхук. Проверьте, совпадает ли Service вашего вебхука с именем и пространством имен вашего Ingress Controller.

3. Проверка сервиса Admission Webhook

Поскольку ошибка указывает на отказ в подключении по адресу https://ingress-nginx-controller-admission.ingress-nginx.svc:443, возможно, сервис Admission Webhook не работает. Проверьте его состояние:

kubectl get services -n ingress-nginx

Удостоверьтесь, что сервис ingress-nginx-controller-admission существует и корректно настроен на порту 443. Если сервис не настроен, или он не находится в рабочем состоянии, вам необходимо будет воспроизвести конфигурацию, описанную в документации.

4. Убедитесь в правильности конфигурации Ingress

Ваш Ingress YAML выглядит корректно, однако двойная проверка не помешает:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: minimal-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  rules:
  - http:
      paths:
      - path: /testpath
        pathType: Prefix
        backend:
          service:
            name: test
            port:
              number: 80

Убедитесь, что имя Ingress Class (nginx) действительно соответствует классу вашего Ingress Controller.

5. Проверка сетевых настроек

Если все предыдущие шаги не привели к успеху, проблема может быть связана с сетевыми настройками. Убедитесь, что ваш кластер Kubernetes правильно настроен и что сетевой доступ между компонентами в пределах кластера работает без перебоев. Для этого можно выполнить несколько базовых сетевых команд (например, kubectl exec внутри одного из подов для проверки подключения к другому поду по его имени).

Заключение

Следуя данным шагам, вы сможете выявить и устранить проблему с ошибкой Ingress, связанной с вебхуком в вашем Kubernetes кластере. Не забывайте также следить за документацией на официальном сайте NGINX Ingress Controller, поскольку она регулярно обновляется и может содержать информацию о новых изменениях и рекомендациях.

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

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