搜索

2.10. 在构建中使用红帽订阅

download PDF

按照以下部分的内容,在 OpenShift Container Platform 构建中安装红帽订阅内容。

2.10.1. 为红帽通用基础镜像创建镜像流标签

要在构建中安装 Red Hat Enterprise Linux (RHEL) 软件包,您可以创建一个镜像流标签来引用 Red Hat Universal Base Image (UBI)。

要让 UBI 在集群中的每个项目中都可用,您需要将镜像流标签添加到 openshift 命名空间中。否则,若要使其在一个特定项目中可用,您要将镜像流标签添加到该项目。

镜像流标签使用安装 pull secret 中的 registry.redhat.io 凭证授予对 UBI 的访问权限,而无需向其他用户公开 pull secret。这个方法要求每个开发人员使用项目中的 registry.redhat.io 凭证安装 pull secret 更为方便。

流程

  • 要在 openshift 命名空间中创建 ImageStreamTag 资源,以便在所有项目中都可以使用它,请输入以下命令:

    $ oc tag --source=docker registry.redhat.io/ubi9/ubi:latest ubi9:latest -n openshift
    提示

    您还可以应用以下 YAML 在 openshift 命名空间中创建 ImageStreamTag 资源:

    apiVersion: image.openshift.io/v1
    kind: ImageStream
    metadata:
      name: ubi9
      namespace: openshift
    spec:
      tags:
      - from:
          kind: DockerImage
          name: registry.redhat.io/ubi9/ubi:latest
        name: latest
        referencePolicy:
          type: Source
  • 要在单个项目中创建 ImageStreamTag 资源,请输入以下命令:

    $ oc tag --source=docker registry.redhat.io/ubi9/ubi:latest ubi:latest
    提示

    您还可以应用以下 YAML 在单个项目中创建 ImageStreamTag 资源:

    apiVersion: image.openshift.io/v1
    kind: ImageStream
    metadata:
      name: ubi9
    spec:
      tags:
      - from:
          kind: DockerImage
          name: registry.redhat.io/ubi9/ubi:latest
        name: latest
        referencePolicy:
          type: Source

2.10.2. 将订阅权利添加为构建 secret

使用红帽订阅安装内容的构建需要包括做为一个构件 secret 的权利密钥。

先决条件

  • 您可以通过您的订阅访问 Red Hat Enterprise Linux (RHEL) 软件包仓库。当集群已正确订阅时,Insights Operator 会自动创建用于访问这些仓库的权利 secret。
  • 您必须可以使用具有 cluster-admin 角色的用户访问集群,或者具有访问 openshift-config-managed 项目中的 secret 的权限。

流程

  1. 输入以下命令将 openshift-config-managed 命名空间中的授权 secret 复制到构建的命名空间:

    $ cat << EOF > secret-template.txt
    kind: Secret
    apiVersion: v1
    metadata:
      name: etc-pki-entitlement
    type: Opaque
    data: {{ range \$key, \$value := .data }}
      {{ \$key }}: {{ \$value }} {{ end }}
    EOF
    $ oc get secret etc-pki-entitlement -n openshift-config-managed -o=go-template-file --template=secret-template.txt | oc apply -f -
  2. 在构建配置的 Docker 策略中将 etc-pki-entitlement secret 添加为构建卷:

    strategy:
      dockerStrategy:
        from:
          kind: ImageStreamTag
          name: ubi9:latest
        volumes:
        - name: etc-pki-entitlement
          mounts:
          - destinationPath: /etc/pki/entitlement
          source:
            type: Secret
            secret:
              secretName: etc-pki-entitlement

2.10.3. 使用 Subscription Manager 运行构建

2.10.3.1. 使用 Subscription Manager 执行 Docker 构建

Docker 策略构建可以使用 yumdnf 安装其他 Red Hat Enterprise Linux (RHEL)软件包。

先决条件

  • 必须将授权密钥添加为构建策略卷。

流程

  • 使用以下示例 Dockerfile 来通过 Subscription Manager 安装内容:

    FROM registry.redhat.io/ubi9/ubi:latest
    RUN rm -rf /etc/rhsm-host 1
    RUN yum --enablerepo=codeready-builder-for-rhel-9-x86_64-rpms install \ 2
        nss_wrapper \
        uid_wrapper -y && \
        yum clean all -y
    RUN ln -s /run/secrets/rhsm /etc/rhsm-host 3
    1
    在执行任何 yumdnf 命令前,您必须包含删除 /etc/rhsm-host 目录及其所有内容的命令。
    2
    使用红帽软件包浏览器查找已安装软件包的正确存储库。
    3
    您需要恢复 /etc/rhsm-host 符号链接,以便使您的镜像与其他红帽容器镜像兼容。

2.10.4. 使用 Red Hat Satellite 订阅运行构建

2.10.4.1. 将 Red Hat Satellite 配置添加到构建中

使用 Red Hat Satellite 安装内容的构建必须提供适当的配置,以便从 Satellite 存储库获取内容。

先决条件

  • 您必须提供或创建与 yum 兼容的存储库配置文件,该文件将从 Satellite 实例下载内容。

    仓库配置示例

    [test-<name>]
    name=test-<number>
    baseurl = https://satellite.../content/dist/rhel/server/7/7Server/x86_64/os
    enabled=1
    gpgcheck=0
    sslverify=0
    sslclientkey = /etc/pki/entitlement/...-key.pem
    sslclientcert = /etc/pki/entitlement/....pem

流程

  1. 输入以下命令来创建包含 Satellite 存储库配置文件的 ConfigMap 对象:

    $ oc create configmap yum-repos-d --from-file /path/to/satellite.repo
  2. 将 Satellite 存储库配置和授权密钥添加为构建卷:

    strategy:
      dockerStrategy:
        from:
          kind: ImageStreamTag
          name: ubi9:latest
        volumes:
        - name: yum-repos-d
          mounts:
          - destinationPath: /etc/yum.repos.d
          source:
            type: ConfigMap
            configMap:
              name: yum-repos-d
        - name: etc-pki-entitlement
          mounts:
          - destinationPath: /etc/pki/entitlement
          source:
            type: Secret
            secret:
              secretName: etc-pki-entitlement

2.10.4.2. 使用 Red Hat Satellite 订阅构建 Docker

Docker 策略构建可以使用 Red Hat Satellite 软件仓库来安装订阅内容。

先决条件

  • 您已将授权密钥和 Satellite 存储库配置添加为构建卷。

流程

  • 使用以下示例为使用 Satellite 安装内容创建 Dockerfile

    FROM registry.redhat.io/ubi9/ubi:latest
    RUN rm -rf /etc/rhsm-host 1
    RUN yum --enablerepo=codeready-builder-for-rhel-9-x86_64-rpms install \ 2
        nss_wrapper \
        uid_wrapper -y && \
        yum clean all -y
    RUN ln -s /run/secrets/rhsm /etc/rhsm-host 3
    1
    在执行任何 yumdnf 命令前,您必须包含删除 /etc/rhsm-host 目录及其所有内容的命令。
    2
    请联系您的 Satellite 系统管理员,以查找构建安装的软件包的正确仓库。
    3
    您需要恢复 /etc/rhsm-host 符号链接,以便使您的镜像与其他红帽容器镜像兼容。

2.10.5. 使用 SharedSecret 对象运行构建

您可以使用 SharedSecret 对象安全地访问构建中的集群的授权密钥。

SharedSecret 对象允许您在命名空间间共享和同步 secret。

重要

共享资源 CSI 驱动程序只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

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

先决条件

  • 已使用功能门启用 TechPreviewNoUpgrade 功能集。如需更多信息,请参阅 使用功能门启用功能
  • 您必须具有执行以下操作的权限:

    • 创建构建配置和启动构建。
    • 输入 oc get sharedsecrets 命令并返回非空列表来发现哪些 SharedSecret CR 实例可用。
    • 确定命名空间中的 builder 服务帐户是否可以使用给定的 SharedSecret CR 实例。换句话说,您可以运行 oc adm policy who-can use <identifier of specific SharedSecret> 来查看是否列出命名空间中的 builder 服务帐户。
注意

如果没有满足此列表中的最后两个先决条件,则建立或询问某人建立所需的基于角色的访问控制(RBAC),以便您可以发现 SharedSecret CR 实例,并启用服务帐户使用 SharedSecret CR 实例。

流程

  1. 使用 oc apply 创建带有集群权利 secret 的 SharedSecret 对象实例。

    重要

    您必须具有集群管理员权限来创建 SharedSecret 对象。

    使用带有 YAML 角色 对象定义的 oc apply -f 命令示例

    $ oc apply -f - <<EOF
    kind: SharedSecret
    apiVersion: sharedresource.openshift.io/v1alpha1
    metadata:
      name: etc-pki-entitlement
    spec:
      secretRef:
        name: etc-pki-entitlement
        namespace: openshift-config-managed
    EOF

  2. 创建一个角色来授予 builder 服务帐户权限来访问 SharedSecret 对象:

    oc apply -f 命令示例

    $ oc apply -f - <<EOF
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: builder-etc-pki-entitlement
      namespace: build-namespace
    rules:
      - apiGroups:
          - sharedresource.openshift.io
        resources:
          - sharedsecrets
        resourceNames:
          - etc-pki-entitlement
        verbs:
          - use
    EOF

  3. 运行以下命令,创建一个 RoleBinding 对象,授予 builder 服务帐户权限来访问 SharedSecret 对象:

    oc create rolebinding 命令示例

    $ oc create rolebinding builder-etc-pki-entitlement --role=builder-etc-pki-entitlement --serviceaccount=build-namespace:builder

  4. 使用 CSI 卷挂载将授权 secret 添加到 BuildConfig 对象中:

    YAML BuildConfig 对象定义示例

    apiVersion: build.openshift.io/v1
    kind: BuildConfig
    metadata:
      name: uid-wrapper-rhel9
      namespace: build-namespace
    spec:
      runPolicy: Serial
      source:
        dockerfile: |
          FROM registry.redhat.io/ubi9/ubi:latest
          RUN rm -rf /etc/rhsm-host 1
          RUN yum --enablerepo=codeready-builder-for-rhel-9-x86_64-rpms install \ 2
              nss_wrapper \
              uid_wrapper -y && \
              yum clean all -y
          RUN ln -s /run/secrets/rhsm /etc/rhsm-host 3
      strategy:
        type: Docker
        dockerStrategy:
          volumes:
            - mounts:
                - destinationPath: "/etc/pki/entitlement"
              name: etc-pki-entitlement
              source:
                csi:
                  driver: csi.sharedresource.openshift.io
                  readOnly: true 4
                  volumeAttributes:
                    sharedSecret: etc-pki-entitlement 5
                type: CSI

    1
    在执行任何 yumdnf 命令前,您必须包含删除 /etc/rhsm-host 目录及其所有内容的命令。
    2
    使用红帽软件包浏览器查找已安装软件包的正确存储库。
    3
    您需要恢复 /etc/rhsm-host 符号链接,以便使您的镜像与其他红帽容器镜像兼容。
    4
    您必须将 readOnly 设置为 true,以便在构建中挂载共享资源。
    5
    引用构建中包含的 SharedSecret 对象的名称。
  5. BuildConfig 对象启动构建,并使用 oc 命令跟踪日志。

    $ oc start-build uid-wrapper-rhel9 -n build-namespace -F

2.10.6. 其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.