Сопоставление путей Ingress-ресурсов с помощью регулярных выражений#
Здесь показано, как настроить пути в ресурсах Ingress и Mergeable Ingress
с помощью аннотации path-regex
и регулярных выражений.
Для аннотации path-regex
возможны следующие значения:
case_insensitive
- этот модификатор удобно использовать для маршрутизации, когда регистр не важен, и вы хотите избежать проблем, например с неправильным вводом URL пользователями (запросы на/Tea
,/tea
, и/TEA
будут направлены на один и тот же ресурс).case_sensitive
- этот модификатор можно использовать для более строгого контроля маршрутизации, когда регистр имеет значение, например в API (/User/123
и/user/123
могут означать разные сущности).
Рекомендуем также ознакомиться с работой директивы location в документации
Angie. Чтобы настроить регулярные выражения для путей ресурса Ingress, выполните следующие шаги: Добавьте в файл Выполните команду: Пути Примечание Обратите внимание, что модификатор регулярного выражения Если вы хотите изменить значение на Теперь пути Примечание Обратите внимание, что модификатор регулярного выражения Создайте Master Ingress в файле Выполните команду: Проверьте, что Master Ingress создан: Создайте первый Minion Ingress для Выполните команду: Проверьте, что Minion Ingress создан: Создайте второй Minion Ingress для Выполните команду: Проверьте, что Minion Ingress создан: Теперь у вас есть Master Ingress и два Minion Ingress. Два Minion Ingress определяются путями Ниже показано, как изменить пути Добавьте аннотацию Примените изменения: Проверьте, что изменения применились: Добавленная аннотация Обновленный путь ( Примечание Обратите внимание, что аннотация Аналогичным образом используйте модификатор регулярного выражения Примените изменения: Проверьте, что изменения применились: Добавленная аннотация Обновленный путь в конфигурационном файле Angie будет выглядеть так:Пример настройки ресурса Ingress#
cafe-ingress.yaml
аннотацию angie.software/path-regex
со значением case_sensitive
.Пример
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress
annotations:
angie.software/path-regex: "case_sensitive"
spec:
tls:
- hosts:
- cafe.example.com
secretName: cafe-secret
rules:
- host: cafe.example.com
http:
paths:
- path: /tea/[A-Z0-9]
backend:
serviceName: tea-svc
servicePort: 80
- path: /coffee/[A-Z0-9]
backend:
serviceName: coffee-svc
servicePort: 80
kubectl create -f cafe-ingress.yaml
tea
и coffee
в конфигурации Angie будут выглядеть следующим образом:location ~ "^/tea/[A-Z0-9]"
location ~ "^/coffee/[A-Z0-9]"
case_sensitive
применяется ко всем путям.case_insensitive
, обновите файл.Пример
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress
annotations:
angie.software/path-regex: "case_insensitive"
spec:
tls:
- hosts:
- cafe.example.com
secretName: cafe-secret
rules:
- host: cafe.example.com
http:
paths:
- path: /tea/[A-Z0-9]
backend:
serviceName: tea-svc
servicePort: 80
- path: /coffee/[A-Z0-9]
backend:
serviceName: coffee-svc
servicePort: 80
/tea/[A-Z0-9]
и /coffee/[A-Z0-9]
в конфигурации Angie будут выглядеть так:location ~* "^/tea/[A-Z0-9]"
location ~* "^/coffee/[A-Z0-9]"
case_insensitive
применяется ко всем путям.Пример настройки ресурса Mergeable Ingress#
Создание Master Ingress и Minion Ingress#
cafe-master.yaml
.Пример
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress-master
annotations:
angie.software/mergeable-ingress-type: "master"
spec:
ingressClassName: angie
tls:
- hosts:
- cafe.example.com
secretName: cafe-secret
rules:
- host: cafe.example.com
kubectl create -f cafe-master.yaml
kubectl get ingress cafe-ingress-master
NAME CLASS HOSTS PORTS AGE
cafe-ingress-master angie cafe.example.com 80, 443 29s
kubectl describe ingress cafe-ingress-master
Name: cafe-ingress-master
Labels: <none>
Namespace: default
Address:
Ingress Class: angie
Default backend: <default>
TLS:
cafe-secret terminates cafe.example.com
Rules:
Host Path Backends
---- ---- --------
* * <default>
Annotations: angie.software/mergeable-ingress-type: master
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal AddedOrUpdated 62s angie-ingress-controller Configuration for default/cafe-ingress-master was added or updated
tea
в файле tea-minion.yaml
.Пример
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress-tea-minion
annotations:
angie.software/mergeable-ingress-type: "minion"
spec:
ingressClassName: angie
rules:
- host: cafe.example.com
http:
paths:
- path: /tea
pathType: Prefix
backend:
service:
name: tea-svc
port:
number: 80
kubectl create -f tea-minion.yaml
kubectl get ingress cafe-ingress-tea-minion
NAME CLASS HOSTS ADDRESS PORTS AGE
cafe-ingress-tea-minion angie cafe.example.com 80 23m
kubectl describe ingress cafe-ingress-tea-minion
Name: cafe-ingress-tea-minion
Labels: <none>
Namespace: default
Address:
Ingress Class: angie
Default backend: <default>
Rules:
Host Path Backends
---- ---- --------
cafe.example.com
/tea tea-svc:80 (10.244.0.6:8080,10.244.0.7:8080,10.244.0.8:8080)
Annotations: angie.software/mergeable-ingress-type: minion
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal AddedOrUpdated 24m angie-ingress-controller Configuration for default/cafe-ingress-tea-minion was added or updated
coffee
в файле coffee-minion.yaml
.Пример
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress-coffee-minion
annotations:
angie.software/mergeable-ingress-type: "minion"
spec:
ingressClassName: angie
rules:
- host: cafe.example.com
http:
paths:
- path: /coffee
pathType: Prefix
backend:
service:
name: coffee-svc
port:
number: 80
kubectl create -f coffee-minion.yaml
kubectl get ingress cafe-ingress-coffee-minion
NAME CLASS HOSTS ADDRESS PORTS AGE
cafe-ingress-coffee-minion angie cafe.example.com 80 5m21s
kubectl describe ingress cafe-ingress-coffee-minion
Name: cafe-ingress-coffee-minion
Labels: <none>
Namespace: default
Address:
Ingress Class: angie
Default backend: <default>
Rules:
Host Path Backends
---- ---- --------
cafe.example.com
/coffee coffee-svc:80 (10.244.0.6:8080,10.244.0.7:8080,10.244.0.8:8080)
Annotations: angie.software/mergeable-ingress-type: minion
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal AddedOrUpdated 5m52s angie-ingress-controller Configuration for default/cafe-ingress-coffee-minion was added or updated
/tea
и /coffee
.Модификация путей с помощью регулярных выражений#
/tea
и /coffee
с помощью регулярных выражений.path-regex
со значением case_insensitive
в Minion Ingress (tea
) и измените путь с помощью
регулярных выражений (в примере ниже: /tea/[A-Z0-9]
).Пример
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress-tea-minion
annotations:
angie.software/mergeable-ingress-type: "minion"
angie.software/path-regex: "case_insensitive"
spec:
ingressClassName: angie
rules:
- host: cafe.example.com
http:
paths:
- path: /tea/[A-Z0-9]
pathType: Prefix
backend:
service:
name: tea-svc
port:
number: 80
kubectl apply -f tea-minion.yaml
kubectl describe ingress cafe-ingress-tea-minion
Name: cafe-ingress-tea-minion
Labels: <none>
Namespace: default
Address:
Ingress Class: angie
Default backend: <default>
Rules:
Host Path Backends
---- ---- --------
cafe.example.com
/tea/[A-Z0-9] tea-svc:80 (10.244.0.6:8080,10.244.0.7:8080,10.244.0.8:8080)
Annotations: angie.software/mergeable-ingress-type: minion
angie.software/path-regex: case_insensitive
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal AddedOrUpdated 47s (x2 over 34m) angie-ingress-controller Configuration for default/cafe-ingress-tea-minion was added or updated
path-regex
обновляет путь /tea/[A-Z0-9]
с использованием модификатора регулярного выражения case_insensitive
.location
) в конфигурационном файле Angie будет выглядеть так:location ~* "^/tea/[A-Z0-9]"
path-regex
применяется только к путям, определенным в соответствующем Minion Ingress (tea
). Пути, определенные во втором Minion Ingress (coffee
), не меняются.case_sensitive
для второго Minion Ingress (coffee
) в файле coffee-minion.yaml
.Пример
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress-coffee-minion
annotations:
angie.software/mergeable-ingress-type: "minion"
angie.software/path-regex: "case_sensitive"
spec:
ingressClassName: angie
rules:
- host: cafe.example.com
http:
paths:
- path: /coffee/[A-Za-z0-9]
pathType: Prefix
backend:
service:
name: coffee-svc
port:
number: 80
kubectl apply -f coffee-minion.yaml
kubectl describe ingress cafe-ingress-coffee-minion
Name: cafe-ingress-coffee-minion
Labels: <none>
Namespace: default
Address:
Ingress Class: angie
Default backend: <default>
Rules:
Host Path Backends
---- ---- --------
cafe.example.com
/coffee/[A-Za-z0-9] coffee-svc:80 (10.244.0.10:8080,10.244.0.9:8080)
Annotations: angie.software/mergeable-ingress-type: minion
angie.software/path-regex: case_sensitive
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal AddedOrUpdated 11m angie-ingress-controller Configuration for default/cafe-ingress-coffee-minion was added or updated
path-regex
обновляет путь /coffee/[A-Za-z0-9]
, используя модификатор регулярного выражения case_sensitive
.location ~ "^/coffee/[A-Za-z0-9]"