跳至內容

安裝 Knative Backstage 插件

Knative 社群計劃為 Knative 及其各自的後端提供一組 Backstage 插件。目前有一個插件可用,即 Event Mesh 插件。

Event Mesh 插件

Event Mesh 插件是一個 Backstage 插件,可讓您檢視和管理 Knative Eventing 資源。

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 檔案中設定,並允許設定一個或多個提供者。

使用 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 實例相同的叢集中執行後端服務,您可以使用服務名稱作為 URL,例如 http://eventmesh-backend.knative-eventing.svc.cluster.local。如果 Backstage 實例不在相同的叢集中執行,您可以使用後端服務的外部 URL。或者,如果您在未公開的情況下執行後端以進行測試,您可以使用上述的 kubectl port-forward

KNATIVE_EVENT_MESH_TOKEN 的值應為具有列出叢集中 Knative Eventing 資源所需權限的服務帳戶權杖。後端將使用此權杖向 Kubernetes API 伺服器進行驗證。這是出於安全考量所必需的,否則(如果後端直接使用 SA 權杖執行)後端將具有對叢集的完整存取權,並會將所有資源傳回給任何可以存取後端的人員。

權杖需要以下權限才能正常運作

  • getlistwatch 權限,適用於 eventing.knative.dev/brokerseventing.knative.dev/eventtypeseventing.knative.dev/triggers 資源
  • 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 後端

export KNATIVE_EVENT_MESH_BACKEND=https://127.0.0.1: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 分享,用於該用途。了解更多。