×

如果您拥有 Red Hat Enterprise Linux (RHEL) 授权,则可以使用这些授权在您的流水线中构建容器镜像。

在您从简单公共访问 (SCA) 将授权导入到此操作符后,Insight 操作符会自动管理您的授权。此操作符在 `openshift-config-managed` 命名空间中提供名为 `etc-pki-entitlement` 的密钥。

您可以通过以下两种方式之一在您的流水线中使用 Red Hat 授权

  • 手动将密钥复制到流水线的命名空间。如果您只有少量流水线命名空间,此方法最为简单。

  • 使用共享资源容器存储接口 (CSI) 驱动程序操作符自动在命名空间之间共享密钥。

先决条件

  • 您已使用 `oc` 命令行工具登录到您的 OpenShift Container Platform 集群。

  • 您已在 OpenShift Container Platform 集群上启用了 Insights 操作符功能。如果您想使用共享资源 CSI 驱动程序操作符在命名空间之间共享密钥,则还必须启用共享资源 CSI 驱动程序。有关启用功能(包括 Insights 操作符和共享资源 CSI 驱动程序)的信息,请参阅 使用特性门启用特性

    启用 Insights 操作符后,您必须等待一段时间才能确保集群使用此操作符更新所有节点。您可以通过输入以下命令来监控所有节点的状态

    $ oc get nodes -w

    要验证 Insights 操作符是否处于活动状态,请检查 `openshift-insights` 命名空间中 `insights-operator` Pod 是否正在运行,方法是输入以下命令

    $ oc get pods -n openshift-insights
  • 您已配置将 Red Hat 授权导入到 Insights 操作符中。有关导入授权的信息,请参阅 使用 Insights 操作符导入简单内容访问授权

    要验证 Insights 操作符是否已使您的授权可用并处于活动状态,请检查 `openshift-config-managed` 命名空间中是否存在 `etc-pki-entitlement` 密钥,方法是输入以下命令

    $ oc get secret etc-pki-entitlement -n openshift-config-managed

通过手动复制 etc-pki-entitlement 密钥来使用 Red Hat 授权

您可以将 `etc-pki-entitlement` 密钥从 `openshift-config-managed` 命名空间复制到您的流水线的命名空间。然后,您可以配置您的流水线以使用此密钥进行 Buildah 任务。

先决条件
  • 您已在系统上安装了 `jq` 包。此包可在 Red Hat Enterprise Linux (RHEL) 中使用。

步骤
  1. 通过运行以下命令将 `etc-pki-entitlement` 密钥从 `openshift-config-managed` 命名空间复制到您的流水线的命名空间

    $ oc get secret etc-pki-entitlement -n openshift-config-managed -o json | \
      jq 'del(.metadata.resourceVersion)' | jq 'del(.metadata.creationTimestamp)' | \
      jq 'del(.metadata.uid)' | jq 'del(.metadata.namespace)' | \
      oc -n <pipeline_namespace> create -f - (1)
    1 将 `<pipeline_namespace>` 替换为您的流水线的命名空间。
  2. 在您的 Buildah 任务定义中,使用 `openshift-pipelines` 命名空间中提供的 `buildah` 任务,或此任务的副本,并定义 `rhel-entitlement` 工作区,如下例所示。

  3. 在运行 Buildah 任务的任务运行或流水线运行中,将 `etc-pki-entitlement` 密钥分配给 `rhel-entitlement` 工作区,如下例所示。

使用 Red Hat 授权的示例流水线运行定义,包括流水线和任务定义
apiVersion: tekton.dev/v1
kind: PipelineRun
metadata:
  name: buildah-pr-test
spec:
  workspaces:
    - name: shared-workspace
      volumeClaimTemplate:
        spec:
          accessModes:
            - ReadWriteOnce
          resources:
            requests:
              storage: 1Gi
    - name: dockerconfig
      secret:
        secretName: regred
    - name: rhel-entitlement  (1)
      secret:
        secretName: etc-pki-entitlement
  pipelineSpec:
    workspaces:
      - name: shared-workspace
      - name: dockerconfig
      - name: rhel-entitlement  (2)
    tasks:
# ...
      - name: buildah
        taskRef:
          resolver: cluster
          params:
          - name: kind
            value: task
          - name: name
            value: buildah
          - name: namespace
            value: openshift-pipelines
        workspaces:
        - name: source
          workspace: shared-workspace
        - name: dockerconfig
          workspace: dockerconfig
        - name: rhel-entitlement  (3)
          workspace: rhel-entitlement
        params:
        - name: IMAGE
          value: <image_where_you_want_to_push>
1 流水线运行中 `rhel-entitlement` 工作区的定义,将 `etc-pki-entitlement` 密钥分配给工作区
2 流水线定义中 `rhel-entitlement` 工作区的定义
3 任务定义中 `rhel-entitlement` 工作区的定义

使用共享资源 CSI 驱动程序操作符共享密钥来使用 Red Hat 授权

您可以使用共享资源容器存储接口 (CSI) 驱动程序操作符,将 `etc-pki-entitlement` 密钥从 `openshift-config-managed` 命名空间共享到其他命名空间。然后,您可以配置您的流水线以使用此密钥进行 Buildah 任务。

先决条件
  • 您已使用 `oc` 命令行实用程序以具有集群管理员权限的用户身份登录到您的 OpenShift Container Platform 集群。

  • 您已在 OpenShift Container Platform 集群上启用了共享资源 CSI 驱动程序操作符。

步骤
  1. 通过运行以下命令创建用于共享 `etc-pki-entitlement` 密钥的 `SharedSecret` 自定义资源 (CR)

    $ oc apply -f - <<EOF
    apiVersion: sharedresource.openshift.io/v1alpha1
    kind: SharedSecret
    metadata:
      name: shared-rhel-entitlement
    spec:
      secretRef:
        name: etc-pki-entitlement
        namespace: openshift-config-managed
    EOF
  2. 通过运行以下命令创建允许访问共享密钥的 RBAC 角色

    $ oc apply -f - <<EOF
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: shared-resource-rhel-entitlement
      namespace: <pipeline_namespace> (1)
    rules:
      - apiGroups:
          - sharedresource.openshift.io
        resources:
          - sharedsecrets
        resourceNames:
          - shared-rhel-entitlement
        verbs:
          - use
    EOF
    1 将 `<pipeline_namespace>` 替换为您的流水线的命名空间。
  3. 通过运行以下命令将角色分配给 `pipeline` 服务帐户

    $ oc create rolebinding shared-resource-rhel-entitlement --role=shared-shared-resource-rhel-entitlement \
      --serviceaccount=<pipeline-namespace>:pipeline (1)
    1 将 `<pipeline-namespace>` 替换为您的流水线的命名空间。

    如果您更改了 OpenShift Pipelines 的默认服务帐户,或者如果您在流水线运行或任务运行中定义了自定义服务帐户,请将角色分配给此帐户而不是 `pipeline` 帐户。

  4. 在您的 Buildah 任务定义中,使用 `openshift-pipelines` 命名空间中提供的 `buildah` 任务,或此任务的副本,并定义 `rhel-entitlement` 工作区,如下例所示。

  5. 在运行 Buildah 任务的任务运行或流水线运行中,将共享密钥分配给 `rhel-entitlement` 工作区,如下例所示。

使用 Red Hat 授权的示例流水线运行定义,包括流水线和任务定义
apiVersion: tekton.dev/v1
kind: PipelineRun
metadata:
  name: buildah-pr-test-csi
spec:
  workspaces:
    - name: shared-workspace
      volumeClaimTemplate:
        spec:
          accessModes:
          - ReadWriteOnce
          resources:
            requests:
              storage: 1Gi
    - name: dockerconfig
      secret:
        secretName: regred
    - name: rhel-entitlement  (1)
      csi:
        readOnly: true
        driver: csi.sharedresource.openshift.io
        volumeAttributes:
          sharedSecret: shared-rhel-entitlement
  pipelineSpec:
    workspaces:
    - name: shared-workspace
    - name: dockerconfig
    - name: rhel-entitlement  (2)
    tasks:
# ...
    - name: buildah
      taskRef:
        resolver: cluster
        params:
        - name: kind
          value: task
        - name: name
          value: buildah
        - name: namespace
          value: openshift-pipelines
      workspaces:
      - name: source
        workspace: shared-workspace
      - name: dockerconfig
        workspace: dockerconfig
      - name: rhel-entitlement  (3)
        workspace: rhel-entitlement
      params:
      - name: IMAGE
        value: <image_where_you_want_to_push>
1 流水线运行中 `rhel-entitlement` 工作区的定义,将 `shared-rhel-entitlement` CSI 共享密钥分配给工作区
2 流水线定义中 `rhel-entitlement` 工作区的定义
3 任务定义中 `rhel-entitlement` 工作区的定义