Knative Backstageプラグインのインストール¶
Knativeコミュニティは、Knativeとそのそれぞれのバックエンド用のBackstageプラグインのセットを提供する予定です。現在、Event Meshプラグインという1つのプラグインが利用可能です。
Event Meshプラグイン¶
Event Meshプラグインは、Knative Eventingリソースを表示および管理できるBackstageプラグインです。
Backstageプラグインは、Kubernetesクラスターで実行され、Kubernetes APIサーバーと通信する特別なバックエンドと通信します。
このプラグインのデモセットアップは、https://github.com/aliok/knative-backstage-demoで入手できます。
プラグインには、静的と動的の2つのディストリビューションがあります。このドキュメントでは、静的ディストリビューションに焦点を当てます。動的ディストリビューションについては、プラグインリポジトリの動的プラグインREADMEファイルを参照してください。
インストール¶
プラグインはBackstageインスタンスにインストールする必要があり、プラグインが通信するバックエンドはKubernetesクラスターにインストールする必要があります。
プラグインバックエンドコントローラのインストール¶
VERSION="latest" # or a specific version like knative-v1.15.0
kubectl apply -f https://github.com/knative-extensions/backstage-plugins/releases/${VERSION}/download/eventmesh.yaml
これにより、バックエンドコントローラがKubernetesクラスターにインストールされます。バックエンドの役割は、Kubernetes APIサーバーと通信し、プラグインに必要な情報を提供することです。
Backstageプラグインのインストール¶
Backstageディレクトリで、次のコマンドを実行してプラグインをインストールします
VERSION="latest" # or a specific version like 1.15.0 from https://www.npmjs.com/package/@knative-extensions/plugin-knative-event-mesh-backend
yarn workspace backend add @knative-extensions/plugin-knative-event-mesh-backend@${VERSION}
Backstageには、新しいシステムに置き換えられつつあるレガシーバックエンドシステムがあります。レガシーバックエンドシステムを使用している場合は、以下の手順に従ってプラグインをインストールできます。
新しいバックエンドシステムとレガシーバックエンドシステムの詳細については、Backstageドキュメントを参照してください。
情報
KubernetesコントローラとBackstageバックエンドシステムの両方でBackend
という用語が使用されていることを認識しています。Backstageバックエンドシステムは、以前にインストールしたKubernetesコントローラとは異なります。コントローラは、Kubernetesクラスターで実行され、Kubernetes APIサーバーと通信するKubernetesコントローラです。Backstageバックエンドシステムは、上記のKubernetesコントローラなどのデータプロバイダーと通信するバックエンドプラグインを実行するためのフレームワークです。
新しいBackstageバックエンドシステムでのプラグインの有効化¶
新しいバックエンドシステムにインストールするには、packages/backend/index.ts
ファイルに以下を追加します
import { createBackend } from '@backstage/backend-defaults';
const backend = createBackend();
// Other plugins/modules
backend.add(import('@knative-extensions/plugin-knative-event-mesh-backend/alpha'));
警告
app-config.yaml
ファイルでスケジュールに変更を加えた場合は、再起動して変更を適用してください。
レガシーBackstageバックエンドシステムでのプラグインの有効化¶
エンティティプロバイダーのスケジューラを構成し、プロセッサを有効にします。次のコードをpackages/backend/src/plugins/catalog.ts
ファイルに追加します
import {CatalogClient} from "@backstage/catalog-client";
import {
KnativeEventMeshProcessor,
KnativeEventMeshProvider
} from '@knative-extensions/plugin-knative-event-mesh-backend';
export default async function createPlugin(
env:PluginEnvironment,
):Promise<Router> {
const builder = await CatalogBuilder.create(env);
/* ... other processors and/or providers ... */
// ADD THESE
builder.addEntityProvider(
KnativeEventMeshProvider.fromConfig(env.config, {
logger: env.logger,
scheduler: env.scheduler,
}),
);
const catalogApi = new CatalogClient({
discoveryApi: env.discovery,
});
const knativeEventMeshProcessor = new KnativeEventMeshProcessor(catalogApi, env.logger);
builder.addProcessor(knativeEventMeshProcessor);
/* ... other processors and/or providers ... */
const {processingEngine, router} = await builder.build();
await processingEngine.start();
return router;
}
構成¶
情報
注:バックエンドはBackstageインスタンスからアクセスできる必要があります。バックエンドを公開せずに実行している場合は、テスト目的でkubectl port-forward
を使用して、バックエンドサービスのポートをローカルマシンに転送できます。
kubectl port-forward -n knative-eventing svc/eventmesh-backend 8080:8080
プラグインは、バックエンドと通信するように構成する必要があります。これはBackstageインスタンスのapp-config.yaml
ファイルで構成でき、1つまたは複数のプロバイダーの構成を許可します。
knativeEventMesh
マーカーを使用して、Backstageのapp-config.yaml
ファイルの構成を開始します
catalog:
providers:
knativeEventMesh:
dev:
token: '${KNATIVE_EVENT_MESH_TOKEN}' # SA token to authenticate to the backend
baseUrl: '${KNATIVE_EVENT_MESH_BACKEND}' # URL of the backend installed in the cluster
schedule: # optional; same options as in TaskScheduleDefinition
# supports cron, ISO duration, "human duration" as used in code
frequency: { minutes: 1 }
# supports ISO duration, "human duration" as used in code
timeout: { minutes: 1 }
app-config.yaml
ファイルのプレースホルダーを手動で変更するか、環境変数を使用して値を設定できます。環境変数は、Backstageインスタンスを開始する前に次のように設定できます
export KNATIVE_EVENT_MESH_TOKEN=<your-token>
export KNATIVE_EVENT_MESH_BACKEND=<backend-url>
KNATIVE_EVENT_MESH_BACKEND
の値は、バックエンドサービスのURLである必要があります。バックエンドサービスをBackstageインスタンスと同じクラスターで実行している場合は、サービス名をhttp://eventmesh-backend.knative-eventing.svc.cluster.local
などのURLとして使用できます。Backstageインスタンスが同じクラスターで実行されていない場合は、バックエンドサービスの外部URLを使用できます。または、テスト目的で公開せずにバックエンドを実行している場合は、前述のようにkubectl port-forward
を使用できます。
KNATIVE_EVENT_MESH_TOKEN
の値は、クラスター内のKnative Eventingリソースを一覧表示するために必要な権限を持つサービスアカウントトークンである必要があります。バックエンドは、このトークンを使用してKubernetes APIサーバーへの認証を行います。これは、セキュリティ上の理由から必要です。それ以外の場合(バックエンドがSAトークンで直接実行されている場合)、バックエンドはクラスターへのフルアクセス権を持ち、バックエンドにアクセスできるすべての人にすべてのリソースを返すことになります。
トークンが正しく機能するには、次の権限が必要です
eventing.knative.dev/brokers
、eventing.knative.dev/eventtypes
、およびeventing.knative.dev/triggers
リソースに対するget
、list
、およびwatch
権限- トリガーのサブスクライバーを取得するためのすべてのリソースに対する
get
権限
必要な権限を持つClusterRoleを作成し、それをサービスアカウントトークンにバインドできます。
構成例は次のとおりです
apiVersion: v1
kind: ServiceAccount
metadata:
name: my-eventmesh-backend-service-account
namespace: default
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: my-eventmesh-backend-cluster-role
rules:
# permissions for eventtypes, brokers and triggers
- apiGroups:
- "eventing.knative.dev"
resources:
- brokers
- eventtypes
- triggers
verbs:
- get
- list
- watch
# permissions to get subscribers for triggers
# as subscribers can be any resource, we need to give access to all resources
# we fetch subscribers one by one, we only need `get` verb
- apiGroups:
- "*"
resources:
- "*"
verbs:
- get
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: my-eventmesh-backend-cluster-role-binding
subjects:
- kind: ServiceAccount
name: my-eventmesh-backend-service-account
namespace: default
roleRef:
kind: ClusterRole
name: my-eventmesh-backend-cluster-role
apiGroup: rbac.authorization.k8s.io
---
apiVersion: v1
kind: Secret
metadata:
name: my-eventmesh-backend-secret
namespace: default
annotations:
kubernetes.io/service-account.name: my-eventmesh-backend-service-account
type: kubernetes.io/service-account-token
トークンを取得するには、次のコマンドを実行します
kubectl get secret my-eventmesh-backend-secret -o jsonpath='{.data.token}' | base64 --decode
トークンがKubernetes APIサーバーで動作するかどうかを簡単に確認します
export KUBE_API_SERVER_URL=$(kubectl config view --minify --output jsonpath="{.clusters[*].cluster.server}") # e.g. "https://192.168.2.151:16443"
export KUBE_SA_TOKEN=$(kubectl get secret my-eventmesh-backend-secret -o jsonpath='{.data.token}' | base64 --decode)
curl -k -H "Authorization: Bearer $KUBE_SA_TOKEN" -X GET "${KUBE_API_SERVER_URL}/apis/eventing.knative.dev/v1/namespaces/default/brokers"
# Should see the brokers, or nothing if there are no brokers
# But, should not see an error
トークンがBackstageバックエンドで動作するかどうかを2回目に簡単に確認します
export KNATIVE_EVENT_MESH_BACKEND=https://#:8080 # or the URL of the backend
export KUBE_SA_TOKEN=$(kubectl get secret my-eventmesh-backend-secret -o jsonpath='{.data.token}' | base64 --decode)
curl -k -H "Authorization: Bearer $KUBE_SA_TOKEN" -X GET "${KNATIVE_EVENT_MESH_BACKEND}"
# Should see the response from the backend such as
# {
# "brokers" : [...],
# "eventTypes" : [...]
#}
これらの簡単なチェックが機能する場合は、app-config.yaml
ファイルでKNATIVE_EVENT_MESH_TOKEN
の値としてトークンを使用できます。
トラブルシューティング¶
Backstageアプリケーションを起動すると、次のようなログ行が表示されます
[1] 2024-01-04T09:38:08.707Z knative-event-mesh-backend info Found 1 knative event mesh provider configs with ids: dev type=plugin
使用法¶
プラグインの使用の詳細については、プラグインドキュメントを参照してください。