$ oc get nodes -w
如果您拥有 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 操作符后,您必须等待一段时间才能确保集群使用此操作符更新所有节点。您可以通过输入以下命令来监控所有节点的状态
要验证 Insights 操作符是否处于活动状态,请检查 `openshift-insights` 命名空间中 `insights-operator` Pod 是否正在运行,方法是输入以下命令
|
您已配置将 Red Hat 授权导入到 Insights 操作符中。有关导入授权的信息,请参阅 使用 Insights 操作符导入简单内容访问授权。
要验证 Insights 操作符是否已使您的授权可用并处于活动状态,请检查 `openshift-config-managed` 命名空间中是否存在 `etc-pki-entitlement` 密钥,方法是输入以下命令
|
您可以将 `etc-pki-entitlement` 密钥从 `openshift-config-managed` 命名空间复制到您的流水线的命名空间。然后,您可以配置您的流水线以使用此密钥进行 Buildah 任务。
您已在系统上安装了 `jq` 包。此包可在 Red Hat Enterprise Linux (RHEL) 中使用。
通过运行以下命令将 `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>` 替换为您的流水线的命名空间。 |
在您的 Buildah 任务定义中,使用 `openshift-pipelines` 命名空间中提供的 `buildah` 任务,或此任务的副本,并定义 `rhel-entitlement` 工作区,如下例所示。
在运行 Buildah 任务的任务运行或流水线运行中,将 `etc-pki-entitlement` 密钥分配给 `rhel-entitlement` 工作区,如下例所示。
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) 驱动程序操作符,将 `etc-pki-entitlement` 密钥从 `openshift-config-managed` 命名空间共享到其他命名空间。然后,您可以配置您的流水线以使用此密钥进行 Buildah 任务。
您已使用 `oc` 命令行实用程序以具有集群管理员权限的用户身份登录到您的 OpenShift Container Platform 集群。
您已在 OpenShift Container Platform 集群上启用了共享资源 CSI 驱动程序操作符。
通过运行以下命令创建用于共享 `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
通过运行以下命令创建允许访问共享密钥的 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>` 替换为您的流水线的命名空间。 |
通过运行以下命令将角色分配给 `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` 帐户。 |
在您的 Buildah 任务定义中,使用 `openshift-pipelines` 命名空间中提供的 `buildah` 任务,或此任务的副本,并定义 `rhel-entitlement` 工作区,如下例所示。
在运行 Buildah 任务的任务运行或流水线运行中,将共享密钥分配给 `rhel-entitlement` 工作区,如下例所示。
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` 工作区的定义 |