Marcin Skalski
2023年7月25日
現代の相互接続されたダイナミックなマイクロサービスの世界においては、最適なトラフィック管理や悪意のある攻撃からの保護が重要です。レート制限は、リクエストフローを制御するための一般的なメカニズムです。Kong Meshにグローバルレート制限が導入されたことで、レート制限がより簡単になりました。
このブログ記事では、このエキサイティングな新機能とその利点について詳しく説明します。
グローバルレート制限とは
レート制限とは、特定の時間枠内でサービスが受信するリクエスト数を制御できるメカニズムです。Kong Meshのグローバルレート制限を使用することで、複数のサービス インスタンスにレート制限を適用し、各インスタンス間のリクエストカウントを調整できるようになりました。
グローバルレート制限には、次のような利点があります。
- セキュリティの強化: グローバル レート制限は、指定された期間内に処理できる要求の数を制限することで、DoS (Denial of Service:サービス拒否) 攻撃からサービスを保護します。これにより、悪意のあるアクターによる過剰なトラフィックでサービスを圧迫されることがなくなります。
- API管理の改善: パブリックAPIをお持ちの場合、グローバルレート制限を使用することで、非課金ユーザーまたは特定の利用層に対して制限することができます。さまざまなユーザーグループに対して異なるレート制限を定義できるため、APIリソースへの公平かつ制御されたアクセスを確保できます。
- トラフィック制御とスループット: レート制限を実装することで、サービスへのトラフィックのフローを効率的に制御し、輻そうを防ぎ、最適なパフォーマンスを維持できます。これは特に、複数のインスタンス間で受信リクエストのバランスを取る必要がある場合に便利です。
MeshGlobalRateLimit ポリシーの機能
Kong Mesh のグローバル レート制限は、トラフィック管理をきめ細かく制御できる、強力なポリシー機能を幅広く提供します。
ヘッダーベースのグローバルレート制限を使用すると、受信リクエストの特定のヘッダーに基づいてレート制限を設定できるため、より柔軟でターゲットを絞ったレート制限戦略が可能になります。
さらに、内部サービスだけでなく、外部サービスに向けたトラフィックにもレート制限を適用できるため、発信元にかかわらず、過剰なリクエストからこれらのリソースを保護することができます。
Mesh Gateway はグローバル レート制限のメリットも受け、サービス メッシュに入るトラフィックを制御および制限して、セキュリティとパフォーマンスの最適化の追加レイヤーを提供します。パフォーマンスを向上させるために、Kong Meshを使用すると、ローカルとグローバルの両方のレート制限を組み合わせて、それぞれの長所を活用できます。この 2 つを組み合わせることで、リソース使用率と応答時間が向上し、サービス メッシュ アーキテクチャ全体が最適化されます。
また、メッシュゲートウェイはグローバルレート制限も可能で、サービスメッシュに流入するトラフィックを制御および制限でき、またセキュリティのレイヤーとパフォーマンス最適化も強化できます。パフォーマンスを向上させるため、Kong Meshではローカルレート制限とグローバルレート制限の両方を組み合わせて、それぞれの長所を活かすことができます。この2つを組み合わせることで、リソース利用率の向上と応答時間が向上し、全体として最適化されたサービスメッシュ アーキテクチャを実現できます。
構成のシンプル化
Kong Mesh ではシンプルさを重視しており、特に Kubernetes 上で運用する場合は、グローバルレート制限を簡単にしたいと考えていました。
前提条件は 1 つだけで、独自の Redis デプロイを用意する必要があります。グローバルレート制限の使用を開始するために必要なことの1つは、ratelimit(レート制限)サービスをデプロイすることです。最も望ましいのは、適切なセキュリティで構成できるhelmを使うことです。セキュリティを重視しているため、レート制限サービスとKong Meshコントロールプレーン間の通信は暗号化され、トークンで保護されています。さらに、データプレーン プロキシからレート制限サービスへの通信も暗号化できます。
ratelimitサービスをデプロイした後、グローバルにratelimit接続を設定する必要があります。
apiVersion: kuma.io/v1alpha1
kind: MeshGlobalRateLimit
metadata:
name: ratelimit-backend
namespace: kong-mesh-system
spec:
targetRef:
kind: Mesh
from:
- targetRef:
kind: Mesh
default:
backend:
rateLimitService:
url: http://kong-mesh-ratelimit-service.kong-mesh-system:10003
timeout: 25ms
この後、グローバルレート制限の利用を開始し、次のように最初の制限を設定できます。
apiVersion: kuma.io/v1alpha1
kind: MeshGlobalRateLimit
metadata:
name: demo-rate-limit
namespace: kong-mesh-system
spec:
targetRef:
kind: MeshService
name: demo-app_kuma-demo_svc_5000
from:
- targetRef:
kind: Mesh
default:
http:
requestRate:
num: 100
interval: 1s
グローバルレート制限の内部構造、アルゴリズム、デプロイメント戦略などについて、さらに詳しく知りたい方は、これらの情報をすべて含むドキュメントをご覧ください。
まとめ
Kong Meshのグローバルレート制限は、サービスメッシュのデプロイメントに強力なトラフィック管理機能が提供されます。ratelimitサービスとRedisのようなインメモリ データストアを活用することで、リクエストフローを効率的に制御し、DoS攻撃から保護し、APIの使用状況を管理できます。単一のサービスや複雑なマイクロサービス アーキテクチャにかかわらず、グローバルレート制限を使用すると、システムのパフォーマンスとセキュリティをきめ細かく制御できます。
Kong Mesh のグローバル レート制限を 今すぐ試して、サービス メッシュのデプロイにおける堅牢なレート制限のメリットを体験してください。
原文:Leveraging Mesh Global Rate Limit Policy in Kong Mesh 2.3