Сопоставление путей Ingress-ресурсов с помощью регулярных выражений#
Здесь показано, как настроить пути в ресурсах Ingress и Mergeable Ingress
с помощью аннотации path-regex
и регулярных выражений.
Для аннотации path-regex
возможны следующие значения:
case_insensitive
- этот модификатор удобно использовать для маршрутизации, когда регистр не важен, и вы хотите избежать проблем, например с неправильным вводом URL пользователями (запросы на/Tea
,/tea
, и/TEA
будут направлены на один и тот же ресурс).case_sensitive
- этот модификатор можно использовать для более строгого контроля маршрутизации, когда регистр имеет значение, например в API (/User/123
и/user/123
могут означать разные сущности).
Рекомендуем также ознакомиться с работой директивы location в документации Angie.
Пример настройки ресурса Ingress#
Чтобы настроить регулярные выражения для путей ресурса 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#
-
Создайте Master 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
-
Проверьте, что Master Ingress создан:
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
-
Создайте первый Minion Ingress для
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
-
Проверьте, что Minion Ingress создан:
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
-
Создайте второй 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" 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
-
Проверьте, что Minion Ingress создан:
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
Теперь у вас есть Master Ingress и два Minion Ingress. Два Minion Ingress определяются путями /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
.Обновленный путь в конфигурационном файле Angie будет выглядеть так:
location ~ "^/coffee/[A-Za-z0-9]"