1.10. 빌드에서 Red Hat 서브스크립션 사용

OpenShift Container Platform에서 권한이 있는 빌드를 실행하려면 다음 섹션을 사용합니다.

1.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/ubi7/ubi:latest ubi:latest -n openshift
  • 단일 프로젝트에서 ImageStreamTag를 생성하려면 다음을 입력합니다.

    $ oc tag --source=docker registry.redhat.io/ubi7/ubi:latest ubi:latest

1.10.2. 서브스크립션 자격을 빌드 보안으로 추가

Red Hat 서브스크립션을 사용하여 콘텐츠를 설치하는 빌드에는 자격 키가 빌드 보안으로 포함되어야 합니다.

사전 요구 사항

서브스크립션을 통해 Red Hat 자격에 액세스할 수 있어야 하며 자격에는 별도의 공개 및 개인 키 파일이 있어야 합니다.

프로세스

  1. 자격이 포함된 보안을 생성하여 공개 및 개인 키가 포함된 별도의 파일이 있는지 확인합니다.

    $  oc create secret generic etc-pki-entitlement --from-file /path/to/entitlement/{ID}.pem \
    > --from-file /path/to/entitlement/{ID}-key.pem ...
  2. 빌드 구성에 빌드 입력으로 보안을 추가합니다.

    source:
      secrets:
      - secret:
          name: etc-pki-entitlement
        destinationDir: etc-pki-entitlement

1.10.3. 서브스크립션 관리자를 사용한 빌드 실행

1.10.3.1. 서브스크립션 관리자를 사용하는 Docker 빌드

Docker 전략 빌드에서는 Subscription Manager를 사용하여 서브스크립션 콘텐츠를 설치할 수 있습니다.

사전 요구 사항

자격 키, 서브스크립션 관리자 구성, 서브스크립션 관리자 인증 기관을 빌드 입력으로 추가해야 합니다.

프로세스

다음을 예제 Dockerfile로 사용하여 서브스크립션 관리자를 통해 콘텐츠를 설치합니다.

FROM registry.redhat.io/rhel7:latest
USER root
# Copy entitlements
COPY ./etc-pki-entitlement /etc/pki/entitlement
# Copy subscription manager configurations
COPY ./rhsm-conf /etc/rhsm
COPY ./rhsm-ca /etc/rhsm/ca
# Delete /etc/rhsm-host to use entitlements from the build container
RUN rm /etc/rhsm-host && \
    # Initialize /etc/yum.repos.d/redhat.repo
    # See https://access.redhat.com/solutions/1443553
    yum repolist --disablerepo=* && \
    subscription-manager repos --enable <enabled-repo> && \
    yum -y update && \
    yum -y install <rpms> && \
    # Remove entitlements and Subscription Manager configs
    rm -rf /etc/pki/entitlement && \
    rm -rf /etc/rhsm
# OpenShift requires images to run as non-root by default
USER 1001
ENTRYPOINT ["/bin/bash"]

1.10.4. Red Hat Satellite 서브스크립션을 사용하여 빌드 실행

1.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

프로세스

  1. Satellite 리포지토리 구성 파일이 포함된 ConfigMap을 생성합니다.

    $ oc create configmap yum-repos-d --from-file /path/to/satellite.repo
  2. BuildConfig에 Satellite 리포지토리 구성을 추가합니다.

    source:
        configMaps:
        - configMap:
            name: yum-repos-d
          destinationDir: yum.repos.d

1.10.4.2. Red Hat Satellite 서브스크립션을 사용하는 Docker 빌드

Docker 전략 빌드에서는 Red Hat Satellite 리포지토리를 사용하여 서브스크립션 콘텐츠를 설치할 수 있습니다.

사전 요구 사항

  • 자격 키 및 Satellite 리포지토리 구성을 빌드 입력으로 추가해야 합니다.

프로세스

다음을 예제 Dockerfile로 사용하여 Satellite를 통해 콘텐츠를 설치합니다.

FROM registry.redhat.io/rhel7:latest
USER root
# Copy entitlements
COPY ./etc-pki-entitlement /etc/pki/entitlement
# Copy repository configuration
COPY ./yum.repos.d /etc/yum.repos.d
# Delete /etc/rhsm-host to use entitlements from the build container
RUN sed -i".org" -e "s#^enabled=1#enabled=0#g" /etc/yum/pluginconf.d/subscription-manager.conf 1
#RUN cat /etc/yum/pluginconf.d/subscription-manager.conf
RUN yum clean all
#RUN yum-config-manager
RUN rm /etc/rhsm-host && \
    # yum repository info provided by Satellite
    yum -y update && \
    yum -y install <rpms> && \
    # Remove entitlements
    rm -rf /etc/pki/entitlement
# OpenShift requires images to run as non-root by default
USER 1001
ENTRYPOINT ["/bin/bash"]
1
enabled=1을 사용하여 빌드에 Satellite 구성을 추가하는 데 실패하면 Dockerfile에 RUN sed -i".org" -e "s#^enabled=1#enabled=0#g" /etc/yum/pluginconf.d/subscription-manager.conf를 추가합니다.

1.10.5. Docker 빌드가 포함된 스쿼시 계층

Docker 빌드는 일반적으로 Dockerfile의 각 명령을 나타내는 계층을 생성합니다. imageOptimizationPolicySkipLayers로 설정하면 모든 명령을 기본 이미지 상단의 단일 계층으로 병합합니다.

프로세스

  • imageOptimizationPolicySkipLayers로 설정합니다.

    strategy:
      dockerStrategy:
        imageOptimizationPolicy: SkipLayers

1.10.6. 추가 리소스