2.10. 빌드에서 Red Hat 서브스크립션 사용
OpenShift Container Platform에서 권한이 있는 빌드를 실행하려면 다음 섹션을 사용합니다.
2.10.1. Red Hat Universal Base Image에 대한 이미지 스트림 태그 생성
빌드 내에서 Red Hat 서브스크립션을 사용하려면 UBI(Universal Base Image)를 참조하는 이미지 스트림 태그를 생성합니다.
클러스터의 모든 프로젝트에서 UBI를 사용할 수 있도록 하려면 openshift
네임스페이스에 이미지 스트림 태그를 추가합니다. 또는 UBI를 특정 프로젝트에서 사용할 수 있도록 하려면 해당 프로젝트에 이미지 스트림 태그를 추가합니다.
이미지 스트림 태그를 이러한 방식으로 사용할 때의 이점은 다른 사용자에게 가져오기 보안을 노출하지 않고 설치의 registry.redhat.io
자격 증명에 따라 UBI에 대한 액세스 권한을 부여할 수 있다는 점입니다. 이 방식은 각 개발자에게 각 프로젝트에서 registry.redhat.io
자격 증명을 사용하여 가져오기 보안을 설치하도록 요구하는 방식보다 편리합니다.
프로세스
openshift
네임스페이스에ImageStreamTag
를 생성하려면 모든 프로젝트의 개발자가 다음을 입력하면 됩니다.$ oc tag --source=docker registry.redhat.io/ubi8/ubi:latest ubi:latest -n openshift
작은 정보또는 다음 YAML을 적용하여
openshift
네임스페이스에ImageStreamTag
를 생성할 수 있습니다.apiVersion: image.openshift.io/v1 kind: ImageStream metadata: name: ubi namespace: openshift spec: tags: - from: kind: DockerImage name: registry.redhat.io/ubi8/ubi:latest name: latest referencePolicy: type: Source
단일 프로젝트에서
ImageStreamTag
를 생성하려면 다음을 입력합니다.$ oc tag --source=docker registry.redhat.io/ubi8/ubi:latest ubi:latest
작은 정보다음 YAML을 적용하여 단일 프로젝트에서
ImageStreamTag
를 생성할 수 있습니다.apiVersion: image.openshift.io/v1 kind: ImageStream metadata: name: ubi spec: tags: - from: kind: DockerImage name: registry.redhat.io/ubi8/ubi:latest name: latest referencePolicy: type: Source
2.10.2. 서브스크립션 자격을 빌드 보안으로 추가
Red Hat 서브스크립션을 사용하여 콘텐츠를 설치하는 빌드에는 자격 키가 빌드 보안으로 포함되어야 합니다.
사전 요구 사항
서브스크립션을 통해 Red Hat 인타이틀먼트에 액세스할 수 있어야 합니다. 인타이틀먼트 보안은 Insights Operator에 의해 자동으로 생성됩니다.
RHEL(Red Hat Enterprise Linux) 7을 사용하여 인타이틀먼트 빌드를 수행하는 경우 yum
명령을 실행하기 전에 Dockerfile에 다음 지침이 있어야 합니다.
RUN rm /etc/rhsm-host
절차
빌드 구성의 Docker 전략에 빌드 볼륨으로 etc-pki-entitlement 보안을 추가합니다.
strategy: dockerStrategy: from: kind: ImageStreamTag name: ubi:latest volumes: - name: etc-pki-entitlement mounts: - destinationPath: /etc/pki/entitlement source: type: Secret secret: secretName: etc-pki-entitlement
2.10.3. 서브스크립션 관리자를 사용한 빌드 실행
2.10.3.1. 서브스크립션 관리자를 사용하는 Docker 빌드
Docker 전략 빌드에서는 Subscription Manager를 사용하여 서브스크립션 콘텐츠를 설치할 수 있습니다.
사전 요구 사항
자격 키는 빌드 전략 볼륨으로 추가해야 합니다.
절차
다음을 예제 Dockerfile로 사용하여 서브스크립션 관리자를 통해 콘텐츠를 설치합니다.
FROM registry.redhat.io/ubi8/ubi:latest RUN dnf search kernel-devel --showduplicates && \ dnf install -y kernel-devel
2.10.4. Red Hat Satellite 서브스크립션을 사용하여 빌드 실행
2.10.4.1. 빌드에 Red Hat Satellite 구성 추가
Red Hat Satellite를 사용하여 콘텐츠를 설치하는 빌드에서는 Satellite 리포지토리에서 콘텐츠를 가져오기 위해 적절한 구성을 제공해야 합니다.
사전 요구 사항
Satellite 인스턴스에서 콘텐츠를 다운로드하는
yum
호환 리포지토리 구성 파일을 제공하거나 생성해야 합니다.리포지터리 구성 샘플
[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: ubi: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 리포지토리 구성을 빌드 볼륨으로 추가했습니다.
절차
다음을 예제 Dockerfile로 사용하여 Satellite를 통해 콘텐츠를 설치합니다.
FROM registry.redhat.io/ubi8/ubi:latest RUN dnf search kernel-devel --showduplicates && \ dnf install -y kernel-devel
2.10.5. SharedSecret 오브젝트를 사용하여 권한이 있는 빌드 실행
다른 네임스페이스의 Secret
오브젝트에서 RHEL 인타이틀먼트를 안전하게 사용하는 하나의 네임스페이스에서 빌드를 구성하고 수행할 수 있습니다.
Build
오브젝트와 동일한 네임스페이스에서 서브스크립션 자격 증명으로 Secret
오브젝트를 생성하여 OpenShift 빌드의 RHEL 인타이틀먼트에 계속 액세스할 수 있습니다. 그러나 OpenShift Container Platform 4.10 이상에서는 OpenShift Container Platform 시스템 네임스페이스 중 하나에서 Secret
오브젝트에서 인증 정보 및 인증서에 액세스할 수 있습니다. Secret
오브젝트를 참조하는 SharedSecret
CR(사용자 정의 리소스) 인스턴스의 CSI 볼륨 마운트를 사용하여 권한이 있는 빌드를 실행합니다.
이 절차에서는 OpenShift Container Platform 빌드에서 CSI 볼륨 마운트를 선언하는 데 사용할 수 있는 새로 도입된 Shared Resources CSI Driver 기능을 사용합니다. 또한 OpenShift Container Platform Insights Operator를 사용합니다.
Shared Resources CSI Driver 및 Build CSI Volumes는 두 가지 기술 프리뷰 기능으로, Red Hat 제품 SLA(서비스 수준 계약)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
Shared Resources CSI Driver 및 Build CSI Volumes 기능은 현재 기술 프리뷰 기능의 하위 집합인 TechPreviewNoUpgrade
기능 세트에도 속합니다. 테스트 클러스터에서 TechPreviewNoUpgrade
기능 세트를 활성화하면 프로덕션 클러스터에서 기능을 비활성화한 상태에서 완전히 테스트할 수 있습니다. 이 기능 세트를 활성화하면 실행 취소할 수 없으며 마이너 버전 업데이트를 방지할 수 있습니다. 이 기능 세트는 프로덕션 클러스터에서는 권장되지 않습니다. 다음 "추가 리소스" 섹션의 "기능 게이트를 사용하여 기술 프리뷰 기능 활성화"를 참조하십시오.
사전 요구 사항
-
기능 게이트를 사용하여 설정된
TechPreviewNoUpgrade
기능을 활성화했습니다. -
Insights Operator가 서브스크립션 인증 정보를 저장하는
Secret
오브젝트를 참조하는SharedSecret
CR(사용자 정의 리소스) 인스턴스가 있습니다. 다음 작업을 수행할 수 있는 권한이 있어야 합니다.
- 빌드 구성을 생성하고 빌드를 시작합니다.
-
oc get sharedsecrets
명령을 입력하고 비어 있지 않은 목록을 다시 가져와서 사용할 수 있는SharedSecret
CR 인스턴스를 검색합니다. -
네임스페이스에서 사용할 수 있는
빌더
서비스 계정이 지정된SharedSecret
CR 인스턴스를 사용할 수 있는지 확인합니다. 즉,특정 SharedSecret>을 사용할 수 있는 oc adm policy를 실행하여 네임스페이스의
확인할 수 있습니다.빌더
서비스 계정이 나열되는지
이 목록에 있는 마지막 두 사전 요구 사항이 모두 충족, 설정 또는 설정하도록 사용자에게 필요한 역할 기반 액세스 제어(RBAC)를 요청하여 SharedSecret
CR 인스턴스를 검색하고 서비스 계정이 SharedSecret
CR 인스턴스를 사용할 수 있도록 합니다.
절차
YAML 콘텐츠와 함께
oc apply
를 사용하여SharedSecret
CR 인스턴스를 사용하도록빌더
서비스 계정 RBAC 권한을 부여합니다.참고현재
kubectl
및oc
는 Pod 보안을 중심으로 하는 역할에use
동사를 제한하는 특수 케이스 논리를 하드 코딩했습니다. 따라서oc create role …
을 사용하여SharedSecret
CR 인스턴스를 사용하는 데 필요한 역할을 생성할 수 없습니다.YAML
Role
오브젝트 정의를 사용하는oc apply -f
명령의 예$ oc apply -f - <<EOF apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: shared-resource-my-share namespace: my-namespace rules: - apiGroups: - sharedresource.openshift.io resources: - sharedsecrets resourceNames: - my-share verbs: - use EOF
oc
명령을 사용하여 역할과 연결된RoleBinding
을 만듭니다.oc create rolebinding
명령 예$ oc create rolebinding shared-resource-my-share --role=shared-resource-my-share --serviceaccount=my-namespace:builder
RHEL 인타이틀먼트에 액세스하는
BuildConfig
오브젝트를 생성합니다.YAML
BuildConfig
오브젝트 정의 예apiVersion: build.openshift.io/v1 kind: BuildConfig metadata: name: my-csi-bc namespace: my-csi-app-namespace spec: runPolicy: Serial source: dockerfile: | FROM registry.redhat.io/ubi8/ubi:latest RUN ls -la /etc/pki/entitlement RUN rm /etc/rhsm-host RUN yum repolist --disablerepo=* RUN subscription-manager repos --enable rhocp-4.9-for-rhel-8-x86_64-rpms RUN yum -y update RUN yum install -y openshift-clients.x86_64 strategy: type: Docker dockerStrategy: volumes: - mounts: - destinationPath: "/etc/pki/entitlement" name: my-csi-shared-secret source: csi: driver: csi.sharedresource.openshift.io readOnly: true volumeAttributes: sharedSecret: my-share-bc type: CSI
BuildConfig
오브젝트에서 빌드를 시작하고oc
명령으로 로그를 따릅니다.oc start-build 명령 예
$ oc start-build my-csi-bc -F
예 2.1. oc start-build 명령의 출력 예
참고다음 출력의 일부 섹션이
…
로 교체되었습니다.build.build.openshift.io/my-csi-bc-1 started Caching blobs under "/var/cache/blobs". Pulling image registry.redhat.io/ubi8/ubi:latest ... Trying to pull registry.redhat.io/ubi8/ubi:latest... Getting image source signatures Copying blob sha256:5dcbdc60ea6b60326f98e2b49d6ebcb7771df4b70c6297ddf2d7dede6692df6e Copying blob sha256:8671113e1c57d3106acaef2383f9bbfe1c45a26eacb03ec82786a494e15956c3 Copying config sha256:b81e86a2cb9a001916dc4697d7ed4777a60f757f0b8dcc2c4d8df42f2f7edb3a Writing manifest to image destination Storing signatures Adding transient rw bind mount for /run/secrets/rhsm STEP 1/9: FROM registry.redhat.io/ubi8/ubi:latest STEP 2/9: RUN ls -la /etc/pki/entitlement total 360 drwxrwxrwt. 2 root root 80 Feb 3 20:28 . drwxr-xr-x. 10 root root 154 Jan 27 15:53 .. -rw-r--r--. 1 root root 3243 Feb 3 20:28 entitlement-key.pem -rw-r--r--. 1 root root 362540 Feb 3 20:28 entitlement.pem time="2022-02-03T20:28:32Z" level=warning msg="Adding metacopy option, configured globally" --> 1ef7c6d8c1a STEP 3/9: RUN rm /etc/rhsm-host time="2022-02-03T20:28:33Z" level=warning msg="Adding metacopy option, configured globally" --> b1c61f88b39 STEP 4/9: RUN yum repolist --disablerepo=* Updating Subscription Management repositories. ... --> b067f1d63eb STEP 5/9: RUN subscription-manager repos --enable rhocp-4.9-for-rhel-8-x86_64-rpms Repository 'rhocp-4.9-for-rhel-8-x86_64-rpms' is enabled for this system. time="2022-02-03T20:28:40Z" level=warning msg="Adding metacopy option, configured globally" --> 03927607ebd STEP 6/9: RUN yum -y update Updating Subscription Management repositories. ... Upgraded: systemd-239-51.el8_5.3.x86_64 systemd-libs-239-51.el8_5.3.x86_64 systemd-pam-239-51.el8_5.3.x86_64 Installed: diffutils-3.6-6.el8.x86_64 libxkbcommon-0.9.1-1.el8.x86_64 xkeyboard-config-2.28-1.el8.noarch Complete! time="2022-02-03T20:29:05Z" level=warning msg="Adding metacopy option, configured globally" --> db57e92ff63 STEP 7/9: RUN yum install -y openshift-clients.x86_64 Updating Subscription Management repositories. ... Installed: bash-completion-1:2.7-5.el8.noarch libpkgconf-1.4.2-1.el8.x86_64 openshift-clients-4.9.0-202201211735.p0.g3f16530.assembly.stream.el8.x86_64 pkgconf-1.4.2-1.el8.x86_64 pkgconf-m4-1.4.2-1.el8.noarch pkgconf-pkg-config-1.4.2-1.el8.x86_64 Complete! time="2022-02-03T20:29:19Z" level=warning msg="Adding metacopy option, configured globally" --> 609507b059e STEP 8/9: ENV "OPENSHIFT_BUILD_NAME"="my-csi-bc-1" "OPENSHIFT_BUILD_NAMESPACE"="my-csi-app-namespace" --> cab2da3efc4 STEP 9/9: LABEL "io.openshift.build.name"="my-csi-bc-1" "io.openshift.build.namespace"="my-csi-app-namespace" COMMIT temp.builder.openshift.io/my-csi-app-namespace/my-csi-bc-1:edfe12ca --> 821b582320b Successfully tagged temp.builder.openshift.io/my-csi-app-namespace/my-csi-bc-1:edfe12ca 821b582320b41f1d7bab4001395133f86fa9cc99cc0b2b64c5a53f2b6750db91 Build complete, no image push requested