Можно слегка злоупотребить конфигурацией для ingress-nginx, добавив несколько определений Ingress для одного и того же имени хоста. ingress-nginx объединит правила / маршруты вместе. Однако с конфигурацией будет сложнее управлять, и вы приближаетесь к тому, что прокси-сервер nginx может сделать для вас.
Другие опции
Traefik имеет промежуточное программное обеспечение ограничения скорости , которое можно применять к маршрутов .
Также посмотрите на что-то вроде kong или istio , если вы хотите начать управлять отдельными службами более подробно.
Nginx Ingress config
Здесь важно создать структуру для ваших соглашений об именах, чтобы вы знали, какой Ingress содержит какие маршруты. Использование маршрута в Ingress name
- это то место, с которого я бы начал, но ваш вариант использования может отличаться:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: staging-ingress-rules-registration
annotations:
kubernetes.io/ingress.class: 'nginx'
nginx.ingress.kubernetes.io/proxy-body-size: '0'
nginx.ingress.kubernetes.io/limit-rps: '10'
spec:
rules:
- host: staging.mysite.com
http:
paths:
- path: /registration
backend:
serviceName: registration-site
servicePort: 80
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: staging-ingress-rules-login
annotations:
kubernetes.io/ingress.class: 'nginx'
nginx.ingress.kubernetes.io/proxy-body-size: '0'
nginx.ingress.kubernetes.io/limit-rps: '100'
spec:
rules:
- host: staging.mysite.com
http:
paths:
- path: /login
backend:
serviceName: login-site
servicePort: 80
Я не уверен, каким образом нужно управлять аннотациями на уровне хоста или сервера (например, nginx.ingress.kubernetes.io/ssl-ciphers
). Если они все хорошо сливаются, то, возможно, создадим специальный Ingress просто для размещения их. Если нет, то вы можете в конечном итоге управлять настройками хоста во всех конфигурациях Ingress, что будет проблематично.