Могут ли последующие входные подпути переопределить более ранние входные родительские пути? - PullRequest
0 голосов
/ 17 октября 2018

У меня есть вход Kubernetes, который я хочу использовать по умолчанию для всех путей на множестве хостов, при условии, что нет более конкретного соответствия:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: default-ing
spec:
  rules:
  - host: host1.sub.example.com
    http:
      paths:
      - backend:
          serviceName: my-default-service
          servicePort: http
        # Note: here we specify the root path intended as a default
        path: /
      - backend:
          serviceName: my-default-service
          servicePort: http
        path: /route/path/to/default

Второй вход определяет пользовательскую службу дляконкретный путь:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: special-ing
spec:
  rules:
  - host: host1.sub.example.com
    http:
      paths:
      - backend:
          serviceName: special-service
          servicePort: http
        path: /special

Я ожидаю, что порядок добавления / удаления входов не будет иметь значения, или, по крайней мере, я мог бы иметь какой-то способ указать, что path: / в default-ing всегдабудет заказан последним.

Когда я попробую выше, маршрутизация в порядке, пока я добавляю special-ing до default-ing (или, альтернативно, добавьте default-ing, затем special-ing, затем удалитеdefault-ing и добавьте его снова).Когда я добавляю их как default-ing, тогда special-ing, запросы к /special are направляются на my-default-service вместо special-service.

Я хочу, чтобы порядок добавления / удаления не зависел от маршрутизацииэто генерируется nginx-ingress-controller, так что мои манипуляции с kubectl более устойчивы, и если один из входов воссоздается, ничего не сломается.

Я использую nginx-ingress-controller:0.19.0

Спасибо за любую помощь, которую вы можете предложить!

1 Ответ

0 голосов
/ 17 октября 2018

Короткий ответ - нет.Я считаю, что ваши конфиги должны быть запрещены контроллером входа nginx или где-то задокументированы.В основном, что происходит, когда у вас есть 2 hosts правила с одинаковым значением: host1.sub.example.com одно перезаписывает другое в блоке server {} в nginx.conf, которым управляет ваш входной контроллер nginx.

Так что если вы добавите default-ing до special-ing, тогда special-ing будет фактической конфигурацией.Когда вы добавляете special-ing до default-ing, тогда default-ing будет вашей единственной конфигурацией, special-ing не должен работать вообще.

  1. Добавить special-ing, иконфиги выглядят примерно так:

     server {
         server_name host1.sub.example.com;
         ...
         location /special {
                            ...
         }
         location / { # default backend
                     ...
         }
         ...            
    }
    
  2. Теперь добавьте default-ing, и конфиги изменятся так:

    server {
         server_name host1.sub.example.com;
         ...
         location /route/path/to/default {
                                         ...
         }
         location / { # default backend
                     ...
         }
         ...
    }
    

Если вы добавите их по-другому, в конце концов конфигурация будет выглядеть как 1.

Вы можете узнать больше, обстрелив свой модуль входа nginx и посмотрев файл nginx.conf.

 $ kubectl -n <namespace> exec -it nginx-ingress-controller-pod sh
 # cat /etc/nginx/nginx.conf
...