安裝 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 權杖執行)後端將具有對叢集的完整存取權,並會將所有資源傳回給任何可以存取後端的人員。
權杖需要以下權限才能正常運作
get
、list
和watch
權限,適用於eventing.knative.dev/brokers
、eventing.knative.dev/eventtypes
和eventing.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
用法¶
如需有關使用插件的詳細資訊,請參閱插件文件。