特定のパスのIngress-Nginxレート制限rpsの設定
Kubernetes Kopsを使用しています。特定のパスに対してのみ、IngressNginxレベルでレート制限rpsを設定したいと思います。
私は知っている
nginx.ingress.kubernetes.io/limit-rps
Ingressルールでこれを設定すると、すべてのルートに適用されます。しかし、私は特定のルートにそれを適用したいと思います。私がアクセスしようとしているとき
/login
パス/ログインのためにrpsの制限を100に設定したい
nginx.ingress.kubernetes.io/limit-rps: 100
これは私のイングレスルールの設定です。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: staging-ingress-rules
namespace: staging
annotations:
kubernetes.io/ingress.class: ‘nginx’
nginx.ingress.kubernetes.io/proxy-body-size: ‘0’
spec:
rules:
– host: staging.mysite.com
http:
paths:
– path: /login
backend:
serviceName: login_site
servicePort: 80
– path: /registration
backend:
serviceName: registration_site
servicePort: 80
同じホスト名に複数のイングレス定義を追加することで、ingress-nginxの設定を少し乱用することができます。 ingress-nginxはルール/ルートを一緒にマージします。設定は管理するのが難しくなり、nginxプロキシができることの限界に向かっています。
その他のオプション
traefikには、ルートに適用できるレート制限ミドルウェアがあります。
また、 cong や istio のようなものを見てください。
Nginxイングレス設定
あなたの命名規則に構造を作成することはここで重要ですので、どのイングレスがどのルートを通過するかを知ることができます。 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 など)を管理する必要があるかどうかはわかりません。彼らがすべてうまくマージすれば、それらを格納するために特別なイングレスを作成するかもしれません。そうでない場合は、すべてのイングレスの設定を管理することになり、これは苦痛になります。
source