$ oc tag --source=docker registry.redhat.io/ubi9/ubi:latest ubi9:latest -n openshift
使用以下部分在OpenShift Container Platform构建中安装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在
|
要在单个项目中创建ImageStreamTag
资源,请输入以下命令
$ oc tag --source=docker registry.redhat.io/ubi9/ubi:latest ubi:latest
或者,您可以应用以下YAML在单个项目中创建
|
使用Red Hat订阅安装内容的构建必须包含授权密钥作为构建密钥。
您必须通过您的订阅访问Red Hat Enterprise Linux (RHEL)软件包存储库。当您的集群已订阅时,Insights Operator会自动创建访问这些存储库的授权密钥。
您必须以具有cluster-admin
角色的用户身份访问集群,或者您有权访问openshift-config-managed
项目中的密钥。
通过输入以下命令,将授权密钥从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 -
在构建配置的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
Docker策略构建可以使用yum
或dnf
安装额外的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 | 在执行任何yum 或dnf 命令之前,必须在Dockerfile中包含删除/etc/rhsm-host 目录及其所有内容的命令。 |
2 | 使用Red Hat软件包浏览器查找已安装软件包的正确存储库。 |
3 | 必须恢复/etc/rhsm-host 符号链接,以保持您的镜像与其他Red Hat容器镜像兼容。 |
使用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
通过输入以下命令创建包含Satellite存储库配置文件的ConfigMap
对象
$ oc create configmap yum-repos-d --from-file /path/to/satellite.repo
将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
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 | 在执行任何yum 或dnf 命令之前,必须在Dockerfile中包含删除/etc/rhsm-host 目录及其所有内容的命令。 |
2 | 请联系您的Satellite系统管理员,以查找构建已安装软件包的正确存储库。 |
3 | 必须恢复/etc/rhsm-host 符号链接,以保持您的镜像与其他Red Hat容器镜像兼容。 |
您可以使用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),以便您可以发现 |
使用oc apply
创建具有集群授权密钥的SharedSecret
对象实例。
您必须具有集群管理员权限才能创建 |
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
创建一个角色以授予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
通过运行以下命令创建RoleBinding
对象,该对象授予builder
服务帐户访问SharedSecret
对象的权限
oc create rolebinding
命令$ oc create rolebinding builder-etc-pki-entitlement --role=builder-etc-pki-entitlement --serviceaccount=build-namespace:builder
通过使用CSI卷挂载将授权密钥添加到您的BuildConfig
对象
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 | 在执行任何yum 或dnf 命令之前,必须在Dockerfile中包含删除/etc/rhsm-host 目录及其所有内容的命令。 |
2 | 使用Red Hat软件包浏览器查找已安装软件包的正确存储库。 |
3 | 必须恢复/etc/rhsm-host 符号链接,以保持您的镜像与其他Red Hat容器镜像兼容。 |
4 | 必须将readOnly 设置为true 才能在构建中挂载共享资源。 |
5 | 引用SharedSecret 对象的名称以将其包含在构建中。 |
从BuildConfig
对象启动构建,并使用oc
命令跟踪日志。
$ oc start-build uid-wrapper-rhel9 -n build-namespace -F