#nginx #kubernetes #kubernetes-ingress
#nginx #kubernetes #kubernetes-вход
Вопрос:
В настоящее время я пытаюсь переписать четыре пути в kubernetes ingress.
Все три выполнены, но статический путь к файлу немного сложнее.
Мой путь к интерфейсу /$1
-> /(.*)
web-front-cluster-ip-service
Мне также нужно переписать all /img/$1
-> /img/(.*)
apollo-api-cluster-ip-service
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: servers-ingress-service
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
rules:
- http:
paths:
- backend:
serviceName: apollo-api-cluster-ip-service
servicePort: 4000
path: /apollo_api/?(.*)
- backend:
serviceName: rest-api-cluster-ip-service
servicePort: 5000
path: /rest/?(.*)
- backend:
serviceName: web-front-cluster-ip-service
servicePort: 6000
path: /?(.*)
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: statics-ingress-service
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /img/$1
spec:
rules:
- http:
paths:
- backend:
serviceName: apollo-api-cluster-ip-service
servicePort: 4000
path: /img/?$(.*)
Моя текущая настройка выглядит так, как указано выше, но по неизвестной причине я не могу добраться до маршрута, настроенного вторым маршрутом.
Итак, что я пытаюсь сделать вместо этого, это объединить два маршрута вместе и предоставить префикс группе захвата, который соответствует /img
если я это сделаю
- backend:
serviceName: apollo-api-cluster-ip-service
servicePort: 6000
path: /?(.*)
он перенаправит все apollo-api
, когда мне понадобится любой маршрут, который не начинается с /img
, на который нужно перенаправить web-front
итак, мне нужно что-то вроде приведенного ниже
- backend:
serviceName: apollo-api-cluster-ip-service
servicePort: 4000
path: /img?(.*) <- somehow add /img to $(.*) because currently it rewrites `/img/static.png` -> `/static.png` but I need `/img/static.png` -> `/img/static.png`.
Любая помощь будет оценена.
Комментарии:
1. Как вы это решаете?
Ответ №1:
Как упоминалось в документации Rewrite Target:
!!! внимание, начиная с версии 0.22.0, определения входа с использованием аннотации nginx.ingress.kubernetes.io/rewrite-target не совместимы с предыдущими версиями. В версии 0.22.0 и выше любые подстроки в URI запроса, которые необходимо передать в перезаписанный путь, должны быть явно определены в группе захвата.
!!! примечание. Захваченные группы сохраняются в пронумерованных заполнителях в хронологическом порядке в виде $ 1, $ 2 … $ n. Эти заполнители можно использовать в качестве параметров в аннотации цели перезаписи.
Итак, я полагаю, что ваш второй вход должен выглядеть так:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: statics-ingress-service
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /img/$2
spec:
rules:
- http:
paths:
- backend:
serviceName: apollo-api-cluster-ip-service
servicePort: 4000
path: /img(/|$)(.*)
В этом случае $2
будет отражено (.*)