コンテンツへスキップ

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/brokerseventing.knative.dev/eventtypes、およびeventing.knative.dev/triggersリソースに対するgetlist、および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

使用法

プラグインの使用の詳細については、プラグインドキュメントを参照してください。

サイトのトラフィックを把握するために、分析とCookieを使用しています。サイトの利用に関する情報は、その目的のためにGoogleと共有されます。詳細はこちら。