×

为Red Hat通用基础镜像创建镜像流标签

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

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

镜像流标签使用安装拉取密钥中存在的registry.redhat.io凭据授予对UBI的访问权限,而不会将拉取密钥暴露给其他用户。此方法比要求每个开发人员在每个项目中安装带有registry.redhat.io凭据的拉取密钥更方便。

步骤
  • 要创建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

将订阅授权作为构建密钥添加

使用Red Hat订阅安装内容的构建必须包含授权密钥作为构建密钥。

先决条件
  • 您必须通过您的订阅访问Red Hat Enterprise Linux (RHEL)软件包存储库。当您的集群已订阅时,Insights Operator会自动创建访问这些存储库的授权密钥。

  • 您必须以具有cluster-admin角色的用户身份访问集群,或者您有权访问openshift-config-managed项目中的密钥。

步骤
  1. 通过输入以下命令,将授权密钥从openshift-config-managed命名空间复制到构建的命名空间

    $ 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密钥作为构建卷

    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

使用Subscription Manager运行构建

使用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命令之前,必须在Dockerfile中包含删除/etc/rhsm-host目录及其所有内容的命令。
    2 使用Red Hat软件包浏览器查找已安装软件包的正确存储库。
    3 必须恢复/etc/rhsm-host符号链接,以保持您的镜像与其他Red Hat容器镜像兼容。

使用Red Hat Satellite订阅运行构建

向构建添加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

使用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命令之前,必须在Dockerfile中包含删除/etc/rhsm-host目录及其所有内容的命令。
    2 请联系您的Satellite系统管理员,以查找构建已安装软件包的正确存储库。
    3 必须恢复/etc/rhsm-host符号链接,以保持您的镜像与其他Red Hat容器镜像兼容。

使用SharedSecret对象运行构建

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

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

共享资源CSI驱动程序功能现已在Red Hat OpenShift 1.1的构建中普遍可用。此功能现已在OpenShift Container Platform中弃用。要使用此功能,请确保您正在使用Red Hat OpenShift 1.1或更高版本的构建。

先决条件
  • 您已通过使用特性门启用TechPreviewNoUpgrade特性集。有关更多信息,请参见使用特性门启用特性

  • 您必须具有执行以下操作的权限

    • 创建构建配置并启动构建。

    • 通过输入oc get sharedsecrets命令并获取非空列表来发现可用的SharedSecret CR实例。

    • 确定您在命名空间中可用的builder服务帐户是否允许使用给定的SharedSecret CR实例。换句话说,您可以运行oc adm policy who-can use <特定SharedSecret的标识符>来查看您的命名空间中的builder服务帐户是否已列出。

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

步骤
  1. 使用oc apply创建具有集群授权密钥的SharedSecret对象实例。

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

    带有YAML Role对象定义的示例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卷挂载将授权密钥添加到您的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命令之前,必须在Dockerfile中包含删除/etc/rhsm-host目录及其所有内容的命令。
    2 使用Red Hat软件包浏览器查找已安装软件包的正确存储库。
    3 必须恢复/etc/rhsm-host符号链接,以保持您的镜像与其他Red Hat容器镜像兼容。
    4 必须将readOnly设置为true才能在构建中挂载共享资源。
    5 引用SharedSecret对象的名称以将其包含在构建中。
  5. BuildConfig对象启动构建,并使用oc命令跟踪日志。

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