На маршруте трафика не работает входной контроллер. Я чувствую, что неправильно понял переписанную аннотацию? - PullRequest
0 голосов
/ 12 октября 2019

Проблема с перезаписью аннотации.

Попытка с использованием перезаписи аннотации. Невозможно получить эту работу.

apiVersion: networking.k8s.io/v1beta1 # for versions before 1.14 use extensions/v1beta1
kind: Ingress
metadata:
  name: hello-whale-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  rules:
  - host: hello.whale.info
    http:
      paths:
      - path: /blue|/(.+)
        backend:
          serviceName: hello-blue-whale-svc
          servicePort: 80
      - path: /green|/(.+)
        backend:
          serviceName: hello-green-whale-svc
          servicePort: 80

/ Зеленый показывает идеальный результат, но почему бы не /blue.

Ответы [ 2 ]

0 голосов
/ 15 октября 2019

можете ли вы попробовать вот так: path: /blue/(.*) - Василий Ангапов 2 дня назад

Я хотел бы добавить несколько слов объяснения к правильный ответ Василия Ангапова, опубликованный в комментариях к вопросу, чтобы каждый мог понять, почему /blue/(.*) действительно работает и почему /blue|/(.+) не будет работать и не должен использоваться в этом контексте.

Давайте использовать Онлайн-интерпретатор regexp , который содержит подробное объяснение каждого символа, используемого в нашем выражении, и позволяет поэкспериментировать с сопоставлением различных строк с данным регулярным выражением:

/blue|/(.+) в основном означает, что мы хотим сопоставить строку /blueили любая другая ненулевая строка. . означает любой символ, кроме окончания строки, а знак + - это квантификатор, который сообщает нам, сколько раз предыдущий символ может встречаться в нашей строке. + обозначает одно или несколько вхождений предшествующего символа, поэтому выражение .+ соответствует строке, состоящей из одного или нескольких различных символов (исключая разрыв строки).

Если вы создаете входной путь для сопоставления с определенной строкой, вы обычно не хотите использовать |. В этом конкретном контексте это будет означать, что вы хотите сопоставить /blue или anything else как /green, /yellow, /red ..., что не имеет большого смысла в этом контексте. Вы, скорее, заинтересованы в том, чтобы сопоставлять пути только начиная с /blue, например /blue/index.html, /blue/second.html или blue/third.php или просто /blue. Ваш путь может выглядеть следующим образом:

/blue/(.+)

, и он будет соответствовать /blue/index.html, /blue/1, но не /blue в одиночку, поскольку .+ соответствует один или несколькоПроизвольные символы .

.*, с другой стороны, соответствуют ноль или более произвольных символов , поэтому выражение /blue/(.*) будет соответствовать:

/blue, /blue/index.html, /blue/, /blue/1 и т. Д.

0 голосов
/ 12 октября 2019

Вы должны видеть в своих журналах, что вход всегда попадает в один и тот же бэкэнд. Может быть этот документ может вам помочь.

Я проверил себя с двумя серверами nginx в качестве бэкэнда, один из которых возвращает синий, а другой зеленый:

apiVersion: networking.k8s.io/v1beta1 # for versions before 1.14 use extensions/v1beta1
kind: Ingress
metadata:
  name: hello-whale-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$1
    nginx.org/rewrites: "serviceName=green rewrite=/;serviceName=blue rewrite=/"
spec:
  rules:
  - host: stardust
    http:
      paths:
      - path: /green
        backend:
          serviceName: green
          servicePort: 80
      - path: /blue
        backend:
          serviceName: blue
          servicePort: 80

Затем, используя curlЯ могу достичь правильной цели:

$ curl stardust/green
green
$ curl stardust/blue
blue

А вот журналы входного контроллера:

10.32.0.1 - - [12/Oct/2019:14:56:12 +0000] "GET /green HTTP/1.1" 200 6 "-" "curl/7.64.1" 132 0.008 [default-green-80] [] 10.32.0.28:80 6 0.008 200 b5ac38db9dd6a7e53d316dc48e9401aa
10.32.0.1 - - [12/Oct/2019:14:56:16 +0000] "GET /blue HTTP/1.1" 200 5 "-" "curl/7.64.1" 131 0.011 [default-blue-80] [] 10.32.0.12:80 5 0.012 200 c438d22db0e80a5206ca8885a48d72f9

Надеюсь, это поможет вам.

...