在Backstage中集成Kubernetes

在Backstage中集成Kubernetes

Zave Genshin Impact

注意
本文档基于 Backstage 1.32.0 版本编写,并采用自 1.24.0 版本以来官方推荐使用的新后端系统(New BackEnd System)。Backstage 仍处于不断更新发展中,本文下述步骤可能将不适用于后续更新版本。

一、开发前准备

  1. 确认 Kubernetes 与 ArgoCD 能够互相 ping 通
  2. 确认 Kubernetes 与 Harbor 能够互相 ping 通
  3. 确认 Kubernetes 与 Backstage 服务能够互相 ping 通
  4. 集成参考文档:

二、在前端接入 Kubernetes 插件

(1)安装支持插件

从项目的根目录开始:

1
yarn --cwd packages/app add @backstage/plugin-kubernetes

(2)添加到合适的位置

编辑 packages/app/src/components/catalog/EntityPage.tsx:

1
2
3
4
5
6
7
8
9
10
11
// ...other import
import { EntityKubernetesContent } from '@backstage/plugin-kubernetes';

const serviceEntityPage = (
<EntityLayout>
{/* other tabs... */}
<EntityLayout.Route path="/kubernetes" title="Kubernetes">
<EntityKubernetesContent refreshIntervalMs={30000} />
</EntityLayout.Route>
</EntityLayout>
);

其中的 refreshIntervalMs 属性为自动刷新的间隔;如果未设置,则默认为 10000ms。

(3)添加配置

编辑 examples/template/content/catalog-info.yaml:

1
2
3
4
5
6
7
8
9
10
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
name: ${{ values.name }}
annotations:
# ...others
backstage.io/kubernetes-namespace: ${{ values.Kubernetes_Env }}
backstage.io/kubernetes-id: ${{ values.name }}
spec:
# ...others

在 catalog-info 文件中添加:

  • backstage.io/kubernetes-namespace 标签:对应所创建项目被部署到的 Kubernetes namespace
  • backstage.io/kubernetes-id 标签:对应所创建的项目的一个特征 ID 标识

综合起来,就是当我们浏览项目对应的 Kubernetes 信息页时,Backstage 将会到配置的 Kubernetes 集群中寻找上面指定的 namespace,并在 namespace 中寻找具备 backstage.io/kubernetes-id: XXXX(指定值)的 Pod,并将它的信息返回展示。backstage.io/kubernetes-id: XXXX 需要声明在创建 Pod 所需的 deployment.yaml 文档中(具体参考下文)。

此时我们将会在项目详情页中看到如下的展示:

Kubernetes 前端展示示例

我们还需要完成后端的集成以及配置,才能够获取到内容。

三、在后端接入 Kubernetes 依赖

(1)安装依赖

从项目的根目录开始:

1
yarn --cwd packages/backend add @backstage/plugin-kubernetes-backend

(2)添加依赖

编辑 packages/backend/src/index.ts:

1
2
// Other plugins...
backend.add(import('@backstage/plugin-kubernetes-backend'));

(3)配置 Kubernetes 集群实例

编辑 app-config.yaml:

1
2
3
4
5
6
7
8
9
10
11
12
kubernetes:
serviceLocatorMethod:
type: 'multiTenant'
clusterLocatorMethods:
- type: 'config'
clusters:
- url: https://xxxxxxxx
name: kubernetes
authProvider: 'serviceAccount'
skipTLSVerify: true # 是否验证TLS证书,默认为false
skipMetricsLookup: true # 是否展示Pod的CPU/内存信息,默认为false
serviceAccountToken: 'xxxxxx'

这里的配置表示 Kubernetes 的集群的访问权限认证将通过 SA 形式进行,serviceAccountToken 的值在这里是 Kubernetes 最高管理员权限所对应的 SA_Token。这也是便于整个系统读取 Kubernetes 相关的信息。

更多的配置信息参见:Backstage 官方 | Configuring Kubernetes integration

到这里的话,最基本的集成就结束了。接下来将针对本系统的需求进行一些额外的补充。

四、为 ArgoCD 同步时的操作补充对应的 Kubernetes 配置文件

(1)创建配置文件

在 examples/template/content 文件夹下新建如下文件/文件夹:

1
2
3
4
5
template/
└── content/
└── argocd-yaml/
├── deployment.yaml
└── service.yaml

argocd-yaml 目录结构

其中 argocd-yaml 的命名对应创建 ArgoCD application 时所配置的 Kubernetes Pod 对应的配置文件在项目中的位置,也就是下图所示的部分:

ArgoCD Application Path 配置

如果手动创建 application 的话,就需要在红框中填写 argocd-yaml。ArgoCD 在同步时就会根据这个文件夹下的配置文件去读取/创建 Pod。

(2)配置文件编写参考

deployment.yaml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
apiVersion: apps/v1
kind: Deployment
metadata:
name: ${{ values.name }}
labels:
backstage.io/kubernetes-id: ${{ values.name }}
spec:
replicas: ${{ values.Kubernetes_Pod_CopyNum }}
selector:
matchLabels:
app: ${{ values.name }}
template:
metadata:
labels:
app: ${{ values.name }}
backstage.io/kubernetes-id: ${{ values.name }}
spec:
containers:
- image: harbor.xxxxxx.com.cn/${{ values.Harbor_project_name }}/nginx:v1
name: ${{ values.name }}
ports:
- containerPort: 80
resources:
requests:
memory: "${{ values.Kubernetes_Pod_Size }}Gi"
cpu: "${{ values.Kubernetes_Pod_CoreNum }}"
limits:
memory: "${{ values.Kubernetes_Pod_Size }}Gi"
cpu: "${{ values.Kubernetes_Pod_CoreNum }}"

service.yaml:

1
2
3
4
5
6
7
8
9
10
11
12
apiVersion: v1
kind: Service
metadata:
name: ${{ values.name }}
spec:
ports:
- port: 80
targetPort: 80
nodePort: 32060
type: NodePort
selector:
app: ${{ values.name }}

其中,在 deployment.yaml 中声明 backstage.io/kubernetes-id 标签非常重要!

五、其他补充说明

(1)关于如何获取 Kubernetes 用户的无限期 token

注意
Kubernetes 自 1.24 版本起,关闭了创建用户时自动创建对应 token 的功能。

① 若 Kubernetes 版本低于 1.24,则可以通过执行下述命令获取:

1
2
kubectl get secrets          # 获取secrets
kubectl describe secrets xxxx # 找到你的账户的token名称替换掉xxxx

② 若 Kubernetes 版本大于等于 1.24,则需要通过自行创建 Secret 配置文件获取,具体方法自行百度,此处不再赘述。

  • 标题: 在Backstage中集成Kubernetes
  • 作者: Zave
  • 创建于 : 2026-09-05 12:00:00
  • 更新于 : 2026-09-05 12:00:00
  • 链接: https://zavex.cn/post/29562.html
  • 版权声明: 版权所有 © Zave,禁止转载。
评论