在 air-gapped 环境中安装 Red Hat Developer Hub


Red Hat Developer Hub 1.7

使用 Operator 或 Helm Chart 在 networik restricted 环境中运行 Red Hat OpenShift Container Platform 上的 Red Hat Developer Hub

Red Hat Customer Content Services

摘要

平台管理员可以配置角色、权限和其他设置,以便其他授权用户使用 Operator 或 Helm Chart 在任何受支持的平台上部署 air-gapped Red Hat Developer Hub (RHDH)实例。

第 1 章 air-gapped 环境

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

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

您可以使用 Red Hat Developer Hub Operator 在完全断开连接或部分断开连接的环境中安装 Red Hat Developer Hub。有关支持的平台列表,请参阅 Red Hat Developer Hub 生命周期页

在没有互联网访问的环境中 - 无论是安全、合规还是操作原因 - 完全断开连接的安装可确保 Red Hat Developer Hub 可在不外部依赖项的情况下可靠地运行。

如果您的网络可以通过堡垒主机访问 registry,您可以使用 helper 脚本将 Operator 相关的镜像镜像到磁盘,并将其传送到 air-gapped 环境,而无需连接到互联网。

先决条件

  • 已安装 Podman 5.3 或更高版本。如需更多信息,请参阅 Podman 安装说明
  • 您已安装了 Skopeo 1.17 或更高版本。
  • 已安装 yq 4.44 或更高版本。
  • 您已安装了 GNU sed 命令行文本编辑器。
  • 已安装 umoci CLI 工具。
  • 您有一个活跃的 oc registry,podman, 或 skopeo 会话到 registry.redhat.io 红帽生态系统目录。如需更多信息,请参阅链接:Red Hat Container Registry Authentication
  • 已安装 opm CLI 工具。如需更多信息 ,请参阅安装 opm CLI
  • 在 OpenShift Container Platform 中推荐:已安装了 oc-mirror 工具,其版本与 OpenShift Container Platform 集群的版本对应。
  • 请确定您的系统满足最低要求。请参阅 Red Hat Developer Hub 大小要求

流程

  1. 运行以下命令,将镜像脚本下载到磁盘:

    curl -sSLO https://raw.githubusercontent.com/redhat-developer/rhdh-operator/refs/heads/release-1.7/.rhdh/scripts/prepare-restricted-environment.sh
  2. 使用带有适当选项集的 bash 命令运行镜像脚本:

    bash prepare-restricted-environment.sh
     --filter-versions "1.7"
     --to-dir <my_pulled_image_location>
     [--use-oc-mirror true]

    其中:

    --to-dir <my_pulled_image_location>
    输入您要拉取所有所需镜像的目录的绝对路径,例如 /home/user/rhdh-operator-mirror-dir
    --use-oc-mirror true

    (在 OpenShift Container Platform 上推荐)使用 oc-mirror OpenShift Container Platform CLI 插件来镜像镜像。

    注意

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

  3. 将由 --to-dir 选项指定的目录传送到断开连接的环境中。
  4. 在断开连接的环境中可访问集群和目标镜像 registry 的机器中,使用带有适当选项的 bash 命令运行镜像脚本:

    bash <my_pulled_image_location>/install.sh
        --from-dir <my_pulled_image_location>
        [--to-registry <my.registry.example.com>]
        [--use-oc-mirror true]

    其中:

    <my_pulled_image_location>/install.sh
    输入下载的安装脚本以及它存储在您系统中的目录的路径。
    --from-dir <my_pulled_image_location>
    输入您要拉取所有所需镜像的目录。
    --to-registry
    (可选)输入您要镜像镜像 registry 的目标镜像的 URL。
    --use-oc-mirror true

    OpenShift Container Platform 建议使用 oc-mirror OpenShift Container Platform CLI 插件来镜像镜像。

    重要

    如果使用 oc-mirror 将镜像镜像到磁盘,还必须使用 oc-mirror 从磁盘镜像镜像,因为 oc-mirror 使用的文件夹布局。

    注意

    这个脚本可能需要几分钟时间才能完成,因为它会自动安装 Red Hat Developer Hub Operator。

验证

  • 如果使用 Red Hat OpenShift Container Platform,Red Hat Developer Hub Operator 会在 web 控制台的 Installed Operators 列表中。
  • 如果使用受支持的 Kubernetes 平台,您可以通过在终端中运行以下命令来检查在 rhdh-operator 命名空间中运行的 pod 列表:

    kubectl -n rhdh-operator get pods

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

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

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

您可以使用一个帮助程序脚本来镜像所需的镜像,并提供必要的配置,以确保在安装 Red Hat Developer Hub Operator 并创建 Developer Hub 实例时使用这些镜像。此脚本需要目标镜像 registry。如果集群已在断开连接的网络中操作,则可能有一个目标镜像 registry。如果您还没有目标 registry,如果您有一个 OpenShift Container Platform 集群,您可能需要公开和利用内部集群 registry。

连接到 OpenShift Container Platform 集群时,帮助程序脚本会检测到它,并自动公开集群 registry。如果连接到 Kubernetes 集群,您可以手动指定目标 registry 来镜像镜像。

先决条件

  • 已安装 Podman 5.3 或更高版本。如需更多信息,请参阅 Podman 安装说明
  • 您已安装了 Skopeo 1.17 或更高版本。
  • 已安装 yq 4.44 或更高版本。
  • 您已安装了 GNU sed 命令行文本编辑器。
  • 已安装 umoci CLI 工具。
  • 您有一个活跃的 oc registry,podman, 或 Skopeo 会话到 registry.redhat.io 红帽生态系统目录。如需更多信息,请参阅链接:Red Hat Container Registry Authentication
  • 您有一个活跃的 Skopeo 会话,其中包含对目标镜像 registry 的管理访问权限。如需更多信息,请参阅验证到 registry
  • 已安装 opm CLI 工具。如需更多信息 ,请参阅安装 opm CLI
  • 如果使用 OpenShift Container Platform 集群,则满足以下先决条件:

    • 建议:已安装了 oc-mirror 工具,其版本与 OpenShift Container Platform 集群的版本对应。
  • 如果使用受支持的 Kubernetes 集群,则满足以下先决条件:

    • 您已在断开连接的集群上安装了 Operator Lifecycle Manager (OLM)。
    • 您有一个可从断开连接的集群访问的镜像 registry。
  • 请确定您的系统满足最低要求。请参阅 Red Hat Developer Hub 大小要求

流程

  1. 在终端中,进入要保存镜像脚本的目录。
  2. 运行以下命令来下载镜像脚本:

    curl -sSLO https://raw.githubusercontent.com/redhat-developer/rhdh-operator/refs/heads/release-1.7/.rhdh/scripts/prepare-restricted-environment.sh
  3. 使用带有适当选项集的 bash 命令运行镜像脚本:

    bash prepare-restricted-environment.sh \
     --filter-versions "1.7" \
      [--to-registry <my.registry.example.com>] \
      [--use-oc-mirror true]

    其中:

    --to-registry _<my.registry.example.com>
    输入您要镜像镜像 registry 的目标镜像的 URL。
    --use-oc-mirror true

    可选: 使用 oc-mirror OpenShift Container Platform CLI 插件来镜像镜像。

    注意

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

验证

  • 如果使用 Red Hat OpenShift Container Platform,Red Hat Developer Hub Operator 会在 web 控制台的 Installed Operators 列表中。
  • 如果使用受支持的 Kubernetes 平台,您可以通过在终端中运行以下命令来检查在 rhdh-operator 命名空间中运行的 pod 列表:

    kubectl -n rhdh-operator get pods

您可以使用 Red Hat Developer Hub Helm Chart 在完全断开连接或部分断开连接的环境中安装 Red Hat Developer Hub。

如果您的网络可以通过堡垒主机访问 registry,您可以通过 Helm chart 将指定资源镜像到磁盘来安装 Red Hat Developer Hub,并将其传送到 air-gapped 环境,而无需连接到互联网。

先决条件

流程

  1. 创建 ImageSetConfiguration 文件,以指定您要镜像的资源。例如:

    apiVersion: mirror.openshift.io/v2alpha1
    kind: ImageSetConfiguration
    mirror:
      helm:
        repositories:
          - name: openshift-charts
            url: https://charts.openshift.io
            charts:
              - name: redhat-developer-hub
                version: "1.7"

    其中:

    Version: "1.7"
    输入要镜像的 Red Hat Developer Hub 版本。
  2. 运行 oc-mirror 命令,对 ImageSetConfiguration.yaml 文件中指定的资源进行镜像(mirror)。例如:

    oc mirror --v2 -c <mirror_config_directory>/ImageSetConfiguration.yaml file://<mirror_archive_directory>/

    其中:

    <mirror_config_directory>
    输入您系统上镜像设置配置文件的位置,如 .user
    <mirror_archive_directory>
    输入创建镜像存档的目录位置,如 file://.user
    注意

    运行 oc-mirror 命令会生成一个本地工作区,其中包含镜像归档文件、Helm chart、ImageDigestMirrorSet (IDMS)和 ImageTagMirrorSet (ITMS)清单。IDMS 和 ITMS 清单包含您必须在后续步骤中针对集群应用的文件。

    输出示例:

    Creating archive /path/to/mirror-archive/mirror_seq1_000000.tar
  3. 将生成的存档文件(例如,mirror_seq1_000000.tar)传送到 air-gapped 环境。
  4. 连接到您的 air-gapped 环境,并确保您也连接到以下对象:

    • 本地目标 registry
    • 目标 OpenShift Container Platform 集群
  5. 在 air-gapped 环境中,通过运行 oc-mirror 命令将资源从存档镜像到目标 registry。例如:

    oc mirror --v2 -c <image-set-config> --from file://<mirror-archive-directory> docker://<target-registry>

    其中:

    <mirror_archive_file>
    输入包含您要镜像资源的文件名称,例如mirror_seq1_0000.tar
    <target_registry>
    输入您要将镜像推送到的目标 registry 的名称,如 docker://registry.localhost:5000
  6. 在您的工作区中,运行以下命令来查找 IDMS 和 ITMS 文件。例如:

    ls <workspace_directory>/working-dir/cluster-resources/

    其中:

    <workspace_directory>
    指定工作区目录的名称,如 oc-mirror-workspace
    <results_directory>
    指定结果目录的名称,例如 results-1738070846
  7. 要镜像 Helm Chart,请通过运行 oc apply 命令在断开连接的集群中部署 IDMS 和 ITMS 文件。例如:

    oc apply -f <workspace_directory>/working-dir/cluster-resources

    其中:

    <workspace-directory>
    输入工作区目录的名称,如 oc-mirror-workspace
    <results-directory>
    输入结果目录的名称,例如 results-1738070846
  8. 在 air-gapped 环境中,通过运行带有 namespaceset 选项的 helm install 命令,将 Helm Chart 部署到您要使用的命名空间中。例如:

    CLUSTER_ROUTER_BASE=$(oc get route console -n openshift-console -o=jsonpath='{.spec.host}' | sed 's/[.]*\.//') helm install <rhdh_instance> <workspace_directory>/working-dir/helm/charts/<archive_file> --namespace <your_namespace> --create-namespace \ --set global.clusterRouterBase="$CLUSTER_ROUTER_BASE"

    其中:

    <rhdh_instance>
    输入 Red Hat Developer Hub 实例的名称,如 my-rhdh-project
    <workspace_directory>
    输入工作区目录的名称,如 oc-mirror-workspace
    <results_directory>
    输入结果目录的名称,例如 results-1738070846
    <archive_file>
    输入包含您要镜像资源的归档文件的名称,例如 redhat-developer-hub-1.4.1.tgz
    <your_namespace>
    输入您要将 Helm Chart 部署到的命名空间,如 my-rhdh-project

如果您的网络可以访问 registry.redhat.io registry 和 charts.openshift.io Helm Chart 仓库,您可以通过将指定资源直接镜像到目标 registry 来在部分断开连接的环境中部署 Red Hat Developer Hub 实例。

先决条件

  • 已安装 Red Hat OpenShift Container Platform 4.16 或更高版本。
  • 您可以访问 charts.openshift.io Helm Chart 仓库。
  • 您可以访问 registry.redhat.io
  • 您可以访问可从断开连接的集群访问的镜像 registry,例如:OpenShift Container Platform 镜像 registry。有关公开 OpenShift Container Platform 镜像 registry 的更多信息,请参阅 公开 registry
  • 已登陆到目标镜像 registry,并有将镜像推送到它的权限。如需更多信息,请参阅配置允许镜像镜像的凭证
  • 已在工作站上安装了 OpenShift CLI (oc)。
  • 建议在 OpenShift Container Platform 中:已安装了 oc-mirror OpenShift CLI (oc)插件 v2。如需更多信息,请参阅安装 oc-mirror OpenShift CLI 插件
  • Red Hat Developer Portal 中有一个帐户。
  • 请确定您的系统满足最低要求。请参阅 Red Hat Developer Hub 大小要求

流程

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

    oc login -u <user> -p <password> https://api.<hostname>:6443
  2. 从断开连接的集群中,登录到您要镜像的镜像 registry,如 OpenShift Container Platform 镜像 registry。
  3. 创建 ImageSetConfiguration.yaml 文件,以指定您要镜像的资源。例如:

    apiVersion: mirror.openshift.io/v2alpha1
    kind: ImageSetConfiguration
    mirror:
      helm:
        repositories:
          - name: openshift-charts
            url: https://charts.openshift.io
            charts:
              - name: redhat-developer-hub
                version: "1.7"
    Version: "1.7"
    输入要镜像的 Red Hat Developer Hub 版本。
  4. 通过运行 oc-mirror 命令,将镜像设置配置文件中指定的资源直接镜像到目标 registry。例如:

    oc-mirror --config=<mirror_config_directory>/ImageSetConfiguration.yaml <target-mirror-registry>

    其中:

    <mirror_config_directory>
    指定系统上镜像设置配置文件的位置,如 .user
    <target_mirror_registry>
    指定目标镜像 registry 的位置和名称,如docker://registry.example:5000
    注意

    运行 oc-mirror 命令会创建一个包含 Helm Chart 和 ImageContentSourcePolicy (ICSP)清单的本地工作区。ICSP 清单包含一个自动生成的 imageContentSourcePolicy.yaml 文件,您必须在以后的步骤中对集群应用该文件。

  5. 在您的工作区中,通过运行 ls 命令查找 ImageDigestMirrorSet (IDMS)和 ImageTagMirrorSet (ITMS)文件。例如:

    ls <workspace_directory>/working-dir/cluster-resources/

    其中:

    <workspace_directory>
    指定工作区目录的名称,如 oc-mirror-workspace
    <results_directory>
    指定结果目录的名称,例如 results-1738070846
  6. 要配置镜像镜像,请通过运行 oc apply 命令在断开连接的集群中部署 IDMS 和 ITMS 文件。例如:

    oc apply -f <workspace_directory>/working-dir/cluster-resources

    其中:

    <workspace_directory>
    输入工作区目录的名称,如 oc-mirror-workspace
    <results_directory>
    输入结果目录的名称,例如 results-1738070846
  7. 在 air-gapped 环境中,通过运行带有 namespaceset 选项的 helm install 命令,将 Helm Chart 部署到您要使用的命名空间中。例如:

    CLUSTER_ROUTER_BASE=$(oc get route console -n openshift-console -o=jsonpath='{.spec.host}' | sed 's/[.]*\.//')
    
    helm install <rhdh_instance> <workspace_directory>/<results_directory>/charts/<archive_file> --namespace <your_namespace> --create-namespace \
      --set global.clusterRouterBase="$CLUSTER_ROUTER_BASE"

    其中:

    <rhdh_instance>
    指定 Red Hat Developer Hub 实例的名称,如 my-rhdh
    <workspace_directory>
    指定工作区目录的名称,如 oc-mirror-workspace
    <results_directory>
    指定结果目录的名称,例如 results-1738070846
    <archive_file>
    指定包含您要镜像资源的归档文件的名称,如 redhat-developer-hub-1.4.1.tgz
    <your_namespace>
    指定要将 Helm Chart 部署到的命名空间,如 my-rhdh-project

如果您在完全断开连接的或部分断开连接的环境中使用受支持的 Kubernetes 平台,您可以使用 Helm Chart 安装 Red Hat Developer Hub。支持的 Kubernetes 平台包括:

  • Microsoft Azure Kubernetes Service
  • Amazon Elastic Kubernetes Service
  • Google Kubernetes Engine

在没有互联网访问的环境中,完全断开连接的安装可确保 Red Hat Developer Hub 可以在没有外部依赖项的情况下可靠地运行。此方法涉及镜像镜像并将其手动传输到 air-gapped 环境。

先决条件

  • 已安装 Skopeo 1.17 或更高版本
  • 已安装 Yq 4.4 或更高版本
  • 已向 registry.redhat.io 进行身份验证,以使用 skopeo login 命令拉取镜像。
  • 您可以访问配置了 kubectl 的 Kubernetes 集群
  • 您已在 air-gapped 主机上安装了 Helm 3.13 或更高版本

流程

  1. 在终端中,运行以下命令获取 Helm chart 值:

    helm repo add <helm_chart_repo_name> https://charts.openshift.io/
    helm repo update
    helm show values <helm_chart_repo_name>/redhat-developer-hub --version <rhdh_version>  values.default.yaml
    helm pull <helm_chart_repo_name>/redhat-developer-hub --version <rhdh_version>

    其中

    <helm_chart_repo_name>
    指定 Helm Chart 仓库的名称,如 openshift-helm-charts
    <rhdh_version>

    指定您要使用的 Red Hat Developer Hub 版本,如 1.7.3

    注意

    helm pull & lt;helm_chart_repo_name> /redhat-developer-hub -- version <rhdh_version > 命令会自动创建 Helm Chart 归档文件,并将 Helm Chart 下载到当前工作目录。

  2. 运行以下命令来提取镜像摘要:

    RHDH_IMAGE=$(yq '.upstream.backstage.image | .registry + "/" + .repository' values.default.yaml)
    RHDH_DIGEST=$(yq '.upstream.backstage.image.tag' values.default.yaml)
    PG_IMAGE=$(yq '.upstream.postgresql.image | .registry + "/" + .repository' values.default.yaml)
    PG_DIGEST=$(yq '.upstream.postgresql.image.tag' values.default.yaml)
  3. 运行以下命令,将镜像镜像到您的本地归档:

    skopeo login registry.redhat.io
    skopeo copy --all docker://${RHDH_IMAGE}:${RHDH_DIGEST} dir:./rhdh-hub
    skopeo copy --all docker://${PG_IMAGE}:${PG_DIGEST} dir:./postgresql
  4. 将以下文件和目录传送到 air-gapped 环境中:

    • rhdh-hub
    • postgresql
    • Helm Chart 归档文件,如 redhat-developer-hub-1.7.3.tgz
  5. 运行以下命令,将镜像加载到 air-gapped 主机上:

    skopeo copy --all dir:./rhdh-hub docker://<mirror_registry_name>/<rhdh_repo_name>:${RHDH_DIGEST}
    
    skopeo copy --all dir:./postgresql docker://<mirror_registry_name>/<postgresql_repo_name>:${PG_DIGEST}

    其中

    <mirror_registry_name>
    指定要将镜像推送到的目标镜像 registry 的名称,如 registry.example.com
    <rhdh_repo_name>
    指定存储 Red Hat Developer Hub 镜像的存储库的名称,例如 rhdh/rhdh-hub-rhel9。这个值必须与加载到 air-gapped 主机的 Red Hat Developer Hub 镜像的名称匹配。
    <postgresql_repo_name>
    指定存储 PostgreSQL 镜像的存储库的名称,如 rhdh/postgresql-15
  6. 为您要使用的 Kubernetes 平台创建一个 values.yaml 文件,并为该文件添加以下镜像引用以反映本地用途:

    upstream:
      backstage:
        image:
          registry: "<mirror_registry_name>"
          repository: <rhdh_repo_name>
          tag: "${RHDH_DIGEST}"
    
      postgresql:
        image:
          registry: "<mirror_registry_name>"
          repository: <postgresql_repo_name>
          tag: "${PG_DIGEST}"

    其中

    <mirror_registry_name>
    指定要将镜像推送到的目标镜像 registry 的名称,如 registry.example.com
    <rhdh_repo_name>
    指定存储 Red Hat Developer Hub 镜像的存储库的名称,例如 rhdh/rhdh-hub-rhel9。这个值必须与加载到 air-gapped 主机的 Red Hat Developer Hub 镜像的名称匹配。
    <postgresql_repo_name>

    指定存储 PostgreSQL 镜像的存储库的名称,如 rhdh/postgresql-15

    • 对于 AKS,请使用以下 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
    • 对于 EKS,请使用以下 values.yaml 文件模板:

      global:
        # TODO: Set your application domain name.
        host: <my_developer_hub_domain>
      
      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
    • 对于 GKE,请使用以下 values.yaml 文件模板:

      global:
        host: <rhdh_domain_name>
      route:
        enabled: false
      upstream:
        service:
          type: NodePort
        ingress:
          enabled: true
          annotations:
            kubernetes.io/ingress.class: gce
            kubernetes.io/ingress.global-static-ip-name: <ADDRESS_NAME>
            networking.gke.io/managed-certificates: <rhdh_certificate_name>
            networking.gke.io/v1beta1.FrontendConfig: <ingress_security_config>
          className: gce
        backstage:
          image:
            pullSecrets:
            - rhdh-pull-secret
          podSecurityContext:
            fsGroup: 2000
        postgresql:
          image:
            pullSecrets:
            - rhdh-pull-secret
          primary:
            podSecurityContext:
              enabled: true
              fsGroup: 3000
        volumePermissions:
          enabled: true
  7. 运行以下命令,在当前命名空间中安装 Helm Chart:

    helm install rhdh ./<helm_chart_archive_file_name> -f values.yaml

    其中

    <helm_chart_archive_file_name>
    指定 Helm Chart 归档文件的名称,如 redhat-developer-hub-1.4.0.tgz

在部分断开连接的环境中,集群无法访问外部 registry,如 registry.redhat.io,但它可以访问内部镜像 registry。此方法需要直接从集群直接访问内部镜像 registry。

先决条件

  • 您已设置了工作站。

    • 已安装 Skopeo 1.17 或更高版本
    • 已安装 Yq 4.4 或更高版本
    • 已安装 Helm 3.13 或更高版本
    • 您有一个针对 registry.redhat.io 的活跃 Skopeo 会话
    • 您有一个针对目标镜像 registry 的活跃 Skopeo 会话,如 registry.internal.example.com
    • 您可以访问配置了 kubectl 的 Kubernetes 集群

流程

  1. 在终端中,运行以下命令来下载并提取 Helm Chart:

    helm repo add <helm_chart_repo_name> https://charts.openshift.io/
    helm repo update
    helm pull <helm_chart_repo_name>/redhat-developer-hub --version <rhdh_version>
    helm show values <helm_chart_repo_name>/redhat-developer-hub --version <rhdh_version> > values.default.yaml

    其中:

    <helm_chart_repo_name>
    输入 Helm Chart 仓库的名称,如 openshift-helm-charts
    <rhdh_version>
    输入您要使用的 Red Hat Developer Hub 版本,如 1.7.3
  2. 运行以下命令,使用 yq 提取镜像摘要:

    RHDH_IMAGE=$(yq '.upstream.backstage.image | .registry + "/" + .repository' values.default.yaml)
    RHDH_DIGEST=$(yq '.upstream.backstage.image.tag' values.default.yaml)
    PG_IMAGE=$(yq '.upstream.postgresql.image | .registry + "/" + .repository' values.default.yaml)
    PG_DIGEST=$(yq '.upstream.postgresql.image.tag' values.default.yaml)
  3. 输入以下命令将镜像镜像到内部镜像 registry:

    skopeo login registry.redhat.io
    
    skopeo login _<mirror_registry_name>_
    
    skopeo copy --remove-signatures \
      docker://${PG_IMAGE}@${PG_DIGEST} \
      docker://_<mirror_registry_name>_/_<postgresql_repo_name>_:${PG_DIGEST}
    
    skopeo copy --remove-signatures \
      docker://${RHDH_IMAGE}@${RHDH_DIGEST} \
      docker://_<mirror_registry_name>_/_<rhdh_repo_name>_${RHDH_DIGEST}

    其中

    <mirror_registry_name>
    指定内部镜像 registry 的名称,如 registry.internal.example.com
    <postgresql_repo_name>
    指定 PostgreSQL 存储库的名称,如 rhdh/postgresql-15
    <rhdh_repo_name>
    指定 Red Hat Developer Hub 存储库的名称,如 rhdh/rhdh-hub-rhel9
  4. 为您要使用的 Kubernetes 平台创建一个 values.yaml 文件,并为该文件添加以下镜像引用以反映本地用途:

    upstream:
      backstage:
        image:
          registry: "_<mirror_registry_name>_"
          repository: _<rhdh_repo_name>_
          tag: "${RHDH_DIGEST}"
    
      postgresql:
        image:
          registry: "_<mirror_registry_name>_"
          repository: _<postgresql_repo_name>_
          tag: "${PG_DIGEST}"
    • 对于 AKS,请使用以下 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
    • 对于 EKS,请使用以下 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
    • 对于 GKE,请使用以下 values.yaml 文件模板:

      global:
        host: <rhdh_domain_name>
      route:
        enabled: false
      upstream:
        service:
          type: NodePort
        ingress:
          enabled: true
          annotations:
            kubernetes.io/ingress.class: gce
            kubernetes.io/ingress.global-static-ip-name: <ADDRESS_NAME>
            networking.gke.io/managed-certificates: <rhdh_certificate_name>
            networking.gke.io/v1beta1.FrontendConfig: <ingress_security_config>
          className: gce
        backstage:
          image:
            pullSecrets:
            - rhdh-pull-secret
          podSecurityContext:
            fsGroup: 2000
        postgresql:
          image:
            pullSecrets:
            - rhdh-pull-secret
          primary:
            podSecurityContext:
              enabled: true
              fsGroup: 3000
        volumePermissions:
          enabled: true
  5. 运行以下命令,在当前命名空间中安装 Helm Chart:

    helm install rhdh ./_<helm_chart_archive_file_name>_ -f values.yaml

    其中

    <helm_chart_archive_file_name>
    指定 Helm Chart 归档文件的名称,如 redhat-developer-hub-1.7.3.tgz

法律通告

Copyright © 2025 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 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部