Red Hat Developer Hub 的管理指南


Red Hat Developer Hub 1.1

Red Hat Customer Content Services

摘要

Red Hat Developer Hub 是一个用于构建开发人员门户的开发人员平台。本文档概述 Red Hat Developer Hub 并解释了如何安装产品。

前言

Red Hat Developer Hub 是一个企业级的开放开发人员平台,可用于构建开发人员门户。此平台包含支持和建议的框架,有助于减少开发人员的欺诈和提高其生产力。

Red Hat Developer Hub 支持

如果您在执行本文档所述的某个流程时遇到问题,请访问红帽客户门户。您可以使用红帽客户门户网站进行以下目的:

第 1 章 安装 Red Hat Developer Hub Operator

作为管理员,您可以安装 Red Hat Developer Hub Operator。授权用户可以使用 Operator 在以下平台上安装 Red Hat Developer Hub:

  • Red Hat OpenShift Container Platform (RHOCP)
  • Amazon Elastic Kubernetes Service (EKS)
  • Microsoft Azure Kubernetes Service (AKS)

先决条件

  • 以 OpenShift Container Platform Web 控制台的管理员身份登录。
  • 您已在项目中配置了适当的角色和权限来创建应用程序。如需更多信息,请参阅有关构建应用程序的 Red Hat OpenShift 文档
注意

为提高安全性,请在专用的 default 命名空间中部署 Red Hat Developer Hub Operator,如 rhdh-operator。集群管理员可以通过角色绑定或集群角色绑定限制其他用户对 Operator 资源的访问。

流程

  1. 在 OpenShift Container Platform Web 控制台的 Administrator 视角中,进入到 Operators > OperatorHub
  2. Filter by keyword 框中,输入 Developer Hub 并点 Red Hat Developer Hub Operator 卡。
  3. Red Hat Developer Hub Operator 页面中,点 Install
  4. Install Operator 页面中,使用 Update channel 下拉菜单选择您要使用的更新频道:

    • fast 通道提供 y-stream (x.y)和 z-stream (x.y.z)更新,例如从 1.1 升级到 1.2,或者从 1.1.0 升级到 1.1.1。

      重要

      fast 通道包括特定版本可用的所有更新。任何更新都可能会在 Red Hat Developer Hub 部署中引入意外更改。参阅发行注记以了解任何可能破坏更改的详细信息。

    • fast-1.1 频道只提供 z-stream 更新,例如从 1.1.1 升级到 1.1.2。如果要在以后更新 Red Hat Developer Hub y-version,例如从 1.1 更新至 1.2,您必须手动切换到 fast 频道。
  5. Install Operator 页面中,为 Operator 选择 Update approval 策略:

    • 如果选择 Automatic 选项,Operator 会更新,而无需手动确认。
    • 如果选择 Manual 选项,则当更新频道中发布新更新时,会打开通知。在开始安装前,管理员必须手动批准更新。
  6. Install

验证

  • 要查看已安装的 Red Hat Developer Hub Operator,请点 View Operator

您可以使用以下方法之一在 OpenShift Container Platform 上安装 Red Hat Developer Hub:

  • Helm chart
  • Red Hat Developer Hub Operator

您可以使用 Red Hat OpenShift Container Platform 中的 Helm chart 来安装 Developer Hub,这是灵活的安装方法。

Helm 是 OpenShift Container Platform 上的软件包管理器,它提供以下功能:

  • 使用自定义 hook 应用常规应用程序更新
  • 管理复杂应用程序的安装
  • 提供可在公共和私有服务器上托管的图表
  • 支持回滚到以前的应用程序版本

Red Hat Developer Hub Helm chart 位于 OpenShift Dedicated 和 OpenShift Container Platform 的 Helm 目录中。

先决条件

  • 已登陆到 OpenShift Container Platform 帐户。
  • 具有 OpenShift Container Platform admin 角色的用户在项目中配置了适当的角色和权限,以创建应用程序。如需有关 OpenShift Container Platform 角色的更多信息,请参阅使用 RBAC 定义和应用权限
  • 您已在 OpenShift Container Platform 中创建了一个项目。有关在 OpenShift Container Platform 中创建项目的更多信息,请参阅 Red Hat OpenShift Container Platform 文档

流程

  1. Developer Hub web 控制台的 Developer 视角,点 +Add
  2. Developer Catalog 面板中点 Helm Chart
  3. Filter by keyword 框中,输入 Developer Hub 并点 Red Hat Developer Hub 卡。
  4. 在 Red Hat Developer Hub 页面中,点 Create
  5. 从集群中移除,复制 OpenShift Container Platform 路由器主机(例如: apps.<clusterName>.com)。
  6. 选择单选按钮,以使用表单视图或 YAML 视图来配置 Developer Hub 实例。默认选择 Form view。

    • 使用 Form view

      1. 要使用 Form 视图配置实例,请进入 Backstage 实例中的 Root Schemaglobal → Enable service authentication,并将 OpenShift Container Platform 路由器主机粘贴到表单上的字段中。
    • 使用 YAML 视图

      1. 要使用 YAML 视图配置实例,请将 OpenShift Container Platform 路由器主机名粘贴到 global.clusterRouterBase 参数值中,如下例所示:

        global:
          auth:
            backend:
              enabled: true
          clusterRouterBase: apps.<clusterName>.com
          # other Red Hat Developer Hub Helm Chart configurations
  7. 如果需要,请编辑其他值。

    注意

    有关主机的信息会被复制,并可以被 Developer Hub 后端访问。

    当自动生成 OpenShift Container Platform 路由时,路由的主机值会被推断出来,并将相同的主机信息发送到 Developer Hub。另外,如果自定义域中存在使用值手动设置主机,则自定义主机将具有优先权。

  8. Create 并等待数据库和 Developer Hub 启动。
  9. Open URL 图标开始使用 Developer Hub 平台。

    rhdh helm install
注意

如果 Developer Hub 容器无法访问配置文件,则 developer-hub pod 可能会处于 CrashLoopBackOff 状态。这个错误由以下日志表示:

Loaded config from app-config-from-configmap.yaml, env
...
2023-07-24T19:44:46.223Z auth info Configuring "database" as KeyStore provider type=plugin
Backend failed to start up Error: Missing required config value at 'backend.database.client'

要解决这个错误,请验证配置文件。

air-gapped 环境(也称为 air-gapped 网络或隔离的网络)通过隔离系统或网络来确保安全性。建立这个隔离以防止 air-gapped 系统和外部源间的未授权访问、数据传输或通信。

您可以在 air-gapped 环境中安装 Red Hat Developer Hub,以确保安全性并满足特定的法规要求。

要在 air-gapped 环境中安装 Developer Hub,您必须有权访问 registry.redhat.io 和 air-gapped 环境的 registry。

先决条件

  • 已安装 Red Hat OpenShift Container Platform 4.12 或更高版本。
  • 您可以访问 registry.redhat.io
  • 您可以访问集群的 Red Hat OpenShift Container Platform 镜像 registry。有关公开镜像 registry 的更多信息,请参阅有关 公开 registry 的 Red Hat OpenShift Container Platform 文档。
  • 您已在工作站上安装了 oc 命令行工具。
  • 您已在工作站上安装了 podman 命令行工具。
  • 您在 Red Hat Developer Portal 中有一个帐户。

流程

  1. 运行以下命令,使用 oc 命令行工具登录到 OpenShift Container Platform 帐户:

    oc login -u <user> -p <password> https://api.<hostname>:6443
  2. 运行以下命令,使用 podman 命令行工具登录到 OpenShift Container Platform 镜像 registry:

    podman login -u kubeadmin -p $(oc whoami -t) default-route-openshift-image-registry.<hostname>
    注意

    您可以运行以下命令来获取 OpenShift Container Platform 镜像 registry 的完整主机名,然后使用命令中的主机名登录:

    REGISTRY_HOST=$(oc get route default-route -n openshift-image-registry --template='{{ .spec.host }}')
    podman login -u kubeadmin -p $(oc whoami -t) $REGISTRY_HOST
  3. 运行以下命令,登录到 podman 中的 registry.redhat.io

    podman login registry.redhat.io

    有关 registry 身份验证的更多信息,请参阅 Red Hat Container Registry 身份验证

  4. 运行以下命令,将 Developer Hub 和 PostgreSQL 镜像从 Red Hat Image registry 拉取到您的工作站:

    podman pull registry.redhat.io/rhdh/rhdh-hub-rhel9:{product-chart-version}
    podman pull registry.redhat.io/rhel9/postgresql-15:latest
  5. 运行以下命令,将这两个镜像推送到内部 OpenShift Container Platform 镜像 registry:

    podman push --remove-signatures registry.redhat.io/rhdh/rhdh-hub-rhel9:{product-chart-version} default-route-openshift-image-registry.<hostname>/<project_name>/rhdh-hub-rhel9:{product-chart-version}
    podman push --remove-signatures registry.redhat.io/rhel9/postgresql-15:latest default-route-openshift-image-registry.<hostname>/<project_name>/postgresql-15:latest

    有关直接将镜像推送到 OpenShift Container Platform 镜像 registry 的更多信息,请参阅 如何直接将镜像推送到 OpenShift 4 registry 中

    重要

    如果发生 x509 错误,请验证您已在 系统上安装了用于 OpenShift Container Platform 路由的 CA 证书

  6. 使用以下命令验证 OpenShift Container Platform 内部 registry 中是否存在这两个镜像:

    oc get imagestream -n <project_name>
  7. 运行以下命令,为这两个镜像启用本地镜像查找:

    oc set image-lookup postgresql-15
    oc set image-lookup  rhdh-hub-rhel9
  8. 进入 YAML 视图,并使用以下值更新 backstagepostgresqlimage 部分:

    Developer Hub 镜像的值示例

    upstream:
      backstage:
        image:
          registry: ""
          repository: rhdh-hub-rhel9
          tag: latest

    PostgreSQL 镜像的值示例

    upstream:
      postgresql:
        image:
          registry: ""
          repository: postgresql-15
          tag: latest

  9. 使用 Helm Chart 安装 Red Hat Developer Hub。有关安装 Developer Hub 的更多信息,请参阅 第 2.1 节 “使用 Helm Chart 在 OpenShift Container Platform 上部署 Red Hat Developer Hub”

作为开发者,您可以使用 Red Hat OpenShift Container Platform Web 控制台中的 Developer Catalog 在 OpenShift Container Platform 上部署 Red Hat Developer Hub 实例。此部署方法使用 Red Hat Developer Hub Operator。

先决条件

流程

  1. 在 OpenShift Container Platform 中为 Red Hat Developer Hub 实例创建项目,或选择现有项目。

    提示

    有关在 OpenShift Container Platform 中创建项目的更多信息,请参阅 Red Hat OpenShift Container Platform 文档中的使用 Web 控制台 创建项目。

  2. 从 OpenShift Container Platform Web 控制台的 Developer 视角,点 +Add
  3. Developer Catalog 面板中,单击 Operator Backed
  4. Filter by keyword 框中,输入 Developer Hub 并点 Red Hat Developer Hub 卡。
  5. Create
  6. 为 Red Hat Developer Hub 实例 添加自定义配置
  7. Create Backstage 页面中,点 Create

验证

pod 就绪后,您可以通过打开 URL 来访问 Red Hat Developer Hub 平台。

  1. Topology 视图中的 pod 确认 pod 就绪,并确认 Details 面板中的 Status。当 pod 就绪时,pod 状态为 Active
  2. Topology 视图中,点 Developer Hub pod 上的 Open URL 图标。

    Operator 安装 1

2.2.1. 配置 Developer Hub 自定义资源

Backstage 自定义资源(CR)的更新由 Red Hat Developer Hub Operator 自动处理。但是,除非更新 CR 本身,否则对 CR 引用的资源(如 ConfigMap 或 Secret)的更新不会被自动更新。如果要更新 CR 引用的资源,您必须手动删除 Backstage Deployment,以便 Operator 可以使用更新的资源重新创建它。

要更改 Red Hat Developer Hub 实例的配置,您必须执行以下操作:

  • 将自定义应用程序配置文件添加到 OpenShift Container Platform 中,并在自定义资源(CR)中引用它。在 OpenShift Container Platform 中,您可以使用以下示例作为基础模板来创建 ConfigMap,如 app-config-rhdh.yaml

    kind: ConfigMap
    apiVersion: v1
    metadata:
      name: app-config-rhdh
    data:
      "app-config-rhdh.yaml": |
        app:
          title: Red Hat Developer Hub
          baseUrl: https://backstage-developer-hub-my-ns.apps.ci-ln-vtkzr22-72292.origin-ci-int-gce.dev.rhcloud.com
        backend:
          auth:
            keys:
              - secret: "${BACKEND_SECRET}"
          baseUrl: https://backstage-backstage-sample-my-ns.apps.ci-ln-vtkzr22-72292.origin-ci-int-gce.dev.rhcloud.com
          cors:
            origin: https://backstage-backstage-sample-my-ns.apps.ci-ln-vtkzr22-72292.origin-ci-int-gce.dev.rhcloud.com
  • 使用 Red Hat Developer Hub 的强制后端 auth 密钥来引用 OpenShift Container Platform Secret 中定义的环境变量。
  • 在应用程序配置的 app.baseUrlbackend.baseUrlbackend.cors.origin 字段中设置 Red Hat Developer Hub 实例的外部 URL。默认情况下,URL 类似以下示例:https://backstage-< CUSTOM_RESOURCE_NAME>-<NAMESPACE_NAME>.<OPENSHIFT_INGRESS_DOMAIN>;.

    • 您可以使用 oc get ingresses.config/cluster -o jsonpath='{.spec.domain}' 命令显示入口域。如果要使用不同的主机或子域,请自定义 Custom Resource spec.application.route 字段,并相应地调整应用程序配置。
注意

您需要保护 Red Hat Developer Hub 安装不受外部和未授权访问的影响。像管理任何其他机密一样管理后端 auth 密钥。满足强的密码要求,不要在任何配置文件中公开它,仅将其作为环境变量注入配置文件中。

先决条件

  • 您有一个活跃的 Red Hat OpenShift Container Platform 帐户。

流程

  1. Developer 视角中,选择 ConfigMaps 选项卡。
  2. Create ConfigMap
  3. Configure via 中选择 YAML view 选项,并根据需要对文件进行更改。
  4. Create
  5. 选择 Secrets 选项卡。
  6. Create Key/value Secret
  7. 将 secret 命名为 secrets-rhdh
  8. 添加名为 BACKEND_SECRET 的键,并将 base64 编码字符串作为值。为每个 Red Hat Developer Hub 实例使用唯一值。例如,您可以使用以下命令从终端生成密钥:

    node -p 'require("crypto").randomBytes(24).toString("base64")'
  9. Create
  10. 选择 Topology 视图。
  11. 点您要使用的 Red Hat Developer Hub 实例的 overflow 菜单,然后选择 Edit Backstage 来加载 Red Hat Developer Hub 实例的 YAML 视图。

    Operator 安装 2
  12. spec.application.appConfig.configMapsspec.application.extraEnvs.secrets 字段添加到自定义资源。例如:

    spec:
      application:
        appConfig:
          mountPath: /opt/app-root/src
          configMaps:
             - name: app-config-rhdh
        extraEnvs:
          secrets:
             - name: secrets-rhdh
        extraFiles:
          mountPath: /opt/app-root/src
        replicas: 1
        route:
          enabled: true
      database:
        enableLocalDb: true
  13. 点击 Save
  14. 返回到 Topology 视图,并等待 Red Hat Developer Hub pod 启动。
  15. Open URL 图标开始使用带有新配置更改的 Red Hat Developer Hub 平台。

其他资源

您可以将动态插件的配置存储在 Backstage 自定义资源(CR)可以引用的 ConfigMap 对象中。

注意

如果 pluginConfig 字段引用环境变量,您必须在 secrets-rhdh secret 中定义变量。

流程

  1. 在 OpenShift Container Platform Web 控制台中,选择 ConfigMaps 选项卡。
  2. Create ConfigMap
  3. Create ConfigMap 页面中,根据需要在 Configure via 中选择 YAML view 选项,并编辑该文件。

    使用 GitHub 动态插件的 ConfigMap 对象示例

    kind: ConfigMap
    apiVersion: v1
    metadata:
      name: dynamic-plugins-rhdh
    data:
      dynamic-plugins.yaml: |
        includes:
          - dynamic-plugins.default.yaml
        plugins:
          - package: './dynamic-plugins/dist/backstage-plugin-catalog-backend-module-github-dynamic'
            disabled: false
            pluginConfig: {}

  4. Create
  5. 转至 Topology 选项卡。
  6. 点击您要使用的 Red Hat Developer Hub 实例的 overflow 菜单,然后选择 Edit Backstage 来加载 Red Hat Developer Hub 实例的 YAML 视图。

    Operator 安装 2
  7. dynamicPluginsConfigMapName 字段添加到 Backstage CR。例如:

    apiVersion: rhdh.redhat.com/v1alpha1
    kind: Backstage
    metadata:
      name: my-rhdh
    spec:
      application:
    # ...
        dynamicPluginsConfigMapName: dynamic-plugins-rhdh
    # ...
  8. 点击 Save
  9. 返回到 Topology 视图,并等待 Red Hat Developer Hub pod 启动。
  10. Open URL 图标开始使用带有新配置更改的 Red Hat Developer Hub 平台。

验证

  • 通过将 /api/dynamic-plugins-info/loaded-plugins 附加到 Red Hat Developer Hub root URL 并检查插件列表来确保已加载了动态插件配置:

    插件列表示例

    [
      {
        "name": "backstage-plugin-catalog-backend-module-github-dynamic",
        "version": "0.5.2",
        "platform": "node",
        "role": "backend-plugin-module"
      },
      {
        "name": "backstage-plugin-techdocs",
        "version": "1.10.0",
        "role": "frontend-plugin",
        "platform": "web"
      },
      {
        "name": "backstage-plugin-techdocs-backend-dynamic",
        "version": "1.9.5",
        "platform": "node",
        "role": "backend-plugin"
      },
    ]

在受限网络上运行的 OpenShift Container Platform 集群中,公共资源不可用。但是,部署 Red Hat Developer Hub Operator 并运行 Developer Hub 需要以下公共资源:

  • Operator 镜像(bundle、operator、catalog)
  • 操作对象镜像(RHDH, PostgreSQL)

要使这些资源可用,请将它们替换为 OpenShift Container Platform 集群可访问的镜像 registry 中的等效资源。

您可以使用一个帮助程序脚本来镜像所需的镜像,并提供必要的配置,以确保在安装 Red Hat Developer Hub Operator 和创建 Developer Hub 实例时将使用这些镜像。

注意

如果 OpenShift Container Platform 集群已准备好在受限网络中操作,此脚本需要已安装目标镜像 registry。但是,如果您准备集群进行断开连接的使用,您可以使用该脚本在集群中部署镜像 registry,并使用它来镜像(mirror)过程。

先决条件

注意

内部 OpenShift Container Platform 集群镜像 registry 不能用作目标镜像 registry。请参阅关于镜像 registry

  • 如果要创建自己的镜像 registry,请参阅为 Red Hat OpenShift 创建带有镜像 registry 的镜像 registry
  • 如果您还没有镜像 registry,您可以使用 helper 脚本为您创建一个,您需要以下额外先决条件:

    • 已安装 cURL 软件包。对于 Red Hat Enterprise Linux,可通过安装 curl 软件包来使用 curl 命令。要将 curl 用于其他平台,请查看 cURL 网站
    • htpasswd 命令可用。对于 Red Hat Enterprise Linux,可以通过安装 httpd-tools 软件包来使用 htpasswd 命令。

流程

  1. 下载并运行镜像脚本以安装自定义 Operator 目录并镜像相关的镜像: prepare-restricted-environment.sh (source)。

    curl -sSLO https://raw.githubusercontent.com/janus-idp/operator/1.1.x/.rhdh/scripts/prepare-restricted-environment.sh
    
    # if you do not already have a target mirror registry
    # and want the script to create one for you
    # use the following example:
    bash prepare-restricted-environment.sh \
       --prod_operator_index "registry.redhat.io/redhat/redhat-operator-index:v4.14" \
       --prod_operator_package_name "rhdh" \
       --prod_operator_bundle_name "rhdh-operator" \
       --prod_operator_version "v1.1.1"
    
    # if you already have a target mirror registry
    # use the following example:
    bash prepare-restricted-environment.sh \
       --prod_operator_index "registry.redhat.io/redhat/redhat-operator-index:v4.14" \
       --prod_operator_package_name "rhdh" \
       --prod_operator_bundle_name "rhdh-operator" \
       --prod_operator_version "v1.1.1" \
       --use_existing_mirror_registry "my_registry"
    注意

    完成该脚本可能需要几分钟时间,因为它会将多个镜像复制到镜像 registry。

您可以将 Red Hat Developer Hub 应用程序与 Amazon Web Services (AWS)集成,这有助于简化 AWS 生态系统中的工作流。将 Developer Hub 资源与 AWS 集成,可访问全面的工具、服务和解决方案。

与 AWS 集成需要使用以下方法之一在 Elastic Kubernetes Service (EKS)中部署 Developer Hub:

  • Helm chart
  • Red Hat Developer Hub Operator

当您使用 Helm Chart 在 Elastic Kubernetes Service (EKS)中部署 Developer Hub 时,它会在 AWS 生态系统中编排强大的开发环境。

先决条件

流程

  1. 进入终端,运行以下命令将包含 Developer Hub chart 的 Helm Chart 仓库添加到本地 Helm registry 中:

    helm repo add openshift-helm-charts https://charts.openshift.io/
  2. 使用以下命令创建 pull secret:

    kubectl create secret docker-registry rhdh-pull-secret \
        --docker-server=registry.redhat.io \
        --docker-username=<user_name> \ 
    1
    
        --docker-password=<password> \ 
    2
    
        --docker-email=<email> 
    3
    1
    在命令中输入您的用户名。
    2
    在命令中输入您的密码。
    3
    在命令中输入您的电子邮件地址。

    创建的 pull secret 用于从红帽生态系统中拉取 Developer Hub 镜像。

  3. 使用以下模板创建一个名为 values.yaml 的文件:

    global:
      # TODO: Set your application domain name.
      host: <your Developer Hub domain name>
    
    
    route:
      enabled: false
    
    
    upstream:
      service:
        # NodePort is required for the ALB to route to the Service
        type: NodePort
    
    
      ingress:
        enabled: true
        annotations:
          kubernetes.io/ingress.class: alb
    
    
          alb.ingress.kubernetes.io/scheme: internet-facing
    
    
          # TODO: Using an ALB HTTPS Listener requires a certificate for your own domain. Fill in the ARN of your certificate, e.g.:
          alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:xxx:xxxx:certificate/xxxxxx
    
    
          alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]'
    
    
          alb.ingress.kubernetes.io/ssl-redirect: '443'
    
    
          # TODO: Set your application domain name.
          external-dns.alpha.kubernetes.io/hostname: <your rhdh domain name>
    
    
      backstage:
        image:
          pullSecrets:
          - rhdh-pull-secret
        podSecurityContext:
          # you can assign any random value as fsGroup
          fsGroup: 2000
      postgresql:
        image:
          pullSecrets:
          - rhdh-pull-secret
        primary:
          podSecurityContext:
            enabled: true
            # you can assign any random value as fsGroup
            fsGroup: 3000
      volumePermissions:
        enabled: true
  4. 在终端中运行以下命令,使用最新版本的 Helm Chart 部署 Developer Hub,并使用上一步中创建的 values.yaml 文件:

    helm install rhdh \
      openshift-helm-charts/redhat-developer-hub \
      [--version 1.1.4] \
      --values /path/to/values.yaml
    注意

验证

等待 DNS 名称响应,表示您的 Developer Hub 实例已准备就绪。

您可以使用带有或不使用 Operator Lifecycle Manager (OLM)框架的 Red Hat Developer Hub Operator 在 EKS 上部署 Developer Hub。之后,您可以继续在 EKS 中安装 Developer Hub 实例。

先决条件

流程

  1. 在终端中运行以下命令,以创建安装 Operator 的 rhdh-operator 命名空间:

    kubectl create namespace rhdh-operator
  2. 使用以下命令创建 pull secret:

    kubectl -n rhdh-operator create secret docker-registry rhdh-pull-secret \
        --docker-server=registry.redhat.io \
        --docker-username=<user_name> \ 
    1
    
        --docker-password=<password> \ 
    2
    
        --docker-email=<email> 
    3
    1
    在命令中输入您的用户名。
    2
    在命令中输入您的密码。
    3
    在命令中输入您的电子邮件地址。

    创建的 pull secret 用于从红帽生态系统中拉取 Developer Hub 镜像。

  3. 创建一个 CatalogSource 资源,其中包含来自红帽生态系统的 Operator:

    cat <<EOF | kubectl -n rhdh-operator apply -f -
    apiVersion: operators.coreos.com/v1alpha1
    kind: CatalogSource
    metadata:
      name: redhat-catalog
    spec:
      sourceType: grpc
      image: registry.redhat.io/redhat/redhat-operator-index:v4.15
      secrets:
      - "rhdh-pull-secret"
      displayName: Red Hat Operators
    EOF
  4. 按如下方式创建 OperatorGroup 资源:

    cat <<EOF | kubectl apply -n rhdh-operator -f -
    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: rhdh-operator-group
    EOF
  5. 使用以下代码创建 Subscription 资源:

    cat <<EOF | kubectl apply -n rhdh-operator -f -
    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: rhdh
      namespace: rhdh-operator
    spec:
      channel: fast
      installPlanApproval: Automatic
      name: rhdh
      source: redhat-catalog
      sourceNamespace: rhdh-operator
      startingCSV: rhdh-operator.v1.1.2
    EOF
  6. 运行以下命令验证创建的 Operator 是否正在运行:

    kubectl -n rhdh-operator get pods -w

    如果 Operator pod 显示 ImagePullBackOff 状态,则您可能需要直接在 Operator 部署清单中拉取镜像。

    提示

    您可以在 deployment.spec.template.spec.imagePullSecrets 列表中包含所需的 secret 名称,并使用 kubectl get deployment -n rhdh-operator 命令验证部署名称:

    kubectl -n rhdh-operator patch deployment \
        rhdh.fast --patch '{"spec":{"template":{"spec":{"imagePullSecrets":[{"name":"rhdh-pull-secret"}]}}}}' \
        --type=merge
  7. 更新 Operator 的默认配置,以确保 Developer Hub 资源可以按照以下流程在 EKS 中正确启动:

    1. 使用以下命令,编辑 rhdh-operator 命名空间中的 backstage-default-config ConfigMap:

      kubectl -n rhdh-operator edit configmap backstage-default-config
    2. 找到 db-statefulset.yaml 字符串,并将 fsGroup 添加到其 spec.template.spec.securityContext 中,如下例所示:

        db-statefulset.yaml: |
          apiVersion: apps/v1
          kind: StatefulSet
      --- TRUNCATED ---
          spec:
          --- TRUNCATED ---
            restartPolicy: Always
            securityContext:
            # You can assign any random value as fsGroup
              fsGroup: 2000
            serviceAccount: default
            serviceAccountName: default
      --- TRUNCATED ---
    3. 找到 deployment.yaml 字符串,并将 fsGroup 添加到规格中,如下例所示:

        deployment.yaml: |
          apiVersion: apps/v1
          kind: Deployment
      --- TRUNCATED ---
          spec:
            securityContext:
              # You can assign any random value as fsGroup
              fsGroup: 3000
            automountServiceAccountToken: false
      --- TRUNCATED ---
    4. 找到 service.yaml 字符串,并将 类型改为 NodePort,如下所示:

        service.yaml: |
          apiVersion: v1
          kind: Service
          spec:
           # NodePort is required for the ALB to route to the Service
            type: NodePort
      --- TRUNCATED ---
    5. 保存并退出。

      等待几分钟,直到更改自动应用到 Operator pod。

先决条件

  • 已安装以下命令:

    • git
    • make
    • sed

流程

  1. 使用以下命令将 Operator 存储库克隆到本地机器中:

    git clone --depth=1 https://github.com/janus-idp/operator.git rhdh-operator && cd rhdh-operator
  2. 运行以下命令并生成部署清单:

    make deployment-manifest

    以上命令生成一个名为 rhdh-operator-<VERSION>.yaml 的文件,该文件会被手动更新。

  3. 运行以下命令在生成的部署清单中应用替换:

    sed -i "s/backstage-operator/rhdh-operator/g" rhdh-operator-*.yaml
    sed -i "s/backstage-system/rhdh-operator/g" rhdh-operator-*.yaml
    sed -i "s/backstage-controller-manager/rhdh-controller-manager/g" rhdh-operator-*.yaml
  4. 在编辑器中打开生成的部署清单文件并执行以下步骤:

    1. 找到 db-statefulset.yaml 字符串,并将 fsGroup 添加到其 spec.template.spec.securityContext 中,如下例所示:

         db-statefulset.yaml: |
          apiVersion: apps/v1
          kind: StatefulSet
      --- TRUNCATED ---
          spec:
          --- TRUNCATED ---
            restartPolicy: Always
            securityContext:
              # You can assign any random value as fsGroup
              fsGroup: 2000
            serviceAccount: default
            serviceAccountName: default
      --- TRUNCATED ---
    2. 找到 deployment.yaml 字符串,并将 fsGroup 添加到规格中,如下例所示:

        deployment.yaml: |
          apiVersion: apps/v1
          kind: Deployment
      --- TRUNCATED ---
          spec:
            securityContext:
              # You can assign any random value as fsGroup
              fsGroup: 3000
            automountServiceAccountToken: false
      --- TRUNCATED ---
    3. 找到 service.yaml 字符串,并将 类型改为 NodePort,如下所示:

        service.yaml: |
          apiVersion: v1
          kind: Service
          spec:
            # NodePort is required for the ALB to route to the Service
            type: NodePort
      --- TRUNCATED ---
    4. 将默认镜像替换为红帽生态系统中拉取的镜像:

      sed -i "s#gcr.io/kubebuilder/kube-rbac-proxy:.*#registry.redhat.io/openshift4/ose-kube-rbac-proxy:v4.15#g" rhdh-operator-*.yaml
      
      sed -i "s#quay.io/janus-idp/operator:.*#registry.redhat.io/rhdh/rhdh-rhel9-operator:1.1#g" rhdh-operator-*.yaml
      
      sed -i "s#quay.io/janus-idp/backstage-showcase:.*#registry.redhat.io/rhdh/rhdh-hub-rhel9:1.1#g" rhdh-operator-*.yaml
      
      sed -i "s#quay.io/fedora/postgresql-15:.*#registry.redhat.io/rhel9/postgresql-15:latest#g" rhdh-operator-*.yaml
  5. 将镜像 pull secret 添加到 Deployment 资源中的清单中,如下所示:

    --- TRUNCATED ---
    
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app.kubernetes.io/component: manager
        app.kubernetes.io/created-by: rhdh-operator
        app.kubernetes.io/instance: controller-manager
        app.kubernetes.io/managed-by: kustomize
        app.kubernetes.io/name: deployment
        app.kubernetes.io/part-of: rhdh-operator
        control-plane: controller-manager
      name: rhdh-controller-manager
      namespace: rhdh-operator
    spec:
      replicas: 1
      selector:
        matchLabels:
          control-plane: controller-manager
      template:
        metadata:
          annotations:
            kubectl.kubernetes.io/default-container: manager
          labels:
            control-plane: controller-manager
        spec:
          imagePullSecrets:
            - name: rhdh-pull-secret
    --- TRUNCATED ---
  6. 使用以下命令应用清单来部署 Operator:

    kubectl apply -f rhdh-operator-VERSION.yaml
  7. 运行以下命令验证 Operator 是否正在运行:

    kubectl -n rhdh-operator get pods -w

3.2.3. 在 EKS 中安装 Developer Hub 实例

安装并运行 Red Hat Developer Hub Operator 后,您可以在 EKS 中创建 Developer Hub 实例。

先决条件

流程

  1. 使用以下模板,创建一个名为 app-config-rhdh 的 ConfigMap,其中包含 Developer Hub 配置:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: app-config-rhdh
    data:
      "app-config-rhdh.yaml": |
        app:
          title: Red Hat Developer Hub
          baseUrl: https://<rhdh_dns_name>
        backend:
          auth:
            keys:
              - secret: "${BACKEND_SECRET}"
          baseUrl: https://<rhdh_dns_name>
          cors:
            origin: https://<rhdh_dns_name>
  2. 创建名为 secrets-rhdh 的 Secret,并添加名为 BACKEND_SECRET 的键,其值为 Base64 编码的字符串

    apiVersion: v1
    kind: Secret
    metadata:
      name: secrets-rhdh
    stringData:
      # TODO: See https://backstage.io/docs/auth/service-to-service-auth/#setup
      BACKEND_SECRET: "xxx"
    重要

    确保您为每个 Developer Hub 实例使用 BACKEND_SECRET 的唯一值。

    您可以使用以下命令生成密钥:

    node-p'require("crypto").randomBytes(24).toString("base64")'
  3. 要启用从红帽生态系统目录中拉取 PostgreSQL 镜像,请在部署 Developer Hub 实例的命名空间中将镜像 pull secret 添加到 default 服务帐户中:

    kubectl patch serviceaccount default \
        -p '{"imagePullSecrets": [{"name": "rhdh-pull-secret"}]}' \
        -n <your_namespace>
  4. 使用以下模板创建自定义资源文件:

    apiVersion: rhdh.redhat.com/v1alpha1
    kind: Backstage
    metadata:
     # TODO: this the name of your Developer Hub instance
      name: my-rhdh
    spec:
      application:
        imagePullSecrets:
        - "rhdh-pull-secret"
        route:
          enabled: false
        appConfig:
          configMaps:
            - name: "app-config-rhdh"
        extraEnvs:
          secrets:
            - name: "secrets-rhdh"
  5. 使用以下模板创建 Ingress 资源,确保根据需要自定义名称:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      # TODO: this the name of your Developer Hub Ingress
      name: my-rhdh
      annotations:
        alb.ingress.kubernetes.io/scheme: internet-facing
    
        alb.ingress.kubernetes.io/target-type: ip
    
        # TODO: Using an ALB HTTPS Listener requires a certificate for your own domain. Fill in the ARN of your certificate, e.g.:
        alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:us-xxx:xxxx:certificate/xxxxxx
    
         alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]'
    
        alb.ingress.kubernetes.io/ssl-redirect: '443'
    
        # TODO: Set your application domain name.
        external-dns.alpha.kubernetes.io/hostname: <rhdh_dns_name>
    
    spec:
      ingressClassName: alb
      rules:
        # TODO: Set your application domain name.
        - host: <rhdh_dns_name>
          http:
            paths:
            - path: /
              pathType: Prefix
              backend:
                service:
                  # TODO: my-rhdh is the name of your Backstage Custom Resource.
                  # Adjust if you changed it!
                  name: backstage-my-rhdh
                  port:
                    name: http-backend

    在前面的模板中,将 ' <rhdh_dns_name>' 替换为您的 Developer Hub 域名,并将 alb.ingress.kubernetes.io/certificate-arn 的值更新为您的证书 ARN。

验证

等待 DNS 名称响应,表示您的 Developer Hub 实例已准备就绪。

在 Red Hat Developer Hub 中,通过 Amazon Web Services (AWS)集成促进监控和日志记录。借助 Amazon CloudWatch 用于实时监控和 Amazon Prometheus 等功能,您可以确保 AWS 基础架构上托管的 Developer Hub 应用程序的可靠性、可扩展性和合规性。

通过此集成,您可以监督、诊断和优化红帽生态系统中的应用程序,从而改进的开发和操作过程。

3.3.1. 使用 Amazon Prometheus 监控

Red Hat Developer Hub 提供与正在运行的应用程序相关的 Prometheus 指标。有关为 EKS 集群启用或部署 Prometheus 的更多信息,请参阅 Amazon 文档中的 Prometheus 指标

要使用 Amazon Prometheus 监控 Developer Hub,您需要为 Prometheus 工作区创建一个 Amazon 受管服务,并配置 Developer Hub Prometheus 指标的 ingestion。如需更多信息,请参阅 Amazon 文档中的创建工作区Ingest Prometheus metrics 部分。

将 Prometheus 指标放入创建的工作区后,您可以将指标提取配置为根据特定 pod 注解从 pod 中提取数据。

3.3.1.1. 为监控配置注解

您可以在 Helm 部署和 Operator 支持的部署中配置注解来监控。

Helm 部署

要注解用于监控的 backstage pod,请更新您的 values.yaml 文件,如下所示:

upstream:
  backstage:
    # --- TRUNCATED ---
    podAnnotations:
      prometheus.io/scrape: 'true'
      prometheus.io/path: '/metrics'
      prometheus.io/port: '7007'
      prometheus.io/scheme: 'http'
Operator 支持的部署

流程

  1. 作为 Operator 的管理员,编辑默认配置以添加 Prometheus 注解,如下所示:

    # Update OPERATOR_NS accordingly
    OPERATOR_NS=rhdh-operator
    kubectl edit configmap backstage-default-config -n "${OPERATOR_NS}"
  2. 在 ConfigMap 中找到 deployment.yaml 键,并将注解添加到 spec.template.metadata.annotations 字段中,如下所示:

    deployment.yaml: |-
      apiVersion: apps/v1
      kind: Deployment
      # --- truncated ---
      spec:
        template:
          # --- truncated ---
          metadata:
            labels:
             rhdh.redhat.com/app:  # placeholder for 'backstage-<cr-name>'
            # --- truncated ---
            annotations:
              prometheus.io/scrape: 'true'
              prometheus.io/path: '/metrics'
              prometheus.io/port: '7007'
              prometheus.io/scheme: 'http'
      # --- truncated ---
  3. 保存您的更改。

验证

验证提取是否正常工作:

  1. 使用 kubectl 将 Prometheus 控制台转发到本地机器,如下所示:

    kubectl --namespace=prometheus port-forward deploy/prometheus-server 9090
  2. 打开 Web 浏览器,再进入到 http://localhost:9090 以访问 Prometheus 控制台。
  3. 监控相关指标,如 process_cpu_user_seconds_total

3.3.2. 使用 Amazon CloudWatch 日志进行日志记录

Red Hat Developer Hub 中的日志记录依赖于 winston 库。默认情况下,debug 级别的日志不会被记录。要激活调试日志,您必须在 Red Hat Developer Hub 实例中将环境变量 LOG_LEVEL 设置为 debug。

3.3.2.1. 配置应用程序日志级别

您可以在 Helm 部署和 Operator 支持的部署中配置应用程序日志级别。

Helm 部署

要更新日志记录级别,请将环境变量 LOG_LEVEL 添加到 Helm Chart 的 values.yaml 文件中:

upstream:
  backstage:
    # --- Truncated ---
    extraEnvVars:
      - name: LOG_LEVEL
        value: debug
Operator 支持的部署

您可以通过在自定义资源中包含环境变量 LOG_LEVEL 来修改日志记录级别,如下所示:

spec:
  # Other fields omitted
  application:
    extraEnvs:
      envs:
        - name: LOG_LEVEL
          value: debug
3.3.2.2. 从 Amazon CloudWatch 检索日志

CloudWatch Container Insights 用于捕获 Amazon EKS 的日志和指标。如需更多信息,请参阅 Amazon EKS 文档的日志记录。

要捕获日志和指标,请 在集群中安装 Amazon CloudWatch Observability EKS 附加组件。在 Container Insights 设置后,您可以使用 Logs Insights 或 Live Tail 视图访问容器日志。

CloudWatch 使用以下方法命名日志组,其中整合了所有容器日志:

/aws/containerinsights/<ClusterName>/application

以下是从 Developer Hub 实例检索日志的示例查询:

fields @timestamp, @message, kubernetes.container_name
| filter kubernetes.container_name in ["install-dynamic-plugins", "backstage-backend"]

在本节中,Amazon Cognito 是一个 AWS 服务,用于在 Developer Hub 中添加身份验证层。您可以使用用户池或通过第三方身份提供程序直接登录到 Developer Hub。

虽然 Amazon Cognito 不是 Developer Hub 的核心身份验证提供程序的一部分,但可以使用通用 OpenID Connect (OIDC)供应商集成。

您可以在 Helm Chart 和 Operator 支持的部署中配置 Developer Hub。

先决条件

  • 您有一个 User Pool,或者您已创建一个新池。有关用户池的更多信息,请参阅 Amazon Cognito 用户池 文档。

    注意

    确保您已记下用户池所在的 AWS 区域,以及用户池 ID。

  • 您已在用户池中创建了 App Client 来集成托管 UI。如需更多信息,请参阅使用 Amazon Cognito 控制台设置托管 UI

    当使用 Amazon Cognito 控制台设置托管 UI 时,请确保进行以下调整:

    1. Allowed callback URL (s) 部分中,包含 URL https://<rhdh_url>/api/auth/oidc/handler/frame。确保将 &lt ;rhdh_url > 替换为您的 Developer Hub 应用程序的 URL,如 my.rhdh.example.com
    2. 同样,在 Allowed sign-out URL (s) 部分中,添加 https://<rhdh_url>。将 <rhdh_url > 替换为您的 Developer Hub 应用程序的 URL,如 my.rhdh.example.com
    3. OAuth 2.0 授权类型 下,选择 Authorization code grant 以返回授权代码。
    4. OpenID Connect 范围 下,确保至少选择以下范围:

      • OpenID
      • profile
      • 电子邮件
    Helm 部署

    流程

    1. 编辑或创建自定义 app-config-rhdh ConfigMap,如下所示:

      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: app-config-rhdh
      data:
        "app-config-rhdh.yaml": |
          # --- Truncated ---
          app:
            title: Red Hat Developer Hub
      
          signInPage: oidc
          auth:
            environment: production
            session:
              secret: ${AUTH_SESSION_SECRET}
            providers:
              oidc:
                production:
                  clientId: ${AWS_COGNITO_APP_CLIENT_ID}
                  clientSecret: ${AWS_COGNITO_APP_CLIENT_SECRET}
                  metadataUrl: ${AWS_COGNITO_APP_METADATA_URL}
                  callbackUrl: ${AWS_COGNITO_APP_CALLBACK_URL}
                  scope: 'openid profile email'
                  prompt: auto
    2. 使用以下模板编辑或创建自定义 secret-rhdh Secret:

      apiVersion: v1
      kind: Secret
      metadata:
        name: secrets-rhdh
      stringData:
        AUTH_SESSION_SECRET: "my super auth session secret - change me!!!"
        AWS_COGNITO_APP_CLIENT_ID: "my-aws-cognito-app-client-id"
        AWS_COGNITO_APP_CLIENT_SECRET: "my-aws-cognito-app-client-secret"
        AWS_COGNITO_APP_METADATA_URL: "https://cognito-idp.[region].amazonaws.com/[userPoolId]/.well-known/openid-configuration"
        AWS_COGNITO_APP_CALLBACK_URL: "https://[rhdh_dns]/api/auth/oidc/handler/frame"
    3. values.yaml 文件中添加 ConfigMap 和 Secret 资源的引用:

      upstream:
        backstage:
          image:
            pullSecrets:
            - rhdh-pull-secret
          podSecurityContext:
            fsGroup: 2000
          extraAppConfig:
            - filename: app-config-rhdh.yaml
              configMapRef: app-config-rhdh
          extraEnvVarsSecrets:
            - secrets-rhdh
    4. 升级 Helm 部署:

      helm upgrade rhdh \
        openshift-helm-charts/redhat-developer-hub \
        [--version 1.1.4] \
        --values /path/to/values.yaml
    Operator 支持的部署
    1. 将以下代码添加到 app-config-rhdh ConfigMap 中:

      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: app-config-rhdh
      data:
        "app-config-rhdh.yaml": |
          # --- Truncated ---
      
          signInPage: oidc
          auth:
            # Production to disable guest user login
            environment: production
            # Providing an auth.session.secret is needed because the oidc provider requires session support.
            session:
              secret: ${AUTH_SESSION_SECRET}
            providers:
              oidc:
                production:
                  # See https://github.com/backstage/backstage/blob/master/plugins/auth-backend-module-oidc-provider/config.d.ts
                  clientId: ${AWS_COGNITO_APP_CLIENT_ID}
                  clientSecret: ${AWS_COGNITO_APP_CLIENT_SECRET}
                  metadataUrl: ${AWS_COGNITO_APP_METADATA_URL}
                  callbackUrl: ${AWS_COGNITO_APP_CALLBACK_URL}
                  # Minimal set of scopes needed. Feel free to add more if needed.
                  scope: 'openid profile email'
      
                  # Note that by default, this provider will use the 'none' prompt which assumes that your are already logged on in the IDP.
                  # You should set prompt to:
                  # - auto: will let the IDP decide if you need to log on or if you can skip login when you have an active SSO session
                  # - login: will force the IDP to always present a login form to the user
                  prompt: auto
    2. 将以下代码添加到 secret-rhdh Secret 中:

      apiVersion: v1
      kind: Secret
      metadata:
        name: secrets-rhdh
      stringData:
        # --- Truncated ---
      
        # TODO: Change auth session secret.
        AUTH_SESSION_SECRET: "my super auth session secret - change me!!!"
      
        # TODO: user pool app client ID
        AWS_COGNITO_APP_CLIENT_ID: "my-aws-cognito-app-client-id"
      
        # TODO: user pool app client Secret
        AWS_COGNITO_APP_CLIENT_SECRET: "my-aws-cognito-app-client-secret"
      
        # TODO: Replace region and user pool ID
        AWS_COGNITO_APP_METADATA_URL: "https://cognito-idp.[region].amazonaws.com/[userPoolId]/.well-known/openid-configuration"
      
        # TODO: Replace <rhdh_dns>
        AWS_COGNITO_APP_CALLBACK_URL: "https://[rhdh_dns]/api/auth/oidc/handler/frame"
    3. 确保您的自定义资源包含对 app-config-rhdh ConfigMap 和 secrets-rhdh Secret 的引用:

      apiVersion: rhdh.redhat.com/v1alpha1
      kind: Backstage
      metadata:
       # TODO: this the name of your Developer Hub instance
        name: my-rhdh
      spec:
        application:
          imagePullSecrets:
          - "rhdh-pull-secret"
          route:
            enabled: false
          appConfig:
            configMaps:
              - name: "app-config-rhdh"
          extraEnvs:
            secrets:
              - name: "secrets-rhdh"
    4. 可选:如果您有一个由自定义资源支持的现有 Developer Hub 实例,且没有编辑它,您可以手动删除 Developer Hub 部署以使用 Operator 重新创建它。运行以下命令以删除 Developer Hub 部署:

      kubectl delete deployment -l app.kubernetes.io/instance=<CR_NAME>

验证

  1. 进入 Developer Hub web URL 并使用 OIDC 身份验证签名,这会提示您通过配置的 AWS Cognito 用户池进行身份验证。
  2. 登录后,访问 Settings 并验证用户详情。

您可以将 Developer Hub 与 Microsoft Azure Kubernetes Service (AKS)集成,在开发中提供显著改进,为构建、部署和管理应用程序提供了一个简化的环境。

这个集成需要使用以下方法之一在 AKS 上部署 Developer Hub:

  • Helm chart
  • Red Hat Developer Hub Operator

您可以在 Azure Kubernetes Services (AKS)上部署 Developer Hub 应用程序,以访问用于构建、测试和部署应用程序的综合解决方案。

先决条件

  • 您有一个带有有效订阅的 Azure 帐户。
  • 您已在机器上安装 Azure CLI,并配置了 Resource Group 和 Cluster。如需更多信息,请参阅 如何安装 Azure CLI

    您可以执行以下步骤来配置资源组和集群:

    • 要访问 Azure,请确保您登录到我们的指定租户,请使用以下命令:

      az login [--tenant=<optional-directory-name>]
    • 要创建资源组,请运行以下命令:

      az group create --name <your_ResourceGroup> --location <location>
      提示

      您可以使用 az 帐户列表 -o table 来检索可用的区域。

    • 创建 AKS 集群:

      az aks create \
      --resource-group <your_ResourceGroup> \
      --name <your_ClusterName> \
      --enable-managed-identity \
      --generate-ssh-keys

      如需了解更多选项,请参阅 --help

    • 连接到集群:

      az aks get-credentials --resource-group <your_ResourceGroup> --name <your_ClusterName>

      上一命令配置 Kubernetes 客户端,并将 kubeconfig 中的当前上下文设置为指向您的 AKS 集群。

  • 已安装 kubectl。如需更多信息,请参阅 安装或更新 kubectl
  • 已安装 Helm 3 或最新的。

    特定于 AKS 的基本 Developer Hub 部署的比较
    • 权限问题 : Developer Hub 容器可能会遇到与 权限 相关的错误,如在尝试特定操作时 Permission denied。通过在 PodSpec.securityContext 中调整 fsGroup 来解决此错误。
    • Ingress 配置 :在 AKS 中,配置入口对于访问已安装的 Developer Hub 实例至关重要。访问 Developer Hub 实例需要使用以下命令启用基于 NGINX 的 Ingress Controller 路由附加组件:

      az aks approuting enable --resource-group <your_ResourceGroup> --name <your_ClusterName>
      提示

      您可能需要安装 Azure CLI 扩展 aks-preview。如果没有自动安装扩展,您可能需要使用以下命令手动安装它:

      az extension add --upgrade -n aks-preview --allow-preview true
    注意

    安装 Ingress Controller 后,带有 Ingress Controller 的 'app-routing-system' 命名空间将部署到集群中。记录来自已安装的 Ingress Controller 的 Developer Hub 应用程序地址(例如,108.141.70.228)),以便以后访问 Developer Hub 应用程序,稍后引用为 < app_address& gt;。

    kubectl get svc nginx --namespace app-routing-system -o jsonpath='{.status.loadBalancer.ingress[0].ip}'
    • 命名空间 管理 :您可以使用以下命令为 AKS 中的 Developer Hub 部署创建一个专用命名空间:

      kubectl create namespace <your_namespace>

您可以使用 Helm 在 AKS 上部署 Developer Hub。

流程

  1. 打开终端并运行以下命令来添加 Helm Chart 仓库:

    helm repo add openshift-helm-charts https://charts.openshift.io/
  2. 要创建 ImagePull Secret,请运行以下命令:

    kubectl -n <your_namespace> create secret docker-registry rhdh-pull-secret \
        --docker-server=registry.redhat.io \
        --docker-username=<redhat_user_name> \
        --docker-password=<redhat_password> \
        --docker-email=<email>
  3. 使用以下模板创建一个名为 values.yaml 的文件:

    global:
      host: <app_address>
    route:
      enabled: false
    upstream:
      ingress:
        enabled: true
        className: webapprouting.kubernetes.azure.com
        host:
      backstage:
        image:
          pullSecrets:
            - rhdh-pull-secret
        podSecurityContext:
          fsGroup: 3000
      postgresql:
        image:
          pullSecrets:
            - rhdh-pull-secret
        primary:
          podSecurityContext:
            enabled: true
            fsGroup: 3000
      volumePermissions:
        enabled: true
  4. 要安装 Helm Chart,请运行以下命令:

    helm -n <your_namespace> install -f values.yaml <your_deploy_name> openshift-helm-charts/redhat-developer-hub --version 1.1.1
  5. 验证部署状态:

    kubectl get deploy <your_deploy_name>-developer-hub -n <your_namespace>
  6. 使用 URL 访问部署的 Developer Hub: https://<app_address&gt;,其中 <app_address> 是之前获取的 Ingress 地址(例如 https://108.141.70.228)。
  7. 要升级或删除部署,请运行以下命令:

    upgrade 命令

    helm -n <your_namespace> upgrade -f values.yaml <your_deploy_name> openshift-helm-charts/redhat-developer-hub --version 1.1.1

    delete 命令

    helm -n <your_namespace> delete <your_deploy_name>

您可以使用 Red Hat Developer Hub Operator 在 AKS 上部署 Developer Hub。

流程

  1. 获取名为 rhdh-operator-<VERSION>.yaml 的 Red Hat Developer Hub Operator 清单文件,并通过添加以下片段来修改 db-statefulset.yamldeployment.yaml 的默认配置:

    securityContext:
      fsGroup: 300

    以下是清单中的指定位置:

    db-statefulset.yaml: | spec.template.spec
    deployment.yaml: | spec.template.spec
  2. 将修改后的 Operator 清单应用到 Kubernetes 集群:

    kubectl apply -f rhdh-operator-<VERSION>.yaml
    注意

    以上命令的执行是集群范围的,需要适当的集群权限。

  3. 使用您的红帽凭证创建名为 rhdh-pull-secretImagePull Secret,以访问受保护的 registry.redhat.io 中的镜像,如下例所示:

    kubectl -n <your_namespace> create secret docker-registry rhdh-pull-secret \
        --docker-server=registry.redhat.io \
        --docker-username=<redhat_user_name> \
        --docker-password=<redhat_password> \
        --docker-email=<email>
  4. 创建名为 rhdh-ingress.yaml 的 Ingress 清单文件,指定您的 Developer Hub 服务名称,如下所示:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: rhdh-ingress
      namespace: <your_namespace>
    spec:
      ingressClassName: webapprouting.kubernetes.azure.com
      rules:
        - http:
            paths:
              - path: /
                pathType: Prefix
                backend:
                  service:
                    name: backstage-<your-CR-name>
                    port:
                      name: http-backend
  5. 要部署创建的 Ingress,请运行以下命令:

    kubectl -n <your_namespace> apply -f rhdh-ingress.yaml
  6. 使用以下示例,创建一个名为 app-config-rhdh 的 ConfigMap,其中包含 Developer Hub 配置:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: app-config-rhdh
    data:
      "app-config-rhdh.yaml": |
        app:
          title: Red Hat Developer Hub
          baseUrl: https://<app_address>
        backend:
          auth:
            keys:
              - secret: "${BACKEND_SECRET}"
          baseUrl: https://<app_address>
          cors:
            origin: https://<app_address>
  7. 创建名为 secrets-rhdh 的 Secret,并添加一个名为 BACKEND_SECRET 的键,并带有 Base64 编码的字符串 值,如下例所示:

    apiVersion: v1
    kind: Secret
    metadata:
      name: secrets-rhdh
    stringData:
      BACKEND_SECRET: "xxx"
  8. 创建名为 rhdh.yaml 的自定义资源(CR)清单文件,并包含之前创建的 rhdh-pull-secret,如下所示:

    apiVersion: rhdh.redhat.com/v1alpha1
    kind: Backstage
    metadata:
      name: <your-rhdh-cr>
    spec:
      application:
        imagePullSecrets:
          - rhdh-pull-secret
        appConfig:
          configMaps:
            - name: "app-config-rhdh"
        extraEnvs:
          secrets:
            - name: "secrets-rhdh"
  9. 将 CR 清单应用到您的命名空间:

    kubectl -n <your_namespace> apply -f rhdh.yaml
  10. 使用 URL 访问部署的 Developer Hub: https://<app_address&gt;,其中 <app_address> 是之前获取的 Ingress 地址(例如 https://108.141.70.228)。
  11. 可选: 要删除 CR,请运行以下命令:

    kubectl -n <your_namespace> delete -f rhdh.yaml

监控和日志记录是在 Red Hat Developer Hub 中管理和维护 Azure Kubernetes 服务(AKS)不可或缺的方面。借助管理 Prometheus Monitoring 和 Azure Monitor 集成等功能,管理员可以高效地监控资源利用率、诊断问题并确保容器化工作负载可靠性。

要启用 Managed Prometheus Monitoring,请使用 az aks createaz aks update 命令中的 -enable-azure-monitor-metrics 选项,具体取决于您是否创建新集群还是更新现有集群,例如:

az aks create/update --resource-group <your-ResourceGroup> --name <your-Cluster> --enable-azure-monitor-metrics

上一命令会安装指标附加组件,它会收集 Prometheus 指标。使用上一命令,您可以通过原生 Azure Monitor 指标和 Prometheus 指标启用对 Azure 资源的监控。您还可以在 Monitoring → Insights 下查看门户的结果。如需更多信息,请参阅使用 Azure Monitor 监控 Azure 资源

另外,Managed Prometheus 服务和 Azure Monitor 的指标可以通过 Azure Managed Grafana 服务访问。如需更多信息,请参阅链接 Grafana 工作区 部分。

默认情况下,Prometheus 使用最小 ingesting 配置集,该配置集优化了 ingestion 卷,并为提取频率、目标和指标设置默认配置。可以通过自定义配置自定义默认设置。Azure 提供了各种方法,包括使用不同的 ConfigMap 来提供提取配置和其他指标附加组件设置。有关默认配置的更多信息,请参阅 Azure Monitor 中的默认 Prometheus 指标配置,并在 Azure Monitor managed service 中的 Customize extract of Prometheus metrics 部分

4.2.1. 使用 Azure Kubernetes Services (AKS)查看日志

您可以访问 Kubernetes 对象生成的实时数据日志,并在 AKS 中的 Container Insights 中收集日志数据。

先决条件

流程

查看 Developer Hub 实例的实时日志
  1. 进入 Azure Portal。
  2. 搜索资源组 < your-ResourceGroup> 并找到您的 AKS 集群 < your-Cluster>
  3. 从菜单中选择 Kubernetes resources → Workloads
  4. 选择 & lt;your-rhdh-cr>-developer-hub (如果为 Helm Chart 安装),或 <your-rhdh-cr>-backstage (如果是 Operator 支持的安装)部署。
  5. 单击左侧菜单中的 Live Logs
  6. 选择 pod。

    注意

    必须只有一个 pod。

实时日志数据会被收集并显示。

查看容器引擎中的实时日志数据
  1. 进入 Azure Portal。
  2. 搜索资源组 < your-ResourceGroup> 并找到您的 AKS 集群 < your-Cluster>
  3. 从菜单中选择 MonitoringInsights
  4. 转至" 容器" 选项卡。
  5. 找到 backend-backstage 容器,并点击它来查看 Container Engine 生成的实时日志数据。

Developer Hub 中的 core-plugin-api 软件包与 Microsoft Azure 身份验证供应商集成,使用 Azure OAuth 进行身份验证。

先决条件

在使用 Helm Chart 安装时,您可以在 Red Hat Developer Hub 中使用 Microsoft Azure 作为身份验证供应商。如需更多信息,请参阅 第 4.1.1 节 “使用 Helm chart 在 Azure Kubernetes Service (AKS)上部署 Red Hat Developer Hub”

流程

  1. 注册应用程序后,请注意以下几点:

    • clientId: Application (client) ID,它位于 App Registration → Overview 下。
    • clientSecret: Secret,在 *App Registration → Certificates & secrets 下找到(如果需要,创建新的)。
    • tenantId: Directory (tenant) ID,它位于 App Registration → Overview 下。
  2. 确保 Developer Hub ConfigMap 中包含以下片段:

    auth:
      environment: production
      providers:
        microsoft:
          production:
            clientId: ${AZURE_CLIENT_ID}
            clientSecret: ${AZURE_CLIENT_SECRET}
            tenantId: ${AZURE_TENANT_ID}
            domainHint: ${AZURE_TENANT_ID}
            additionalScopes:
              - Mail.Send

    您可以创建新文件或将其添加到现有文件中。

  3. 将 ConfigMap 应用到 Kubernetes 集群:

    kubectl -n <your_namespace> apply -f <app-config>.yaml
  4. 创建或重复使用包含 Azure 凭证的现有 Secret,并添加以下片段:

    stringData:
      AZURE_CLIENT_ID: <value-of-clientId>
      AZURE_CLIENT_SECRET: <value-of-clientSecret>
      AZURE_TENANT_ID: <value-of-tenantId>
  5. 将 secret 应用到 Kubernetes 集群:

    kubectl -n <your_namespace> apply -f <azure-secrets>.yaml
  6. 确保您的 values.yaml 文件引用之前创建的 ConfigMap 和 Secret:

    upstream:
      backstage:
      ...
        extraAppConfig:
          - filename: ...
            configMapRef: <app-config-containing-azure>
        extraEnvVarsSecrets:
          - <secret-containing-azure>
  7. 可选: 如果已安装 Helm Chart,请升级它:

    helm -n <your_namespace> upgrade -f <your-values.yaml> <your_deploy_name> redhat-developer/backstage --version 1.1.4
  8. 可选: 如果没有更改 rhdh.yaml 文件,例如,您只更新从它引用的 ConfigMap 和 Secret,请通过删除对应的 pod 来刷新 Developer Hub 部署:

    kubectl -n <your_namespace> delete pods -l backstage.io/app=backstage-<your-rhdh-cr>

在使用 Operator 安装时,您可以在 Red Hat Developer Hub 中使用 Microsoft Azure 作为身份验证供应商。如需更多信息,请参阅 第 2.2 节 “使用 Operator 在 OpenShift Container Platform 上部署 Red Hat Developer Hub”

流程

  1. 注册应用程序后,请注意以下几点:

    • clientId: Application (client) ID,它位于 App Registration → Overview 下。
    • clientSecret: Secret,在 *App Registration → Certificates & secrets 下找到(如果需要,创建新的)。
    • tenantId: Directory (tenant) ID,它位于 App Registration → Overview 下。
  2. 确保 Developer Hub ConfigMap 中包含以下片段:

    auth:
      environment: production
      providers:
        microsoft:
          production:
            clientId: ${AZURE_CLIENT_ID}
            clientSecret: ${AZURE_CLIENT_SECRET}
            tenantId: ${AZURE_TENANT_ID}
            domainHint: ${AZURE_TENANT_ID}
            additionalScopes:
              - Mail.Send

    您可以创建新文件或将其添加到现有文件中。

  3. 将 ConfigMap 应用到 Kubernetes 集群:

    kubectl -n <your_namespace> apply -f <app-config>.yaml
  4. 创建或重复使用包含 Azure 凭证的现有 Secret,并添加以下片段:

    stringData:
      AZURE_CLIENT_ID: <value-of-clientId>
      AZURE_CLIENT_SECRET: <value-of-clientSecret>
      AZURE_TENANT_ID: <value-of-tenantId>
  5. 将 secret 应用到 Kubernetes 集群:

    kubectl -n <your_namespace> apply -f <azure-secrets>.yaml
  6. 确保自定义资源清单包含对之前创建的 ConfigMap 和 Secret 的引用:

    apiVersion: rhdh.redhat.com/v1alpha1
    kind: Backstage
    metadata:
      name: <your-rhdh-cr>
    spec:
      application:
        imagePullSecrets:
        - rhdh-pull-secret
        route:
          enabled: false
        appConfig:
          configMaps:
            - name: <app-config-containing-azure>
        extraEnvs:
          secrets:
            - name: <secret-containing-azure>
  7. 应用自定义资源清单:

    kubectl -n <your_namespace> apply -f rhdh.yaml
  8. 可选: 如果没有更改 rhdh.yaml 文件,例如,您只更新从它引用的 ConfigMap 和 Secret,请通过删除对应的 pod 来刷新 Developer Hub 部署:

    kubectl -n <your_namespace> delete pods -l backstage.io/app=backstage-<your-rhdh-cr>

基于角色的访问控制是一种安全范例,限制对授权用户访问。此功能包括定义具有特定权限的角色,然后将这些角色分配给用户。

Red Hat Developer Hub 使用 RBAC 来提高平台中的权限系统。Developer Hub 中的 RBAC 功能引入了一个管理员角色,并通过促进高效的访问控制来利用组织结构,包括团队、组和用户。

5.1. 权限策略配置

在 Red Hat Developer Hub 中配置权限策略有两种方法,包括:

  • 配置权限策略管理员
  • 配置外部文件中定义的权限策略

5.1.1. 配置权限策略管理员

Developer Hub 中用户和组的权限策略由权限策略管理员管理。只有权限策略管理员可以访问基于角色的访问控制 REST API。

配置策略管理员的目的是启用特定、受限制的经过身份验证的用户来访问 RBAC REST API。权限策略在 policy.csv 文件中定义,该文件在 app-config-rhdh ConfigMap 中引用。OpenShift 平台管理员或集群管理员可以执行此任务,可访问部署 Red Hat Developer Hub 的命名空间。

您可以在 app-config.yaml 文件中设置权限策略管理员的凭证,如下所示:

permission:
  enabled: true
  rbac:
    admin:
      users:
        - name: user:default/joeuser

5.1.2. 配置外部文件中定义的权限策略

在开始 Red Hat Developer Hub 前,您可以遵循这种方法来配置权限策略。如果外部文件中定义了权限策略,您可以在 Developer Hub 中导入同一文件。权限策略需要以 Casbin 规则格式定义。有关 Casbin 规则格式的详情,请参考 Casbin 规则 的基本信息。

以下是权限策略配置示例:

p, role:default/guests, catalog-entity, read, deny

p, role:default/guests, catalog.entity.create, create, deny

g, user:default/<USER_TO_ROLE>, role:default/guests

如果定义的权限不包含与其关联的操作,请添加 use 作为策略。请参见以下示例:

p, role:default/guests, kubernetes.proxy, use, deny

您可以在 app-config.yaml 文件中定义 policy.csv 文件路径:

permission:
  enabled: true
  rbac:
    policies-csv-file: /some/path/rbac-policy.csv

当使用 Helm Chart 部署 Red Hat Developer Hub 时,您必须通过将 policy.csv 文件挂载到 Developer Hub Helm Chart 来定义 policy.csv 文件。

您可以通过创建一个 configMap 并挂载它,将 policy.csv 文件添加到 Developer Hub Helm Chart 中。

先决条件

流程

  1. 在 OpenShift Container Platform 中,创建一个 ConfigMap 来保存策略,如下例所示:

    ConfigMap 示例

    kind: ConfigMap
    apiVersion: v1
    metadata:
      name: rbac-policy
      namespace: rhdh
    data:
      rbac-policy.csv: |
        p, role:default/guests, catalog-entity, read, allow
        p, role:default/guests, catalog.entity.create, create, allow
    
        g, user:default/<YOUR_USER>, role:default/guests

  2. 在 Developer Hub Helm Chart 中,进入 Root Schema → Backstage chart schema → Backstage parameters → Backstage container additional volume mount
  3. 选择 Add Backstage 容器附加卷挂载 并添加以下值:

    • mountPath:opt/app-root/src/rbac
    • 名称rbac-policy
  4. 将 RBAC 策略添加到 Developer Hub Helm Chart 中的 Backstage 容器额外卷中

    • 名称rbac-policy
    • configMap

      • DefaultMode:420
      • 名称rbac-policy
  5. 更新 app-config.yaml 文件中的策略路径,如下所示:

    app-config.yaml 文件示例

    permission:
      enabled: true
      rbac:
        policies-csv-file: ./rbac/rbac-policy.csv

5.1.3. Red Hat Developer Hub 中的权限策略

Red Hat Developer Hub 中的权限策略是一组规则,用于控制对资源或功能的访问。这些策略声明根据其角色授予用户的授权级别。实施权限策略,以维护给定环境中的安全性和保密性。

Developer Hub 支持以下权限策略:

目录权限
Expand
Name资源类型policy描述

catalog.entity.read

catalog-entity

读取

允许用户或角色从目录中读取

catalog.entity.create

 

create

允许用户或团队创建目录实体,包括在目录中注册现有组件

catalog.entity.refresh

catalog-entity

update

允许用户或组从目录中刷新一个或多个实体

catalog.entity.delete

catalog-entity

delete

允许用户或组从目录中删除一个或多个实体

catalog.location.read

 

读取

允许用户或组从目录中读取一个或多个位置

catalog.location.create

 

create

允许用户或组在目录中创建位置

catalog.location.delete

 

delete

允许用户或组从目录中删除位置

Scaffolder 权限
Expand
Name资源类型policy描述

scaffolder.action.execute

scaffolder-action

 

允许从模板执行操作

scaffolder.template.parameter.read

scaffolder-template

读取

允许用户或组从模板读取一个或多个参数

scaffolder.template.step.read

scaffolder-template

读取

允许用户或角色从模板读取一个或多个步骤

RBAC 权限
Expand
Name资源类型policy描述

policy.entity.read

policy-entity

读取

允许用户或角色读取权限策略和角色

policy.entity.create

policy-entity

create

允许用户或组创建一个或多个权限策略和角色

policy.entity.update

policy-entity

update

允许用户或组更新一个或多个权限策略和角色

policy.entity.delete

policy-entity

delete

允许用户或组删除一个或多个权限策略和角色

Kubernetes 权限
Expand
Name资源类型policy描述

kubernetes.proxy

  

允许用户或组访问代理端点

管理员可以使用 Developer Hub Web 界面(Web UI)将特定的角色和权限分配给单独的用户或组。分配角色可确保在 Developer Hub 中规范对资源和功能的访问。

使用 Developer Hub 中的管理员角色,您可以为用户和组分配权限,允许用户或组使用 Developer Hub Web UI 查看、创建、修改和删除角色。

要访问 Web UI 中的 RBAC 功能,您必须安装并配置 @janus-idp/backstage-plugin-rbac 插件作为动态插件。有关安装动态插件的更多信息,请参阅 第 6 章 动态插件安装

安装 @janus-idp/backstage-plugin-rbac 插件后,Administration 选项会出现在侧边栏的底部。当您可以点 Administration 时,默认为 RBAC 选项卡,显示 Developer Hub 中创建的所有现有角色。在 RBAC 选项卡中,您还可以查看与角色关联的权限策略总数。您还可以使用 Actions 列编辑或删除角色。

5.2.1. 在 Red Hat Developer Hub Web UI 中创建角色

您可以使用 Web UI 在 Red Hat Developer Hub 中创建角色。

先决条件

流程

  1. 前往 Developer Hub 中边栏底部的 管理

    此时会出现 RBAC 选项卡,在 Developer Hub 中显示所有创建的角色。

  2. (可选)点击任何角色来查看 OVERVIEW 页面中的角色信息。
  3. 单击 CREATE 以创建角色。
  4. 在给定字段中输入角色的名称和描述,然后单击 NEXT
  5. 使用搜索字段添加用户和组,然后单击 NEXT
  6. Add permission policies 部分的下拉菜单中选择 PluginPermission
  7. 选择或清除要在 Add permission policies 部分中设置的 Policy,然后单击 NEXT
  8. 查看 Review and create 部分中的添加的信息。
  9. CREATE

验证

创建的角色会出现在 RBAC 选项卡中可用的列表中。

5.2.2. 在 Red Hat Developer Hub Web UI 中编辑角色

您可以使用 Web UI 编辑 Red Hat Developer Hub 中的角色。

注意

policy.csv 或 ConfigMap 文件生成的策略无法使用 Developer Hub Web UI 编辑或删除。

先决条件

  • 在 Developer Hub 中具有管理员角色。
  • 您已在 Developer Hub 中安装了 @janus-idp/backstage-plugin-rbac 插件。如需更多信息,请参阅 第 6 章 动态插件安装
  • 您已配置了所需的权限策略。如需更多信息,请参阅 第 5.1 节 “权限策略配置”
  • 您要编辑的角色在 Developer Hub 中创建。

流程

  1. 前往 Developer Hub 中边栏底部的 管理

    此时会出现 RBAC 选项卡,在 Developer Hub 中显示所有创建的角色。

  2. (可选)点击任何角色来查看 OVERVIEW 页面中的角色信息。
  3. 选择您要编辑的角色的编辑图标。
  4. 编辑角色的详细信息,如名称、描述、用户和组以及权限策略,然后单击 NEXT
  5. 检查角色编辑的详细信息,然后单击 SAVE

编辑角色后,您可以查看角色的 OVERVIEW 页面中 角色的 编辑详情。您还可以使用 OVERVIEW 页面上相应卡上的编辑图标来编辑角色的用户和组或权限。

5.2.3. 删除 Red Hat Developer Hub Web UI 中的角色

您可以使用 Web UI 删除 Red Hat Developer Hub 中的角色。

注意

policy.csv 或 ConfigMap 文件生成的策略无法使用 Developer Hub Web UI 编辑或删除。

先决条件

  • 在 Developer Hub 中具有管理员角色。
  • 您已在 Developer Hub 中安装了 @janus-idp/backstage-plugin-rbac 插件。如需更多信息,请参阅 第 6 章 动态插件安装
  • 您已配置了所需的权限策略。如需更多信息,请参阅 第 5.1 节 “权限策略配置”
  • 要删除的角色在 Developer Hub 中创建。

流程

  1. 前往 Developer Hub 中边栏底部的 管理

    此时会出现 RBAC 选项卡,在 Developer Hub 中显示所有创建的角色。

  2. (可选)点击任何角色来查看 OVERVIEW 页面中的角色信息。
  3. 在您要删除的角色的 Actions 列中选择删除图标。

    删除此角色? 弹出窗口会出现在屏幕上。

  4. DELETE

5.3. 基于角色的访问控制(RBAC) REST API

Red Hat Developer Hub 提供 RBAC REST API,可用于管理 Developer Hub 中的权限和角色。此 API 允许您促进和自动化 Developer Hub 权限策略和角色的维护。

使用 RBAC REST API,您可以执行以下操作:

  • 检索有关所有权限策略或特定权限策略或角色的信息
  • 创建、更新或删除权限策略或角色
  • 检索有关静态插件的权限策略信息

RBAC REST API 需要以下组件:

授权

RBAC REST API 需要允许的用户角色的 Bearer 令牌授权。出于开发目的,您可以在浏览器中访问 Web 控制台。当您在网络请求列表中刷新令牌请求时,您可以在响应 JSON 中查找令牌。

Authorization: Bearer $token

例如,在 Developer Hub 的 Home 页面中,您可以进入 Network 选项卡并搜索 query?term= network 调用。或者,您可以进入 Catalog 页面,再选择带有 entity-facets 的任何网络调用来获取 Bearer 令牌。

HTTP 方法

RBAC REST API 支持以下 API 请求的 HTTP 方法:

  • GET: 从指定资源端点检索指定信息
  • POST :创建或更新资源
  • PUT :更新资源
  • DELETE :删除资源

基本 URL

RBAC REST API 请求的基本 URL 是 http://SERVER:PORT/api/permission/policies,如 http://localhost:7007/api/permission/policies。

Endpoints

RBAC REST API 端点,如 /api/permission/policies/[kind]/[namespace]/[name] (用于指定 kind、namespace 和 username)是附加到基本 URL 中的 URI,以访问对应的资源。

/api/permission/policies/[kind]/[namespace]/[name] 端点的请求 URL 示例:

http://localhost:7007/api/permission/policies/user/default/johndoe

注意

如果至少有一个权限分配给 user:default/johndoe,则前面提到的示例请求 URL 会返回带有有效授权令牌的 GET 响应中的结果。但是,如果只为角色分配权限,则示例请求 URL 不会返回输出。

请求数据

RBAC REST API 中的 HTTP POST 请求可能需要带有数据的 JSON 请求正文以及请求。

http://localhost:7007/api/permission/policiesPOST 请求 URL 和 JSON 请求正文数据示例:

{
    "entityReference": "role:default/test",
    "permission": "catalog-entity",
    "policy": "delete",
    "effect": "allow"
}

HTTP 状态代码

RBAC REST API 支持以下 HTTP 状态代码来返回响应:

  • 200 OK :请求成功。
  • 201 created :请求成功创建新资源。
  • 204 no Content: 请求成功,但响应有效负载中没有发送额外内容。
  • 400 bad Request: input error with the request
  • 401 未授权:缺少所请求资源的有效身份验证
  • 403 forbidden:拒绝授权请求
  • 404 not Found:无法找到请求的资源
  • 409 冲突:请求与当前状态和目标资源冲突

RBAC REST API 可让您在不使用用户界面的情况下与 Developer Hub 中的权限策略和角色交互。您可以使用任何 REST 客户端或 curl 实用程序发送 RBAC REST API 请求。

先决条件

流程

  1. 识别您要发送请求的相关 API 端点,如 POST /api/permission/policies。根据您的用例调整任何请求详情。

    对于 REST 客户端

    • Authorization :从 web 控制台输入生成的令牌。
    • HTTP 方法:设置为 POST
    • URL :输入 RBAC REST API 基础 URL 和端点,如 http://localhost:7007/api/permission/policies

    对于 curl 工具

    • -x: 设置为 POST
    • - h :设置以下标头:

      content-type: application/json

      Authorization: Bearer $token

      $token 是浏览器中从 Web 控制台请求的令牌。

    • URL :输入以下 RBAC REST API 基础 URL 端点,如 http://localhost:7007/api/permission/policies
    • -d :添加请求 JSON 正文

    请求示例

    curl -X POST "http://localhost:7007/api/permission/policies" -d '{"entityReference":"role:default/test", "permission": "catalog-entity", "policy": "read", "effect":"allow"}' -H "Content-Type: application/json" -H "Authorization: Bearer $token" -v

  2. 执行请求并检查响应。

5.3.2. 支持的 RBAC REST API 端点

RBAC REST API 提供了以下端点,以管理 Developer Hub 中的权限策略和角色,并检索有关策略和角色的信息。

5.3.2.1. 权限策略

RBAC REST API 支持以下端点来管理 Red Hat Developer Hub 中的权限策略。

[GET] /api/permission/policies

返回所有用户的权限策略列表。

响应示例(JSON)

[
  {
    "entityReference": "role:default/test",
    "permission": "catalog-entity",
    "policy": "read",
    "effect": "allow"
  },
  {
    "entityReference": "role:default/test",
    "permission": "catalog.entity.create",
    "policy": "use",
    "effect": "allow"
  },
]

[GET] /api/permission/policies/{kind}/{namespace}/{name}

返回与指定实体引用相关的权限策略。

Expand
表 5.1. 请求参数
名称描述类型要求

kind

实体的类型

字符串

必填

namespace

实体的命名空间

字符串

必填

name

与实体相关的用户名

字符串

必填

响应示例(JSON)

[
  {
    "entityReference": "role:default/test",
    "permission": "catalog-entity",
    "policy": "read",
    "effect": "allow"
  },
  {
    "entityReference": "role:default/test",
    "permission": "catalog.entity.create",
    "policy": "use",
    "effect": "allow"
  }
]

[POST] /api/permission/policies

为指定实体创建权限策略。

Expand
表 5.2. 请求参数
名称描述类型要求

entityReference

包括命名空间和名称的实体的引用值

字符串

必填

权限

权限类型

字符串

必填

policy

权限的读取或写入策略

字符串

必填

effect

指明允许策略

字符串

必填

请求正文(JSON)示例

{
    "entityReference": "role:default/test",
    "permission": "catalog-entity",
    "policy": "read",
    "effect": "allow"
}

响应示例

201 Created

[PUT] /api/permission/policies/{kind}/{namespace}/{name}

更新指定实体的权限策略。

请求参数

请求正文包含 oldPolicynewPolicy 对象:

Expand
Name描述类型要求

权限

权限类型

字符串

必填

policy

权限的读取或写入策略

字符串

必填

effect

指明允许策略

字符串

必填

请求正文(JSON)示例

{
    "oldPolicy": {
        "permission": "catalog-entity",
        "policy": "read",
        "effect": "deny"
    },
    "newPolicy": {
        "permission": "policy-entity",
        "policy": "read",
        "effect": "allow"
    }
}

响应示例

200

[DELETE] /api/permission/policies/{kind}/{namespace}/{name}?permission={value1}&policy={value2}&effect={value3}

删除添加到指定实体的权限策略。

Expand
表 5.3. 请求参数
名称描述类型要求

kind

实体的类型

字符串

必填

namespace

实体的命名空间

字符串

必填

name

与实体相关的用户名

字符串

必填

权限

权限类型

字符串

必填

policy

权限的读取或写入策略

字符串

必填

effect

指明允许策略

字符串

必填

响应示例

204 No Content

[GET] /api/permission/plugins/policies

返回所有静态插件的权限策略。

响应示例(JSON)

[
  {
    "pluginId": "catalog",
      "policies": [
        {
          "permission": "catalog-entity",
          "policy": "read"
        },
        {
          "permission": "catalog.entity.create",
          "policy": "create"
        },
        {
          "permission": "catalog-entity",
          "policy": "delete"
        },
        {
          "permission": "catalog-entity",
          "policy": "update"
        },
        {
          "permission": "catalog.location.read",
          "policy": "read"
        },
        {
          "permission": "catalog.location.create",
          "policy": "create"
        },
        {
          "permission": "catalog.location.delete",
          "policy": "delete"
        }
      ]
    },
  ...
]

5.3.2.2. 角色

RBAC REST API 支持以下端点来管理 Red Hat Developer Hub 中的角色。

[GET] /api/permission/roles

返回 Developer Hub 中的所有角色。

响应示例(JSON)

[
  {
    "memberReferences": ["user:default/pataknight"],
    "name": "role:default/guests"
  },
  {
    "memberReferences": [
      "group:default/janus-authors",
      "user:default/matt"
    ],
    "name": "role:default/rbac_admin"
  }
]

[GET] /api/permission/roles/{kind}/{namespace}/{name}

在 Developer Hub 中创建角色。

Expand
表 5.4. 请求参数
名称描述类型要求

正文(body)

memberReferencesnamespace,并 命名 要创建的新角色。

请求正文

必填

请求正文(JSON)示例

{
  "memberReferences": ["group:default/test"],
  "name": "role:default/test_admin"
}

响应示例

201 Created

[PUT] /api/permission/roles/{kind}/{namespace}/{name}

为 Developer Hub中的角色 更新 memberReferences、类型、命名空间或 名称

请求参数

请求正文包含 oldRolenewRole 对象:

Expand
Name描述类型要求

正文(body)

memberReferencesnamespace,并 命名 要创建的新角色。

请求正文

必填

请求正文(JSON)示例

{
  "oldRole": {
    "memberReferences": ["group:default/test"],
    "name": "role:default/test_admin"
  },
  "newRole": {
    "memberReferences": ["group:default/test", "user:default/test2"],
    "name": "role:default/test_admin"
  }
}

响应示例

200 OK

[DELETE] /api/permission/roles/{kind}/{namespace}/{name}?memberReferences=<VALUE>

从 Developer Hub 中的角色中删除指定的用户或组。

Expand
表 5.5. 请求参数
名称描述类型要求

kind

实体的类型

字符串

必填

namespace

实体的命名空间

字符串

必填

name

与实体相关的用户名

字符串

必填

memberReferences

关联的组信息

字符串

必填

响应示例

204

[DELETE] /api/permission/roles/{kind}/{namespace}/{name}

从 Developer Hub 中删除指定的角色。

Expand
表 5.6. 请求参数
名称描述类型要求

kind

实体的类型

字符串

必填

namespace

实体的命名空间

字符串

必填

name

与实体相关的用户名

字符串

必填

响应示例

204

第 6 章 动态插件安装

动态插件支持基于 backend 插件管理器软件包,这是为动态插件软件包扫描配置的根目录( app 配置中的dynamicPlugins.rootDirectory )的服务,并动态加载它们。

您可以使用 Red Hat Developer Hub 预装的动态插件,或者从公共 NPM registry 安装外部动态插件。

6.1. 查看已安装的插件

使用动态插件 Info 前端插件,您可以查看当前在 Red Hat Developer Hub 应用程序中安装的插件。此插件默认为启用。

流程

  1. 打开 Developer Hub 应用程序,再点 Administration
  2. 转至 Plugins 选项卡,以查看已安装的插件和相关信息的列表。

6.2. 预安装的动态插件

Red Hat Developer Hub 预安装了特定的动态插件。默认情况下禁用需要自定义配置的动态插件。

有关此 Developer Hub 发行版本中预安装的动态插件的完整列表,请参阅 动态插件支持列表

在应用程序启动时,对于默认禁用的每个插件,Developer Hub pod 日志中的 install-dynamic-plugins init 容器 会显示类似如下的消息:

======= Skipping disabled dynamic plugin ./dynamic-plugins/dist/backstage-plugin-catalog-backend-module-github-dynamic

要启用此插件,请在 Helm Chart 中添加名称相同的软件包,并将 disabled 字段中的值改为 'false'。例如:

global:
  dynamic:
    includes:
      - dynamic-plugins.default.yaml
    plugins:
      - package: ./dynamic-plugins/dist/backstage-plugin-catalog-backend-module-github-dynamic
        disabled: false
注意

插件的默认配置从 dynamic-plugins.default.yaml 文件中提取,但您可以使用 pluginConfig 条目来覆盖默认配置。

6.2.1. 预安装的动态插件描述和详情

重要

红帽产品服务级别协议(SLA)不支持技术预览功能,且其功能可能并不完善,因此红帽不建议在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能的更多信息,请参阅 技术预览功能范围

有关红帽如何提供对捆绑社区动态插件的支持的更多详细信息,请参阅 Red Hat Developer Support Policy 页面。

Red Hat Developer Hub 中提供了 56 插件。如需更多信息,请参阅下表:

Expand
表 6.1. 动态插件支持列表
Name角色plugin描述Version支持等级路径所需的变量default

3scale

后端

@janus-idp/backstage-plugin-3scale-backend

3scale Backstage 供应商插件将 3scale 内容同步到 Backstage 目录。

1.4.7

红帽技术预览

./dynamic-plugins/dist/janus-idp-backstage-plugin-3scale-backend-dynamic

THREESCALE_BASE_URL

THREESCALE_ACCESS_TOKEN

Disabled

AAP

后端

@janus-idp/backstage-plugin-aap-backend

 

1.5.5

红帽技术预览

./dynamic-plugins/dist/janus-idp-backstage-plugin-aap-backend-dynamic

AAP_BASE_URL

AP_AUTH_TOKEN

Disabled

ACR

frontend

@janus-idp/backstage-plugin-acr

 

1.2.28

红帽技术预览

./dynamic-plugins/dist/janus-idp-backstage-plugin-acr

 

Disabled

分析供应商分割

frontend

@janus-idp/backstage-plugin-analytics-provider-segment

此插件为 Segment 提供 Backstage Analytics API 的实现。安装和配置后,分析事件将在用户导航和使用您的 Backstage 实例时发送到 Segment。

1.2.11

Production

./dynamic-plugins/dist/janus-idp-backstage-plugin-analytics-provider-segment

SEGMENT_WRITE_KEY

SEGMENT_MASK_IP

SEGMENT_TEST_MODE

Disabled

Argo CD

frontend

@roadiehq/backstage-plugin-argo-cd

Backstage 插件来查看和与 Argo CD 交互。

2.4.1

Production

./dynamic-plugins/dist/roadiehq-backstage-plugin-argo-cd

 

Disabled

Argo CD

后端

@roadiehq/backstage-plugin-argo-cd-backend

Backstage 插件 Argo CD 后端

2.14.5

Production

./dynamic-plugins/dist/roadiehq-backstage-plugin-argo-cd-backend-dynamic

ARGOCD_USERNAME

ARGOCD_PASSWORD

ARGOCD_INSTANCE1_URL

ARGOCD_AUTH_TOKEN

ARGOCD_INSTANCE2_URL

ARGOCD_AUTH_TOKEN2

Disabled

Argo CD

后端

@roadiehq/scaffolder-backend-argocd

 

1.1.23

社区支持

./dynamic-plugins/dist/roadiehq-scaffolder-backend-argocd-dynamic

ARGOCD_USERNAME

ARGOCD_PASSWORD

ARGOCD_INSTANCE1_URL

ARGOCD_AUTH_TOKEN

ARGOCD_INSTANCE2_URL

ARGOCD_AUTH_TOKEN2

Disabled

Azure Devops

frontend

@backstage/plugin-azure-devops

 

0.3.12

社区支持

./dynamic-plugins/dist/backstage-plugin-azure-devops

 

Disabled

Azure Devops

后端

@backstage/plugin-azure-devops-backend

Azure DevOps 后端插件,其中包含检索构建、拉取请求等的 API,供 Azure DevOps 前端插件使用。

0.5.5

社区支持

./dynamic-plugins/dist/backstage-plugin-azure-devops-backend-dynamic

AZURE_TOKEN

AZURE_ORG

Disabled

Azure Devops

后端

@backstage/plugin-scaffolder-backend-module-azure

@backstage/plugin-scaffolder-backend 的 azure 模块

0.1.5

社区支持

./dynamic-plugins/dist/backstage-plugin-scaffolder-backend-module-azure-dynamic

 

Enabled

Bitbucket

后端

@backstage/plugin-catalog-backend-module-bitbucket-cloud

一个 Backstage catalog backend 模块,可帮助集成到 Bitbucket 云。

0.1.28

社区支持

./dynamic-plugins/dist/backstage-plugin-catalog-backend-module-bitbucket-cloud-dynamic

BITBUCKET_WORKSPACE

Disabled

Bitbucket

后端

@backstage/plugin-catalog-backend-module-bitbucket-server

有助于集成到 Bitbucket 服务器的 Backstage 目录后端模块。

0.1.26

社区支持

./dynamic-plugins/dist/backstage-plugin-catalog-backend-module-bitbucket-server-dynamic

BITBUCKET_HOST

Disabled

Bitbucket

后端

@backstage/plugin-scaffolder-backend-module-bitbucket-cloud

@backstage/plugin-scaffolder-backend 的 Bitbucket 云模块

0.1.3

社区支持

./dynamic-plugins/dist/backstage-plugin-scaffolder-backend-module-bitbucket-cloud-dynamic

 

Enabled

Bitbucket

后端

@backstage/plugin-scaffolder-backend-module-bitbucket-server

@backstage/plugin-scaffolder-backend 的 Bitbucket 服务器模块。

0.1.3

社区支持

./dynamic-plugins/dist/backstage-plugin-scaffolder-backend-module-bitbucket-server-dynamic

 

Enabled

Datadog

frontend

@roadiehq/backstage-plugin-datadog

将 Datadog 图形和仪表板嵌入到 Backstage。

2.2.6

社区支持

./dynamic-plugins/dist/roadiehq-backstage-plugin-datadog

 

Disabled

Dynatrace

frontend

@backstage/plugin-dynatrace

集成到 Dynatrace 的 Backstage 插件。

9.0.0

社区支持

./dynamic-plugins/dist/backstage-plugin-dynatrace

 

Disabled

动态插件

frontend

@janus-idp/backstage-plugin-dynamic-plugins-info

Backstage 的动态插件信息插件。

1.0.2

Production

@janus-idp/backstage-plugin-dynamic-plugins-info

 

Enabled

Gerrit

后端

@backstage/plugin-scaffolder-backend-module-gerrit

@backstage/plugin-scaffolder-backend 的 gerrit 模块。

0.1.5

社区支持

./dynamic-plugins/dist/backstage-plugin-scaffolder-backend-module-gerrit-dynamic

 

Enabled

GitHub

后端

@backstage/plugin-catalog-backend-module-github

有助于集成到 Github 的 Backstage 目录后端模块

0.5.3

社区支持

./dynamic-plugins/dist/backstage-plugin-catalog-backend-module-github-dynamic

GITHUB_ORG

Disabled

GitHub

后端

@backstage/plugin-catalog-backend-module-github-org

catalog 插件的 github-org 后端模块。

0.1.0

社区支持

./dynamic-plugins/dist/backstage-plugin-catalog-backend-module-github-org-dynamic

GITHUB_URL

GITHUB_ORG

Disabled

GitHub

frontend

@backstage/plugin-github-actions

集成到 GitHub Actions 的 Backstage 插件

0.6.11

社区支持

./dynamic-plugins/dist/backstage-plugin-github-actions

 

Disabled

GitHub

frontend

@backstage/plugin-github-issues

集成到 GitHub 问题的 Backstage 插件

0.2.19

社区支持

./dynamic-plugins/dist/backstage-plugin-github-issues

 

Disabled

GitHub

后端

@backstage/plugin-scaffolder-backend-module-github

@backstage/plugin-scaffolder-backend 的 github 模块。

0.2.3

社区支持

./dynamic-plugins/dist/backstage-plugin-scaffolder-backend-module-github-dynamic

 

Enabled

GitHub

frontend

@roadiehq/backstage-plugin-github-insights

Backstage 插件,以提供 Readmes、顶级 Contributors 和其他小部件。

2.3.27

社区支持

./dynamic-plugins/dist/roadiehq-backstage-plugin-github-insights

 

Disabled

GitHub

frontend

@roadiehq/backstage-plugin-github-pull-requests

Backstage 插件来查看和与 GitHub 拉取请求交互。

2.5.24

社区支持

./dynamic-plugins/dist/roadiehq-backstage-plugin-github-pull-requests

 

Disabled

GitHub

frontend

@roadiehq/backstage-plugin-security-insights

Backstage 插件,为 GitHub 存储库添加安全见解。

2.3.15

社区支持

./dynamic-plugins/dist/roadiehq-backstage-plugin-security-insights

 

Disabled

GitLab

后端

@backstage/plugin-catalog-backend-module-gitlab

从 GitLab 实例中提取存储库。

0.3.10

社区支持

./dynamic-plugins/dist/backstage-plugin-catalog-backend-module-gitlab-dynamic

 

Disabled

GitLab

后端

@backstage/plugin-scaffolder-backend-module-gitlab

可让您与 gitlab 交互的 scaffolder 后端的模块

0.2.16

社区支持

./dynamic-plugins/dist/backstage-plugin-scaffolder-backend-module-gitlab-dynamic

 

Disabled

GitLab

frontend

@immobiliarelabs/backstage-plugin-gitlab

Backstage 插件与 GitLab 交互

6.4.0

社区支持

./dynamic-plugins/dist/immobiliarelabs-backstage-plugin-gitlab

 

Disabled

GitLab

后端

@immobiliarelabs/backstage-plugin-gitlab-backend

Backstage 插件与 GitLab 交互

6.4.0

社区支持

./dynamic-plugins/dist/immobiliarelabs-backstage-plugin-gitlab-backend-dynamic

GITLAB_HOST

GITLAB_TOKEN

Disabled

Jenkins

frontend

@backstage/plugin-jenkins

集成到 Jenkins 的 Backstage 插件

0.9.5

社区支持

./dynamic-plugins/dist/backstage-plugin-jenkins

 

Disabled

Jenkins

后端

@backstage/plugin-jenkins-backend

集成到 Jenkins 的 backstage 后端插件

0.3.7

社区支持

./dynamic-plugins/dist/backstage-plugin-jenkins-backend-dynamic

JENKINS_URL

JENKINS_USERNAME

JENKINS_TOKEN

Disabled

JFrog Artifactory

frontend

@janus-idp/backstage-plugin-jfrog-artifactory

Jfrog Artifactory 插件显示 Jfrog Artifactory registry 中有关容器镜像的信息。

1.2.28

红帽技术预览

./dynamic-plugins/dist/janus-idp-backstage-plugin-jfrog-artifactory

RTIFACTORY_URL

RTIFACTORY_TOKEN

ARTIFACTORY_SECURE

Disabled

jira

frontend

@roadiehq/backstage-plugin-jira

Backstage 插件来查看和与 JIRA 交互

2.5.4

社区支持

./dynamic-plugins/dist/roadiehq-backstage-plugin-jira

 

Disabled

Keycloak

后端

@janus-idp/backstage-plugin-keycloak-backend

Keycloak 后端插件将 Keycloak 集成到 Backstage。

1.8.6

Production

./dynamic-plugins/dist/janus-idp-backstage-plugin-keycloak-backend-dynamic

KEYCLOAK_BASE_URL

KEYCLOAK_LOGIN_REALM

KEYCLOAK_REALM

KEYCLOAK_CLIENT_ID

KEYCLOAK_CLIENT_SECRET

Disabled

Kubernetes

frontend

@backstage/plugin-kubernetes

集成到 Kubernetes 的 Backstage 插件

0.11.5

社区支持

./dynamic-plugins/dist/backstage-plugin-kubernetes

 

Enabled

Kubernetes

后端

@backstage/plugin-kubernetes-backend

集成到 Kubernetes 的 backstage 后端插件

0.15.3

Production

./dynamic-plugins/dist/backstage-plugin-kubernetes-backend-dynamic

K8S_CLUSTER_NAME

K8S_CLUSTER_URL

K8S_CLUSTER_TOKEN

Enabled

Kubernetes

frontend

@janus-idp/backstage-plugin-topology

Topology 插件可让您视觉化工作负载,如 Deployment, Job, Daemonset, Statefulset, CronJob, 和 Pod 在 Kubernetes 集群上支持任何服务。

1.18.8

Production

./dynamic-plugins/dist/janus-idp-backstage-plugin-topology

 

Enabled

lighthouse

frontend

@backstage/plugin-lighthouse

集成到 Lighthouse 的 Backstage 插件

0.4.15

社区支持

./dynamic-plugins/dist/backstage-plugin-lighthouse

 

Disabled

Nexus 存储库管理器

frontend

@janus-idp/backstage-plugin-nexus-repository-manager

Nexus Repository Manager 插件显示有关您的 Backstage 应用中 Nexus Repository Manager 中可用的构建工件的信息。

1.4.28

红帽技术预览

./dynamic-plugins/dist/janus-idp-backstage-plugin-nexus-repository-manager

 

Disabled

OCM

frontend

@janus-idp/backstage-plugin-ocm

Open Cluster Management (OCM)插件将您的 Backstage 实例与 OCM 的 MultiClusterHubMultiCluster 引擎集成。

3.7.5

Production

./dynamic-plugins/dist/janus-idp-backstage-plugin-ocm

 

Disabled

OCM

后端

@janus-idp/backstage-plugin-ocm-backend

 

3.5.7

Production

./dynamic-plugins/dist/janus-idp-backstage-plugin-ocm-backend-dynamic

OCM_HUB_NAME

OCM_HUB_URL

moc_infra_token

Disabled

Pagerduty

frontend

@pagerduty/backstage-plugin

集成到 PagerDuty 的 Backstage 插件

0.9.3

社区支持

././dynamic-plugins/dist/pagerduty-backstage-plugin

 

Disabled

Quy

frontend

@janus-idp/backstage-plugin-quay

Quay 插件在 Backstage 应用中显示 Quay registry 中有关容器镜像的信息。

1.5.10

Production

./dynamic-plugins/dist/janus-idp-backstage-plugin-quay

 

Disabled

Quy

后端

@janus-idp/backstage-scaffolder-backend-module-quay

此模块为 Quay 提供 Backstage 模板操作。

1.3.5

Production

./dynamic-plugins/dist/janus-idp-backstage-scaffolder-backend-module-quay-dynamic

 

Enabled

RBAC

frontend

@janus-idp/backstage-plugin-rbac

Backstage 的 RBAC 前端插件。

1.15.5

Production

./dynamic-plugins/dist/janus-idp-backstage-plugin-rbac

 

Disabled

regex

后端

@janus-idp/backstage-scaffolder-backend-module-regex

此插件为 RegExp 提供 Backstage 模板操作。

1.3.5

Production

./dynamic-plugins/dist/janus-idp-backstage-scaffolder-backend-module-regex-dynamic

 

Enabled

Scaffolder

后端

@roadiehq/scaffolder-backend-module-utils

它包含在构建器模板中使用的一系列操作。

1.13.6

社区支持

./dynamic-plugins/dist/roadiehq-scaffolder-backend-module-utils-dynamic

 

Enabled

ServiceNow

后端

@janus-idp/backstage-scaffolder-backend-module-servicenow

此插件为 ServiceNow 提供 Backstage 模板操作。

1.3.5

红帽技术预览

./dynamic-plugins/dist/janus-idp-backstage-scaffolder-backend-module-servicenow-dynamic

SERVICENOW_BASE_URL

SERVICENOW_USERNAME

SERVICENOW_PASSWORD

Disabled

SonarQube

frontend

@backstage/plugin-sonarqube

一个 Backstage 插件,以显示 incompatible 代码质量和安全结果。

0.7.12

社区支持

./dynamic-plugins/dist/backstage-plugin-sonarqube

 

Disabled

SonarQube

后端

@backstage/plugin-sonarqube-backend

 

0.2.15

社区支持

./dynamic-plugins/dist/backstage-plugin-sonarqube-backend-dynamic

SONARQUBE_URL

SONARQUBE_TOKEN

Disabled

SonarQube

后端

@janus-idp/backstage-scaffolder-backend-module-sonarqube

此模块为 hieradata 提供 Backstage 模板操作。

1.3.5

红帽技术预览

./dynamic-plugins/dist/janus-idp-backstage-scaffolder-backend-module-sonarqube-dynamic

 

Disabled

tech Radar

frontend

@backstage/plugin-tech-radar

可让您为您的机构显示 Tech Radar 的 Backstage 插件

0.6.13

社区支持

./dynamic-plugins/dist/backstage-plugin-tech-radar

 

Disabled

ProductShortName

frontend

@backstage/plugin-techdocs

呈现组件技术文档的 Backstage 插件

1.10.0

Production

./dynamic-plugins/dist/backstage-plugin-techdocs

 

Enabled

ProductShortName

后端

@backstage/plugin-techdocs-backend

呈现组件技术文档的 backstage 后端插件

1.9.6

Production

./dynamic-plugins/dist/backstage-plugin-techdocs-backend-dynamic

TECHDOCS_BUILDER_TYPE

TECHDOCS_GENERATOR_TYPE

TECHDOCS_PUBLISHER_TYPE

BUCKET_NAME

BUCKET_REGION_VAULT

BUCKET_URL

AWS_ACCESS_KEY_ID

AWS_SECRET_ACCESS_KEY

Enabled

Tekton

frontend

@janus-idp/backstage-plugin-tekton

Tekton 插件可让您视觉化 Kubernetes 集群中可用的 PipelineRun 资源。

3.5.12

Production

./dynamic-plugins/dist/janus-idp-backstage-plugin-tekton

 

Disabled

6.3. 使用 Helm chart 安装动态插件

您可以使用 Helm Chart 部署 Developer Hub 实例,这是灵活的安装方法。使用 Helm Chart,您可以将动态插件加载到 Developer Hub 实例中,而无需重新编译代码或重建容器。

要使用 Helm 在 Developer Hub 中安装动态插件,请在 Helm Chart 中添加以下 global.dynamic 参数:

  • plugins: 用于安装的动态插件列表。默认情况下,列表为空。您可以使用以下字段填充 plugins 列表:

    • 软件包 :您要安装的动态插件软件包的软件包规格。您可以使用软件包进行本地或外部动态插件安装。对于本地安装,请使用包含动态插件的本地文件夹的路径。对于外部安装,请使用公共 NPM 存储库中的软件包规格。
    • 完整性 (外部软件包需要):一个完整性校验和,格式为特定于软件包的 &lt ;alg>-<digest >。支持的算法包括 sha256SHA384sha512
    • pluginConfig :特定于插件的 app-config YAML 片段。如需更多信息,请参阅插件配置。
    • disabled :如果设为 true,则禁用动态插件。默认值: false
  • 包括 :使用相同语法的 YAML 文件列表。
注意

包含 文件中的 plugins 列表与主 Helm 值中的 plugins 列表合并。如果两个插件列表中提到了 插件 软件包,则主 Helm 值中的 plugins 字段会覆盖 includes 文件中的 plugins 字段。默认配置包括 dynamic-plugins.default.yaml 文件,其中包含 Developer Hub 中预安装的所有动态插件,无论是默认启用还是禁用。

6.3.1. 获取完整性 checksum

要获取完整性 checksum,请输入以下命令:

npm view <package name>@<version> dist.integrity

6.3.2. 动态插件安装的 Helm Chart 配置示例

以下示例演示了如何为特定类型的动态插件安装配置 Helm Chart。

当外部插件需要特定的 app-config 时,配置本地插件和外部插件

global:
  dynamic:
    plugins:
      - package: <alocal package-spec used by npm pack>
      - package: <external package-spec used by npm pack>
        integrity: sha512-<some hash>
        pluginConfig: ...

从包含的文件禁用插件

global:
  dynamic:
    includes:
      - dynamic-plugins.default.yaml
    plugins:
      - package: <some imported plugins listed in dynamic-plugins.default.yaml>
        disabled: true

从包含的文件启用插件

global:
  dynamic:
    includes:
      - dynamic-plugins.default.yaml
    plugins:
      - package: <some imported plugins listed in dynamic-plugins.custom.yaml>
        disabled: false

启用在包含的文件中禁用的插件

global:
  dynamic:
    includes:
      - dynamic-plugins.default.yaml
    plugins:
      - package: <some imported plugins listed in dynamic-plugins.custom.yaml>
        disabled: false

6.3.3. 使用 Helm Chart 安装外部动态插件

NPM registry 包含可用于演示目的的外部动态插件。例如,NPMJS 存储库中的 janus-idp 组织提供了以下社区插件:

  • 通知(frontend 和 backend)
  • Kubernetes 操作(scaffolder 操作)

要安装 Notifications 和 Kubernetes 操作插件,请在 global.dynamic.plugins 列表中的 Helm Chart 值中包含它们,如下例所示:

global:
  dynamic:
    plugins:
      - package: '@janus-idp/plugin-notifications-backend-dynamic@1.3.6'
        # Integrity can be found at https://registry.npmjs.org/@janus-idp/plugin-notifications-backend-dynamic
        integrity: 'sha512-Qd8pniy1yRx+x7LnwjzQ6k9zP+C1yex24MaCcx7dGDPT/XbTokwoSZr4baSSn8jUA6P45NUUevu1d629mG4JGQ=='
      - package: '@janus-idp/plugin-notifications@1.1.12
'
        # https://registry.npmjs.org/@janus-idp/plugin-notifications

        integrity: 'sha512-GCdEuHRQek3ay428C8C4wWgxjNpNwCXgIdFbUUFGCLLkBFSaOEw+XaBvWaBGtQ5BLgE3jQEUxa+422uzSYC5oQ=='
        pluginConfig:
          dynamicPlugins:
            frontend:
              janus-idp.backstage-plugin-notifications:
                appIcons:
                  - name: notificationsIcon
                    module: NotificationsPlugin
                    importName: NotificationsActiveIcon
                dynamicRoutes:
                  - path: /notifications
                    importName: NotificationsPage
                    module: NotificationsPlugin
                    menuItem:
                      icon: notificationsIcon
                      text: Notifications
                    config:
                      pollingIntervalMs: 5000
      - package: '@janus-idp/backstage-scaffolder-backend-module-kubernetes-dynamic@1.3.5'
        # https://registry.npmjs.org/@janus-idp/backstage-scaffolder-backend-module-kubernetes-dynamic
        integrity: 'sha512-19ie+FM3QHxWYPyYzE0uNdI5K8M4vGZ0SPeeTw85XPROY1DrIY7rMm2G0XT85L0ZmntHVwc9qW+SbHolPg/qRA=='
          proxy:
            endpoints:
              /explore-backend-completed:
                target: 'http://localhost:7017'
      - package: '@dfatwork-pkgs/search-backend-module-explore-wrapped-dynamic@0.1.3-next.1'
        # https://registry.npmjs.org/@dfatwork-pkgs/search-backend-module-explore-wrapped-dynamic
        integrity: 'sha512-mv6LS8UOve+eumoMCVypGcd7b/L36lH2z11tGKVrt+m65VzQI4FgAJr9kNCrjUZPMyh36KVGIjYqsu9+kgzH5A=='
      - package: '@dfatwork-pkgs/plugin-catalog-backend-module-test-dynamic@0.0.0'
        # https://registry.npmjs.org/@dfatwork-pkgs/plugin-catalog-backend-module-test-dynamic
        integrity: 'sha512-YsrZMThxJk7cYJU9FtAcsTCx9lCChpytK254TfGb3iMAYQyVcZnr5AA/AU+hezFnXLsr6gj8PP7z/mCZieuuDA=='

6.4. 在 air-gapped 环境中安装外部插件

您可以通过设置自定义 NPM registry,在 air-gapped 环境中安装外部插件。要为动态插件软件包配置 NPM registry URL 和身份验证信息,请参阅使用自定义 NPM registry 进行动态插件软件包

您可以使用 Helm Chart 为动态插件软件包配置 NPM registry URL 和身份验证信息。对于通过 npm pack 获取的动态插件软件包,您可以使用 .npmrc 文件。

使用 Helm Chart,使用以下内容创建名为 dynamic-plugins-npmrc 的 secret,将 .npmrc 文件添加到 NPM registry 中:

apiVersion: v1
kind: Secret
metadata:
  name: dynamic-plugins-npmrc
type: Opaque
stringData:
  .npmrc: |
    registry=<registry-url>
    //<registry-url>:_authToken=<auth-token>
          ...

6.6. 动态插件的基本配置

有些动态插件需要设置环境变量。如果没有设置强制环境变量,并且插件已启用,则应用程序在启动时可能会失败。

每个插件的必要环境变量列在 动态插件支持列表中

注意

ZiB-bomb 检测在安装一些包含大型文件的动态插件时,如果安装脚本认为软件包存档成为 Zib-Bomb,安装会失败。

要增加软件包存档中文件的最大允许大小,您可以从默认的 20000000 字节增加部署 install-dynamic-plugins initContainerMAX_ENTRY_SIZE 环境值。

6.7. 安装和配置 Ansible Automation Platform

Ansible Automation Platform (AAP)插件同步可访问的模板,包括来自 AAP 的作业模板和工作流作业模板到 Developer Hub 目录。

重要

Ansible Automation Platform 插件只是一个技术预览功能。

红帽产品服务级别协议(SLA)不支持技术预览功能,且其功能可能并不完善,因此红帽不建议在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能的更多信息,请参阅 技术预览功能范围

有关红帽如何提供对捆绑社区动态插件的支持的更多详细信息,请参阅 Red Hat Developer Support Policy 页面。

6.7.1. 对于管理员

6.7.1.1. 安装和配置 AAP 后端插件

AAP 后端插件允许您使用 Developer Hub 中的 app-config.yaml 配置文件配置一个或多个供应商。

先决条件

  • 您的 Developer Hub 应用程序已安装并运行。
  • 您已在 Ansible Automation Platform 中创建帐户。

安装

AAP 后端插件在 Developer Hub 中预加载,带有基本配置属性。要启用它,将 disabled 属性设置为 false,如下所示:

global:
  dynamic:
    includes:
      - dynamic-plugins.default.yaml
    plugins:
      - package: ./dynamic-plugins/dist/janus-idp-backstage-plugin-aap-backend-dynamic
        disabled: false

基本配置

要启用 AAP 插件,您必须设置以下环境变量:

  • AAP_BASE_URL: 服务的基本 URL
  • AAP AUTH TOKEN: 服务的身份验证令牌

高级配置

  1. 您可以使用 aap 标记来配置 Developer Hub 的 app-config.yaml 文件,如下所示:

       catalog:
         providers:
           aap:
             dev:
               baseUrl: $(AAP_BASE_URL)
               authorization: 'Bearer ${AAP_AUTH_TOKEN}'
               owner: <owner>
               system: <system>
               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 }
6.7.1.2. AAP 后端插件的日志行故障排除

启动 Developer Hub 应用程序时,您可以看到以下日志行:

[1] 2023-02-13T15:26:09.356Z catalog info Discovered ResourceEntity API type=plugin target=AapResourceEntityProvider:dev
[1] 2023-02-13T15:26:09.423Z catalog info Discovered ResourceEntity Red Hat Event (DEV, v1.2.0) type=plugin target=AapResourceEntityProvider:dev
[1] 2023-02-13T15:26:09.620Z catalog info Discovered ResourceEntity Red Hat Event (TEST, v1.1.1) type=plugin target=AapResourceEntityProvider:dev
[1] 2023-02-13T15:26:09.819Z catalog info Discovered ResourceEntity Red Hat Event (PROD, v1.1.1) type=plugin target=AapResourceEntityProvider:dev
[1] 2023-02-13T15:26:09.819Z catalog info Applying the mutation with 3 entities type=plugin target=AapResourceEntityProvider:dev

6.7.2. 对于用户

6.7.2.1. 从 Developer Hub 中的 AAP 访问模板

当您成功配置了 AAP 后端插件时,它会同步模板,包括 AAP 中的作业模板和工作流作业模板,并将其显示在 Developer Hub Catalog 页面中作为 Resources。

先决条件

流程

  1. 打开 Developer Hub 应用程序,再打开 Catalog 页面。
  2. 页面左侧的 Type 下拉菜单中选择 Kind 下拉菜单和 作业模板 或工作流作业模板 的资源。

    aap-backend-plugin-backstage

    页面中会出现来自 AAP 的所有可用模板的列表。

  3. 从列表中选择一个模板。

    OVERVIEW 选项卡会出现包含不同卡,例如:

    • 关于 :提供有关模板的详细信息。
    • 关系 :显示模板和相关的各个方面的视觉表示。
    • 链接 :包含到 AAP 仪表板的链接和模板的详细信息页面。
    • 具有子组件 :显示关联的子组件列表。
    aap-backend-plugin-backstage-details

6.8. 安装和配置 Keycloak

将 Keycloak 后端插件集成到 Developer Hub 中,具有以下功能:

  • 同步域中的 Keycloak 用户。
  • 在域中同步 Keycloak 组及其用户。

6.8.1. 对于管理员

6.8.1.1. 安装

Keycloak 插件在 Developer Hub 中预加载,带有基本配置属性。要启用它,将 disabled 属性设置为 false,如下所示:

global:
  dynamic:
    includes:
      - dynamic-plugins.default.yaml
    plugins:
      - package: ./dynamic-plugins/dist/janus-idp-backstage-plugin-keycloak-backend-dynamic
        disabled: false
6.8.1.2. 基本配置

要启用 Keycloak 插件,您必须设置以下环境变量:

  • KEYCLOAK_BASE_URL
  • KEYCLOAK_LOGIN_REALM
  • KEYCLOAK_REALM
  • KEYCLOAK_CLIENT_ID
  • KEYCLOAK_CLIENT_SECRET
6.8.1.3. 高级配置

调度配置

您可以在 app-config.yaml 文件中配置调度,如下所示:

     catalog:
       providers:
         keycloakOrg:
           default:
             # ...
             # highlight-add-start
             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 }
               initialDelay: { seconds: 15 }
               # highlight-add-end
注意

如果您在 app-config.yaml 文件中对调度进行了任何更改,则重启以应用更改。

Keycloak 查询参数

您可以覆盖 app-config.yaml 文件中的默认 Keycloak 查询参数,如下所示:

   catalog:
     providers:
       keycloakOrg:
         default:
           # ...
           # highlight-add-start
           userQuerySize: 500 # Optional
           groupQuerySize: 250 # Optional
           # highlight-add-end

使用 Keycloak API 启用 Developer Hub 和 Keycloak 之间的通信。用户名和密码或客户端凭证是支持的身份验证方法。

下表描述了您可以配置在 app-config.yaml 文件中的 catalog.providers.keycloakOrg.<ENVIRONMENT_NAME > 对象下启用插件的参数:

Expand
Name描述默认值必填

baseUrl

Keycloak 服务器的位置,如 https://localhost:8443/auth。请注意,Keycloak 的较新版本省略了 /auth 上下文路径。

""

realm

要同步的域

master

loginRealm

用于验证的域

master

username

进行身份验证的用户名

""

如果使用基于密码的身份验证,则为

password

进行身份验证的密码

""

如果使用基于密码的身份验证,则为

clientId

要进行身份验证的客户端 ID

""

如果使用基于客户端凭证的身份验证,则为 yes

clientSecret

要进行身份验证的客户端 Secret

""

如果使用基于客户端凭证的身份验证,则为 yes

userQuerySize

一次查询的用户数

100

groupQuerySize

一次查询的组数

100

在使用客户端凭据时,必须将访问类型设为 机密,并且必须启用服务帐户。您还必须从 realm-management 客户端角色中添加以下角色:

  • query-groups
  • query-users
  • view-users
6.8.1.4. 限制

如果您有自签名或企业证书问题,您可以在启动 Developer Hub 前设置以下环境变量:

NODE_TLS_REJECT_UNAUTHORIZED=0

注意

不建议设置环境变量的解决方案。

6.8.2. 对于用户

成功配置插件后,插件会在每次启动时都会导入用户和组。

注意

如果您设置了调度,则用户和组也会被导入。

第一次导入完成后,您可以从目录页面中选择 User 来列出用户:

catalog-list

您可以在页面中查看用户列表:

user-list

当您选择一个用户时,您可以看到从 Keycloak 导入的信息:

user-profile

您还可以选择一个组,查看列表,并为组选择或查看从 Keycloak 导入的信息:

group-profile

6.9. 安装和配置 Nexus 存储库管理器

Nexus Repository Manager 插件显示有关 Developer Hub 应用中构建工件的信息。构建工件在 Nexus Repository Manager 中提供。

重要

Nexus Repository Manager 插件只是一个技术预览功能。

红帽产品服务级别协议(SLA)不支持技术预览功能,且其功能可能并不完善,因此红帽不建议在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能的更多信息,请参阅 技术预览功能范围

有关红帽如何提供对捆绑社区动态插件的支持的更多详细信息,请参阅 Red Hat Developer Support Policy 页面。

6.9.1. 对于管理员

6.9.1.1. 安装和配置 Nexus Repository Manager 插件

安装

Nexus Repository Manager 插件在 Developer Hub 中预加载,带有基本配置属性。要启用它,将 disabled 属性设置为 false,如下所示:

global:
  dynamic:
    includes:
      - dynamic-plugins.default.yaml
    plugins:
      - package: ./dynamic-plugins/dist/janus-idp-backstage-plugin-nexus-repository-manager
        disabled: false

配置

  1. app-config.yaml 文件中将代理设置为所需的 Nexus Repository Manager 服务器,如下所示:

    proxy:
        '/nexus-repository-manager':
        target: 'https://<NEXUS_REPOSITORY_MANAGER_URL>'
        headers:
            X-Requested-With: 'XMLHttpRequest'
            # Uncomment the following line to access a private Nexus Repository Manager using a token
            # Authorization: 'Bearer <YOUR TOKEN>'
        changeOrigin: true
        # Change to "false" in case of using self hosted Nexus Repository Manager instance with a self-signed certificate
        secure: true
  2. 可选:更改 Nexus Repository Manager 代理的基本 URL,如下所示:

    nexusRepositoryManager:
        # default path is `/nexus-repository-manager`
        proxyPath: /custom-path
  3. 可选:启用以下实验性注解:

    nexusRepositoryManager:
        experimentalAnnotations: true
  4. 使用以下注解给实体添加注解:

    metadata:
        annotations:
        # insert the chosen annotations here
        # example
        nexus-repository-manager/docker.image-name: `<ORGANIZATION>/<REPOSITORY>`,

有关安装和配置动态插件的详情,请参考 第 6 章 动态插件安装 部分。

6.9.2. 对于用户

Nexus Repository Manager 是一个前端插件,可让您查看有关构建工件的信息。

先决条件

流程

  1. 打开 Developer Hub 应用程序,从 Catalog 页面中选择一个组件。
  2. 转至 BUILD ARTIFACTS 选项卡。

    BUILD ARTIFACTS 选项卡包含构建工件和相关信息的列表,如 VERSION、REPOSITORY TYPE、REPOSITORY TYPEMANIFESTMODIFIEDSIZE

    nexus-repository-manager-tab

6.10. 安装和配置 Tekton

您可以使用 Tekton 插件来视觉化 CI/CD 管道在 Kubernetes 或 OpenShift 集群上运行的结果。该插件允许用户可视化查看管道中所有相关任务的高级别状态。

6.10.1. 对于管理员

6.10.1.1. 安装

先决条件

  • 您已安装并配置了 @backstage/plugin-kubernetes@backstage/plugin-kubernetes-backend 动态插件。有关安装动态插件的详情,请参考 第 6 章 动态插件安装
  • 您已将 Kubernetes 插件配置为使用 ServiceAccount 连接到集群。
  • 对于访问集群的 ServiceAccount,必须为自定义资源(PipelineRuns 和 TaskRuns)授予 ClusterRole

    注意

    如果您配置了 RHDH Kubernetes 插件,则必须授予 ClusterRole

  • 要查看 pod 日志,您已为 pod/log 授予权限。
  • 您可以使用以下代码为自定义资源和 pod 日志授予 ClusterRole

    kubernetes:
       ...
       customResources:
         - group: 'tekton.dev'
           apiVersion: 'v1'
           plural: 'pipelineruns'
         - group: 'tekton.dev'
           apiVersion: 'v1'
    
    
     ...
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRole
      metadata:
        name: backstage-read-only
      rules:
        - apiGroups:
            - ""
          resources:
            - pods/log
          verbs:
            - get
            - list
            - watch
        ...
        - apiGroups:
            - tekton.dev
          resources:
            - pipelineruns
            - taskruns
          verbs:
            - get
            - list

    您可以将准备的清单用于只读 ClusterRole,它为 Kubernetes 插件和 Tekton 插件提供访问权限。

  • 在实体的 catalog-info.yaml 文件中添加以下注解,以识别实体是否包含 Kubernetes 资源:

    annotations:
      ...
    
      backstage.io/kubernetes-id: <BACKSTAGE_ENTITY_NAME>
  • 您还可以添加 backstage.io/kubernetes-namespace 注解来使用定义的命名空间标识 Kubernetes 资源。

    annotations:
      ...
    
      backstage.io/kubernetes-namespace: <RESOURCE_NS>
  • 将以下注解添加到实体的 catalog-info.yaml 文件中,以便在 RHDH 中启用 Tekton 相关功能。注解值标识 RHDH 实体的名称:

    annotations:
      ...
    
      janus-idp.io/tekton : <BACKSTAGE_ENTITY_NAME>
  • 添加自定义标签选择器,它 RHDH 用来查找 Kubernetes 资源。标签选择器优先于 ID 注解。

    annotations:
      ...
    
      backstage.io/kubernetes-label-selector: 'app=my-app,component=front-end'
  • 在资源中添加以下标签,以便 Kubernetes 插件从请求的实体获取 Kubernetes 资源:

    labels:
      ...
    
      backstage.io/kubernetes-id: <BACKSTAGE_ENTITY_NAME>
    注意

    使用标签选择器时,资源上必须存在上述标签。

流程

  • Tekton 插件在 RHDH 中预加载,带有基本配置属性。要启用它,将 disabled 属性设置为 false,如下所示:

    global:
      dynamic:
        includes:
          - dynamic-plugins.default.yaml
        plugins:
          - package: ./dynamic-plugins/dist/janus-idp-backstage-plugin-tekton
            disabled: false

6.10.2. 对于用户

6.10.2.1. 在 RHDH 中使用 Tekton 插件

您可以使用 Tekton 前端插件来查看 PipelineRun 资源。

先决条件

流程

  1. 打开 RHDH 应用程序,然后从 Catalog 页面中选择一个组件。
  2. 转至 CI 选项卡。

    CI 选项卡显示与 Kubernetes 集群关联的 PipelineRun 资源列表。列表中包含管道运行详情,如 NAMEVULNERABILITIES、STAT、STATSTATUS STARTEDDURATION

    ci-cd-tab-tekton
  3. 点列表中的 PipelineRun 名称旁的展开行按钮来查看 PipelineRun visualization。管道运行资源包括要完成的任务。当您将鼠标指针悬停在任务卡上时,您可以查看完成该特定任务的步骤。

    ci-cd-tab-tekton

第 7 章 管理模板

模板是由 YAML 文件中定义的不同 UI 字段组成的形式。模板包括 操作,它们是按顺序执行的步骤,并可有条件地执行。

您可以使用模板轻松创建 Red Hat Developer Hub 组件,然后将这些组件发布到不同的位置,如 Red Hat Developer Hub 软件目录或 GitHub 或 GitLab 中的存储库。

7.1. 使用 Template Editor 创建模板

您可以使用 Template Editor 创建模板。

流程

  1. 使用以下选项之一访问 Template Editor:

    模板编辑器
    • 为您的 Red Hat Developer Hub 实例打开 URL https://<rhdh_url>/create/edit
    • 在 Red Hat Developer Hub 控制台的导航菜单中点 Create…​,然后点 overflow 菜单按钮并选择 Template 编辑器
  2. Edit Template Form
  3. 可选:修改模板参数的 YAML 定义。有关这些参数的详情请参考 第 7.2 节 “创建模板作为 YAML 文件”
  4. Name * 字段中,为模板输入一个唯一名称。
  5. Owner 下拉菜单中选择模板的所有者。
  6. 点击 Next
  7. Repository Location 视图中,输入您要发布模板的托管存储库的以下信息:

    1. 从下拉菜单中选择 可用主机。

      注意

      可用主机通过 allowedHosts 字段在 YAML 参数中定义:

      YAML 示例

      # ...
              ui:options:
                allowedHosts:
                  - github.com
      # ...

    2. Owner * 字段中,输入托管存储库所属的机构、用户或项目。
    3. Repository * 字段中,输入托管存储库的名称。
    4. Review
  8. 检查信息准确性,然后点 Create

验证

  1. 单击导航面板中的 Catalog 选项卡。
  2. Kind 下拉菜单中选择 Template
  3. 确认模板显示在现有模板列表中。

7.2. 创建模板作为 YAML 文件

您可以通过将 Template 对象定义为 YAML 文件来创建模板。

Template 对象描述了模板及其元数据。它还包含必要的输入变量以及由 scaffolding 服务执行的操作列表。

模板 对象示例

apiVersion: scaffolder.backstage.io/v1beta3
kind: Template
metadata:
  name: template-name 
1

  title: Example template 
2

  description: An example template for v1beta3 scaffolder. 
3

spec:
  owner: backstage/techdocs-core 
4

  type: service 
5

  parameters: 
6

    - title: Fill in some steps
      required:
        - name
      properties:
        name:
          title: Name
          type: string
          description: Unique name of the component
        owner:
          title: Owner
          type: string
          description: Owner of the component
    - title: Choose a location
      required:
        - repoUrl
      properties:
        repoUrl:
          title: Repository Location
          type: string
  steps: 
7

    - id: fetch-base
      name: Fetch Base
      action: fetch:template
      # ...
  output: 
8

    links:
      - title: Repository 
9

        url: ${{ steps['publish'].output.remoteUrl }}
      - title: Open in catalog 
10

        icon: catalog
        entityRef: ${{ steps['register'].output.entityRef }}
# ...

1
指定模板的名称。
2
指定模板的标题。这是在 Create…​ 视图中的模板标题上可见的标题。
3
指定模板的描述。这是在 Create…​ view 中的模板标题上可见的描述。
4
指定模板的所有权。owner 字段提供有关负责维护或监督系统或机构中模板的信息。在提供的示例中,owner 字段设置为 backstage/busybox-core。这意味着此模板属于 backstage 命名空间中的 zFCP -core 项目。
5
指定组件类型。此必填字段接受任何字符串值,但您的组织应为其建立正确的税款。Red Hat Developer Hub 实例可能会读取此字段,并根据它的值的不同行为。例如,Web 站点 类型组件可能会在特定于 Web 站点的 Red Hat Developer Hub 界面中显示工具。

此字段通常有以下值:

service
后端服务,通常是公开 API。
网站
网站。
程序库
软件库,如 npm 模块或 Java 库。
6
当用户使用 Red Hat Developer Hub 控制台中的模板创建组件时,使用 parameters 部分为用户输入指定参数。每个 参数 子部分由标题和属性定义,创建一个具有该定义的新表单页面。
7
使用 steps 部分指定后端中执行的步骤。这些步骤必须通过使用唯一的步骤 ID、名称和操作来定义。您可以通过访问 URL https://<rhdh_url>/create/actions 来查看 Red Hat Developer Hub 实例上可用的操作。
8
使用 output 部分指定使用模板时创建的输出数据的结构。output 部分(特别是 links 子部分)为用户提供了可用于访问和与从模板创建的组件交互的宝贵引用和 URL。
9
提供与生成组件关联的存储库的引用或 URL。
10
提供允许用户在列出各种组件的目录或目录中打开生成的组件的参考或 URL。

7.3. 将现有模板导入到 Red Hat Developer Hub

您可以使用 Catalog Processor 在 Red Hat Developer Hub 实例中添加现有模板。

先决条件

  • 您已创建了一个目录或仓库,其中包含至少一个模板 YAML 文件。
  • 如果要使用存储在 GitHub 或 GitLab 等存储库中的模板,您必须为您的供应商配置 Red Hat Developer Hub 集成。

流程

  • app-config.yaml 配置文件中,修改 catalog.rules 部分使其包含模板的规则,并将 catalog.locations 部分配置为指向要添加的模板,如下例所示:

    # ...
    catalog:
      rules:
        - allow: [Template] 
    1
    
      locations:
        - type: url 
    2
    
          target: https://<repository_url>/example-template.yaml 
    3
    
    # ...
    1
    要允许新模板添加到目录中,您必须添加一个 Template 规则。
    2
    如果您要从存储库(如 GitHub 或 GitLab)导入模板,请使用 url 类型。
    3
    指定模板的 URL。

验证

  1. 单击导航面板中的 Catalog 选项卡。
  2. Kind 下拉菜单中选择 Template
  3. 确认模板显示在现有模板列表中。

法律通告

Copyright © 2024 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部