第2章 Kafka Bridge を使用するための 3scale のデプロイメント
3scale を Kafka Bridge で使用するには、まず 3scale をデプロイし、次に Kafka Bridge API の検出を設定します。
このシナリオでは、Streams for Apache Kafka、Kafka、Kafka Bridge、および 3scale API Management コンポーネントは、同じ OpenShift クラスターで実行されます。
次の 3scale コンポーネントは、Kafka Bridge の検出に役立ちます。
- 3scale APIcast は、HTTP クライアントが Kafka Bridge API サービスに接続するための NGINX ベースの API ゲートウェイを提供します。
- 3scale toolbox は、Kafka Bridge サービスの OpenAPI 仕様を 3scale にインポートするために使用されます。
3scale が Kafka Bridge と同じクラスターにすでにデプロイされている場合は、デプロイメント手順を省略して、現在のデプロイメントを使用できます。
前提条件
- デプロイメントに際して 3scale コンポーネントを理解している。
- Streams for Apache Kafka および Kafka が稼働している。
- Kafka Bridge がデプロイされている。
3scale デプロイメントの場合:
- Red Hat 3scale API Management Supported Configurations を確認する
-
インストール用に
cluster-admin
ロール (system:admin
など) を持つユーザーを用意する 以下が記述されている JSON ファイルにアクセスできる。
-
Kafka Bridge OpenAPI 仕様 (
openAPIV2.json
) Kafka Bridge のヘッダー変更および Routing ポリシー (
policies_config.json
)GitHub で JSON ファイルを探します。
-
Kafka Bridge OpenAPI 仕様 (
手順
Red Hat 3scale ドキュメント に記載の手順に従って、3scale API Management を設定します。
3scale API Management Operator を使用して 3scale API Manager と APIcast をインストールします。
API Manager をデプロイする前に、
API Manager
カスタムリソースのwildcardDomain
プロパティーを、OpenShift クラスターをホストするドメインに更新します。ドメインは、3scale 管理ポータルにアクセスするための URL (
http[s]://<authentication_token>@3scale-admin.<cluster_domain>
) で使用されます。-
API Manager
カスタムリソースのステータスを確認して、3scale が正常にデプロイされたことを確認します。
3scale API Manager が Kafka Bridge サービスを検出するように承認を付与します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc adm policy add-cluster-role-to-user view system:serviceaccount:<my_bridge_namespace>:amp
oc adm policy add-cluster-role-to-user view system:serviceaccount:<my_bridge_namespace>:amp
このコマンドは、指定した namespace (
<my_bridge_namespace>
) の Kafka Bridge リソースへの読み取りアクセス (view
) を、API Manager (amp
) に付与します。3scale API Management toolbox をセットアップします。
- Red Hat 3scale のドキュメント に記載の手順に従って、3scale toolbox をインストールします。
3scale と対話できるように環境変数を設定します。
Kafka Bridge の設定例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow export REMOTE_NAME=strimzi-kafka-bridge export SYSTEM_NAME=strimzi_http_bridge_for_apache_kafka export TENANT=strimzi-kafka-bridge-admin export PORTAL_ENDPOINT=$TENANT.3scale.net export TOKEN=<3scale_authentication_token>
export REMOTE_NAME=strimzi-kafka-bridge
1 export SYSTEM_NAME=strimzi_http_bridge_for_apache_kafka
2 export TENANT=strimzi-kafka-bridge-admin
3 export PORTAL_ENDPOINT=$TENANT.3scale.net
4 export TOKEN=<3scale_authentication_token>
5 - 1
REMOTE_NAME
は、3scale 管理ポータルのリモートアドレスに割り当てられた名前です。- 2
SYSTEM_NAME
は、3scale toolbox で OpenAPI 仕様をインポートして作成される 3scale サービス/API の名前です。- 3
TENANT
は、3scale 管理ポータルのテナント名です (https://$TENANT.3scale.net
)。- 4
PORTAL_ENDPOINT
は、3scale 管理ポータルを実行するエンドポイントです。- 5
TOKEN
は、3scale toolbox または HTTP リクエストを介して対話するために 3scale 管理ポータルによって提供される認証トークンです。
3scale toolbox のリモート Web アドレスを設定します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow podman run -v /path/to/openapiv2.json:/tmp/oas/openapiv2.json registry.redhat.io/3scale-amp2/toolbox-rhel8:3scale2.14 3scale import openapi -d <admin_portal_url> /tmp/oas/openapiv2.json
podman run -v /path/to/openapiv2.json:/tmp/oas/openapiv2.json registry.redhat.io/3scale-amp2/toolbox-rhel8:3scale2.14 3scale import openapi -d <admin_portal_url> /tmp/oas/openapiv2.json
3scale toolbox のコンテナーイメージを指定します。3scale のコンテナーイメージは Red Hat Ecosystem Catalog にあります。
<admin_portal_url>
は、3scale 管理ポータルのエンドポイントへのパス (https://$TOKEN@$PORTAL_ENDPOINT/
) に置き換えます。これで、toolbox を実行するたびに、3scale 管理ポータルのエンドポイントアドレスを指定する必要がなくなりました。
Cluster Operator デプロイメントに、3scale が Kafka Bridge サービスを検出するために必要なラベルプロパティーおよびアノテーションプロパティーがあることを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow #... env: - name: STRIMZI_CUSTOM_KAFKA_BRIDGE_SERVICE_LABELS value: | discovery.3scale.net=true - name: STRIMZI_CUSTOM_KAFKA_BRIDGE_SERVICE_ANNOTATIONS value: | discovery.3scale.net/scheme=http discovery.3scale.net/port=8080 discovery.3scale.net/path=/ discovery.3scale.net/description-path=/openapi #...
#... env: - name: STRIMZI_CUSTOM_KAFKA_BRIDGE_SERVICE_LABELS value: | discovery.3scale.net=true - name: STRIMZI_CUSTOM_KAFKA_BRIDGE_SERVICE_ANNOTATIONS value: | discovery.3scale.net/scheme=http discovery.3scale.net/port=8080 discovery.3scale.net/path=/ discovery.3scale.net/description-path=/openapi #...
そうでない場合は、OpenShift コンソールを使用してプロパティーを追加するか、Cluster Operator と Kafka Bridge を 再デプロイし てみてください。
- 3scale 管理ポータルから、Red Hat 3scale のドキュメント で説明するように、OpenShift から Kafka Bridge API サービスをインポートします。
OpenAPI 仕様 (JSON ファイル) の Host フィールドを編集して、Kafka Bridge サービスのベース URL を使用します。
以下に例を示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow "host": "my-bridge-bridge-service.my-project.svc.cluster.local:8080"
"host": "my-bridge-bridge-service.my-project.svc.cluster.local:8080"
host
URL に以下が含まれていることを確認します。-
Kafka Bridge 名 (
my-bridge
) -
プロジェクト名 (
my-project
) -
Kafka Bridge のポート (
8080
)
-
Kafka Bridge 名 (
更新した OpenAPI 仕様をローカルファイルから 3scale toolbox にインポートします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow podman run -v /path/to/openapiv2.json:/tmp/oas/openapiv2.json registry.redhat.io/3scale-amp2/toolbox-rhel8:3scale2.14 3scale import openapi [opts] -d=<admin_portal_url> -t 3scale-kafka-bridge /tmp/oas/openapiv2.json
podman run -v /path/to/openapiv2.json:/tmp/oas/openapiv2.json registry.redhat.io/3scale-amp2/toolbox-rhel8:3scale2.14 3scale import openapi [opts] -d=<admin_portal_url> -t 3scale-kafka-bridge /tmp/oas/openapiv2.json
ここで、システム名は OpenAPI 仕様から生成するのではなく、
3scale-kafka-bridge
として指定します。/path/to/openapiv2.json
を OpenAPI 仕様ファイルへのパスに置き換え、<admin_portal_url>
を 3scale 管理ポータルのエンドポイントへのパスに置き換えます。サービスの Header Modification および Routing ポリシー (JSON ファイル) をインポートします。
3scale で作成したサービスの ID を見つけます。これは、ポリシーをインポートするときに必要です。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow export SERVICE_ID=$(curl -k -s -X GET "https://$PORTAL_ENDPOINT/admin/api/services.json?access_token=$TOKEN" | jq ".services[] | select(.service.system_name | contains(\"$SYSTEM_NAME\")) | .service.id")
export SERVICE_ID=$(curl -k -s -X GET "https://$PORTAL_ENDPOINT/admin/api/services.json?access_token=$TOKEN" | jq ".services[] | select(.service.system_name | contains(\"$SYSTEM_NAME\")) | .service.id")
ここでは、リクエストで
jq
コマンドライン JSON パーサーツールを 使用します。ポリシーをインポートします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 3scale policies import -f /path/to/policies_config.json -d=<admin_portal_url> 3scale-kafka-bridge
3scale policies import -f /path/to/policies_config.json -d=<admin_portal_url> 3scale-kafka-bridge
/path/to/policies_config.json
をポリシー設定ファイルへのパスに置き換え、<admin_portal_url>
を 3scale 管理ポータルのエンドポイントへのパスに置き換えます。
- 3scale 管理ポータルから、Kafka Bridge サービスのエンドポイントとポリシーがロードされていることを確認します。
3scale Toolbox から、アプリケーションプランとアプリケーションを作成します。
認証のユーザーキーを取得するためにアプリケーションが必要になります。
実稼働環境用の手順: 実稼働環境のゲートウェイで API を利用可能にするには、設定をプロモートします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 3scale proxy-config promote $REMOTE_NAME $SERVICE_ID
3scale proxy-config promote $REMOTE_NAME $SERVICE_ID
API テストツールを使用して、コンシューマーの作成に呼び出しを使用する APIcast ゲートウェイと、アプリケーションに作成されたユーザーキーで、Kafka Bridge にアクセスできることを検証します。
以下に例を示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow https//my-project-my-bridge-bridge-service-3scale-apicast-staging.example.com:443/consumers/my-group?user_key=3dfc188650101010ecd7fdc56098ce95
https//my-project-my-bridge-bridge-service-3scale-apicast-staging.example.com:443/consumers/my-group?user_key=3dfc188650101010ecd7fdc56098ce95
Kafka Bridge からペイロードが返されれば、コンシューマーが正常に作成されています。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow { "instance_id": "consumer1", "base uri": "https//my-project-my-bridge-bridge-service-3scale-apicast-staging.example.com:443/consumers/my-group/instances/consumer1" }
{ "instance_id": "consumer1", "base uri": "https//my-project-my-bridge-bridge-service-3scale-apicast-staging.example.com:443/consumers/my-group/instances/consumer1" }
ベース URI は、クライアントが以降のリクエストで使用するアドレスです。