KeycloakとIstio

2018年2月26日 Sébastien Blanc 著

この短いブログ記事は、KeycloakとIstioを組み合わせた最初の試みについて共有するものです。

Istioとは?

Istioは、サービスメッシュを管理するための共通の方法を提供するプラットフォームです。サービスメッシュとは何か疑問に思うかもしれません。それは、異なるサービスを接続、保護、そして信頼できるようにするためのインフラストラクチャ層です。

最終的にIstioは、サーキットブレーカー、インテリジェントロードバランシング、またはメトリクスライブラリのすべて、そして2つのサービスが安全な方法で通信する方法を置き換えるでしょう。そして、これはもちろんKeycloakにとって興味深い部分です。

ご存知のとおり、Keycloakはセキュリティ保護するアプリケーションまたはサービスのそれぞれにアダプターを使用しています。これらのアダプターは、必要に応じてリダイレクトを実行し、公開鍵を取得し、JWT署名を検証するなどを行います。

使用されるアプリケーションまたはテクノロジーのタイプに応じて、さまざまなアダプターがあります。Java EEアダプター、JavaScriptアダプター、そしてNodeJSアダプターさえあります。

アダプターの終焉?

Istioの哲学に従うと、これらのアダプターは最終的には不要になるでしょう。なぜなら、Istioインフラストラクチャがアダプターが行っていたタスク(署名検証など)を引き継ぐからです。まだそこまで到達していませんが、この記事では、Istioで既に何ができるのか、そしてそれがアダプターの役割をどれだけ置き換えることができるのかを見ていきます。

Envoyサイドカー

Istioの仕組みの詳細には立ち入りませんが、Istioが中心に構成されている主要な概念が1つあります。それはEnvoyサイドカーです。Envoyは、デプロイされた各サービスとともにデプロイされる高性能プロキシであり、これが「サイドカー」と呼ばれる理由です。

Envoyは、「コンパニオン」サービスのすべてのインバウンドおよびアウトバウンドトラフィックをキャプチャし、いくつかの基本的な操作を適用したり、データを収集して、Istioの「ミキサー」と呼ばれる中央の意思決定ポイントに送信したりできます。Envoy自体の構成は、「パイロット」と呼ばれる別のIstioコンポーネントを通じて行われます。

Envoyフィルター

Envoyプロキシに新しい機能を追加しやすくするために、積み重ねることができるフィルターの概念があります。繰り返しますが、これらのフィルターはパイロットによって構成でき、ミキサーの情報を収集できます。

JWT-Authフィルター

Istioチームは、私たちにとって興味深いフィルター、jwt-authフィルターを開発しています。名前が示すように、このフィルターは、EnvoyプロキシがHTTPリクエストのヘッダーから抽出するJWTトークンのチェックを実行できます。

このフィルターの詳細については、こちらをご覧ください。

Keycloak-Istioデモ

概要を把握できたところで、Red Hat Developer Experience TeamのKamesh Sampath(@kamesh_sampath)氏によって開発された、KeycloakとIstioをどのように組み合わせることができるかを示すデモを見てみましょう。

デモはMinishiftインスタンス内で実行されます。Minishiftは、OpenShiftをローカルで実行するのに役立つツールです。MinishiftはIstioを非常にうまくサポートしており、数コマンドでIstioレイヤーをMinishiftインスタンス内にインストールできます。

したがって、Minishiftインスタンス内には次のものがあります。

デモリポジトリは、Spring Boot Api ServiceとともにEnvoyサイドカーをデプロイするためのIstioスクリプトを提供します。

これが、Cars API Podがデプロイされた後の外観です。

次に、Envoyサイドカーを構成する必要があります。

これで、APIサービスへの各インバウンドリクエストは、ヘッダーに含まれるJWTトークンが有効かどうかをEnvoyサイドカーによってチェックされます。有効な場合はリクエストが承認され、そうでない場合はエラーメッセージが返されます。

デモの完全な手順(Istioを使用したMinishiftのセットアップを含む)は、こちらにあります。そして、このデモのために彼が提供してくれた素晴らしい仕事に対して、改めて素晴らしいKameshに感謝します。