Dapr を使用すると、一連のミドルウェア コンポーネントを連鎖させることで、カスタム処理パイプラインを定義できます。リクエストは、ユーザー コードにルーティングされる前に、定義されたすべてのミドルウェア コンポーネントを通過し、その後、定義されたミドルウェアを逆の順序で通過してから、クライアントに戻ります。 Dapr ミドルウェア Dapr ミドルウェアDapr サイドカーは起動すると、ミドルウェア処理パイプラインを構築します。デフォルトでは、パイプラインはトレース ミドルウェアと CORS ミドルウェアで構成されます。 Dapr 構成を介して追加されたミドルウェアは、定義された順序でパイプラインに追加され、このパイプラインは、ステータス、pub/sub、サービス呼び出し、バインディング、セキュリティなど、すべての Dapr API エンドポイントに適用されます。 次の構成例では、OAuth 2.0 ミドルウェアと大文字のミドルウェア コンポーネントを使用するカスタム パイプラインを定義します。この場合、すべてのリクエストは OAuth 2.0 プロトコルを介して承認され、ユーザー コードに転送される前に大文字に変換されます。 apiバージョン: dapr .io / v1alpha1 他のビルディング ブロック コンポーネントと同様に、ミドルウェア コンポーネントも拡張可能です。 Dapr で現在サポートされているミドルウェアを次の表に示します。
これらのミドルウェア実装のソース コードは、Github リポジトリ https://github.com/dapr/components-contrib/tree/master/middleware/http にあります。 カスタムミドルウェアDapr は FastHTTP を使用して HTTP サーバーを実装するため、カスタム HTTP ミドルウェアは FastHTTP ハンドラーとして記述する必要があります。ミドルウェアは、以下に示すようにミドルウェア インターフェイスを実装する必要があります。 パッケージミドルウェア このインターフェースは、fasthttp.RequestHandler とエラーを返す GetHandler メソッドを定義します。カスタム ミドルウェア ハンドラーの実装には、任意のインバウンド ロジックとアウトバウンド ロジックを含めることができます。 func ( m * customMiddleware ) GetHandler ( metadata メタデータ) ( func ( fasthttp.RequestHandler ) fasthttp.RequestHandler , error ) { その後、カスタム ミドルウェア コンポーネントを components-contrib リポジトリに提供できます。 components-contrib があなたの提出を承認したら、Dapr ランタイム リポジトリの https://github.com/dapr/dapr/tree/master/cmd/daprd/components の下にミドルウェア登録ファイルを追加する必要があります。 ミドルウェアの登録 たとえば、大文字ミドルウェアの登録は次のコードに示されています。 パッケージコンポーネント しかし、Dapr がミドルウェアの拡張を完全に開放していないこともわかります。ユーザーがメインリポジトリ内のコードを更新するという特定のニーズを持っている場合、必然的に柔軟性は低下しますが、低品質のミドルウェアによって引き起こされる Dapr のさまざまな問題を回避することもできます。 OAuth ミドルウェアの例次に、Dapr でミドルウェアを使用する方法を説明するために、OAuth ミドルウェアを構成します。 OAuth ミドルウェアを構成することで、アプリケーションを変更せずに Web API で OAuth 認証を有効にします。この設計により、認証/承認の問題がアプリケーションから分離されるため、アプリケーション オペレーターはアプリケーション コードに影響を与えることなく、認証/承認プロバイダーを採用および構成できます。 dapr oauth ミドルウェア ここでは、K8s クラスターの Ingress コントローラーとして ingress-nginx を使用します。インストールされていない場合は、次の Helm チャートを使用して簡単にインストールできます。 helm リポジトリにingress - nginx を追加しますhttps://kubernetes.github.io/ingress-nginx まず、以下に示すように、Node.js を使用して開発された echoapp を作成しました。 express は、 次の例のように機能します。 次に、リクエスト ヘッダー内の認証情報とクライアントのリクエスト テキスト情報を取得するための /echo インターフェイスを作成しました。 次に、Github を使用して認証と承認を実装します。まず、https://github.com/settings/developers にアクセスして、以下に示すように OAuth アプリケーションを登録します。 新しいOAuthアプリケーションを作成する ここでは、アプリケーションの URL を http://echo.dapr.local として指定します。新しいアプリケーションを登録するには、「アプリケーションの登録」をクリックします。登録後、アプリケーションの詳細ページで clientId 情報を取得できます。 「新しいクライアント シークレットを生成」ボタンをクリックして、clientSecret 情報を手動で取得する必要があります。後で使用するので、2 つのパラメータ値を記録します。 クライアントシークレットを取得する 次に、echoapp アプリケーションを Kubernetes クラスターにデプロイします。対応するリソース リストは次のとおりです。 apiバージョン: アプリ/ v1 echoapp アプリケーションを公開するために、上記で Ingress オブジェクトを作成したことに注意してください。サービス オブジェクトを積極的に作成するのではなく、echoapp-dapr サービスを直接関連付けたことに注意してください。このサービスのポート 80 は、echoapp アプリケーションの dapr サイドカーのポート 3500 にマップされています。 また、上記のアプリケーションに追加された注釈にも注意してください。これには、使用する構成オブジェクトを指定するために使用される dapr.io/config: "pipeline" が含まれるため、pipeline という名前の構成オブジェクトも作成する必要があります。 apiバージョン: dapr .io / v1alpha1 ここでは、echoapp アプリケーション用に middleware.http.oauth2 タイプのミドルウェアを構成します。対応するプロセッサ名は oauth2 で、これは以下に示すように、Dapr のコンポーネント コンポーネントに対応します。 apiバージョン: dapr .io / v1alpha1 Dapr OAuth ミドルウェアを使用するには、次の情報を構成する必要があります。
次の表は、いくつかの一般的な認可サーバーの認可/トークン URL を示しています。
ここでは GitHub の認証サーバー構成を使用します。最後に追加された authHeaderName: authorization プロパティにも注意してください。上記のコードでは、認証値は Header ヘッダーから取得されます。 次に、上記のすべてのリソース オブジェクトを作成します。作成が完了したら、echo.dapr.local ドメイン名を Ingress コントローラーにマップすることを忘れないでください。 $ kubectl ポッドを取得する 次に、ブラウザに http://echo.dapr.local/v1.0/invoke/echoapp/method/echo?text=hello と入力して、アプリケーションの echo メソッドにアクセスします。通常のアクセス中に、予想外の 502 エラーが発生します。 502 エラー これは、Dapr 1.4 以降、セキュリティ対策として daprd プロセスがロックダウンされ、ポッド境界内からの接続のみを受け入れるようになっているためです。 Dapr への外部呼び出しを有効にする場合は、アプリケーションに次のアノテーションを追加する必要があります。 dapr .io / サイドカー- listen - アドレス: "0.0.0.0" この注釈をデプロイメントに追加します。更新後、http://echo.dapr.local/v1.0/invoke/echoapp/method/echo?text=hello に再度アクセスすると、正常に動作します。最初は、認証のために GitHub にジャンプします。 GitHub 認証 承認後、ページは自動的に戻り、アクセス トークン データやテキスト パラメータの値など、エコー インターフェイスによって返されたデータが通常どおり表示されます。 echo メソッド この時点で、元のアプリケーションに侵入することなく、Dapr 内のアプリケーションに対して OAuth ミドルウェアが有効になりました。 |
<<: ポリシー・アズ・コードがクラウドの誤った構成を防ぐ方法
>>: Alibaba Cloud データベースの NL2SQL テクノロジーが国際的に権威のある評価で第 1 位を獲得
Kubernetes には多くの概念があり、その中には難しい名前を持つヘッドレス サービスなど、非常...
onetechcloud は今年の Double Eleven 特別プロモーションを実施し、すべての...
他のオンライン マーケティング サービスと比較すると、SEO にはより多くのポイントが関係し、効果を...
Eコマースのライブストリーミングは、マーケティング手法から標準化された販売チャネルへと進化しました。...
AlphaVPS は 2017 年に設立されました。現在までに、VPS 用のオプション データ セン...
私は現在大学3年生で、外国貿易会社でインターンとして働き、GoogleのSEO最適化とウェブサイト構...
今日はラックナードのボスの誕生日なので、彼は特別に誕生日プロモーションを企画しました。誕生日プロモー...
Oracle NetSuite は本日、あらゆる業界の企業の収益増加、国際展開、ビジネス ユーザーの...
「2013年のSEOの発展動向を振り返る」では、インターネット上の情報はますます増え、個人ユーザーだ...
Raksmart の日本と韓国のデータセンターは昨日、大量のマシンを補充したと発表しました。韓国のサ...
最近仕事がとても忙しくて、家に帰るのは午後7時頃になることが多いです。昨日はさらに悲惨でした。夜の9...
これはオンラインになった日に含まれていました。これは少し控えめな数字です。オンラインになってから 3...
パブリッククラウドとプライベートクラウドの使用に関する議論が激しくなっています。ほとんどの企業がパブ...
カナダの老舗VPSベンダーであるbuyvmは、ルクセンブルクのデータセンターにブロックストレージ事業...
世界的に有名なスポーツ用品小売業者である Decathlon は、Microsoft Azure イ...