Вопрос или проблема
Это моя система LAB – я изучаю Ingress.
-
Я развернул базовый/по умолчанию IngressController:
https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.12.0-beta.0/deploy/static/provider/cloud/deploy.yaml -
Я попытался развернуть 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, поскольку она регулярно обновляется и может содержать информацию о новых изменениях и рекомендациях.