Получение все хосты заняты другими ресурсами с помощью контроллера входа Nginx

#kubernetes-ingress #nginx-ingress

#kubernetes- вход #nginx-вход

Вопрос:

Я настроил контроллер Nginx, как указано в документах https://docs.nginx.com/nginx-ingress-controller/installation/installation-with-manifests /. Я настроил вход с помощью приведенной ниже конфигурации

Входной класс

 apiVersion: networking.k8s.io/v1beta1
kind: IngressClass
metadata:
  name: nginx
  # annotations:
  #   ingressclass.kubernetes.io/is-default-class: "true"
spec:
  controller: nginx.org/ingress-controller
 

Проникновение

 apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: hn-service-ingress
spec:
  ingressClassName: nginx
  rules:
  - host: hostnameservice.classpath.com
    http:
      paths:
      - path: /test
        backend:
          serviceName: hostname-service
          servicePort: 80
 

Ниже приведена ошибка при выполнении describe команды. Я получаю All hosts are taken by other resources

 kubectl describe ingress hn-service-ingress
Name:             hn-service-ingress
Namespace:        pradeep
Address:
Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
Rules:
  Host                           Path  Backends
  ----                           ----  --------
  hostnameservice.classpath.com
                                 /test    hostname-service:80 (100.96.1.12:8111,100.96.1.13:8111,100.96.2.13:8111)
Annotations:                     <none>
Events:
  Type     Reason    Age   From                      Message
  ----     ------    ----  ----                      -------
  Warning  Rejected  5s    nginx-ingress-controller  All hosts are taken by other resources
 

Когда я раньше сверялся с cafe примером, он работал нормально. Где я ошибаюсь?

Примечание: я настроил балансировщик нагрузки AWS и установил параметр /etc/hosts указывать на ELB from AWS с помощью dnslookup.

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

1. Я предполагаю, что у вас возникли коллизии хостов , используете ли вы другой вход? Если да, не могли бы вы поделиться им?

2. Я смог решить эту проблему. Произошел еще один вход в другое пространство имен

Ответ №1:

Пожалуйста, имейте в виду, что существует 3 типа Nginx . Open Source Nginx Ingress Controller , Nginx Incorporaton (nginx inc) и Nginx Incorporaton Plus .

Как я упоминал в комментариях, проблема возникла из-за ресурсов, использующих то же host самое. Это называется коллизиями хостов.

Столкновение хостов происходит, когда несколько ресурсов настраивают один и тот же хост. Ingress Controller Поддерживает два варианта обработки коллизий хостов:

  • Выбор победителя

Если несколько ресурсов претендуют на один и тот же хост, входной контроллер выберет победителя на основе метки времени создания ресурсов: победит самый старый ресурс. В случае, если существует более одного самого старого ресурса (их метка времени создания одинакова), контроллер входа выберет ресурс с лексикографически наименьшим uid.

  • Объединение конфигурации для одного и того же хоста

Можно объединить конфигурацию для нескольких входных ресурсов для одного и того же хоста. Одним из распространенных вариантов использования этого подхода является распределение ресурсов по нескольким пространствам имен.

OP подтвердил, что это было решено с помощью изменений, внесенных в другой Ingress ресурс в другом namespace .

Я смог решить эту проблему. Произошел еще один вход в другое пространство имен

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

1. docs.nginx.com изменился. Новый URL: docs.nginx.com/nginx-ingress-controller/configuration /…