9.3. OpenShift를 사용하여 Red Hat Quay 빌더 환경 생성


9.3.1. OpenShift TLS 구성 요소

tls 구성 요소를 사용하면 TLS 구성을 제어할 수 있습니다.

참고

Operator에서 TLS 구성 요소를 관리하는 경우 Red Hat Quay 3.7은 빌더를 지원하지 않습니다.

tls관리되지 않는 ssl.certssl.key 파일을 제공합니다. 이 경우 클러스터가 빌더를 지원하도록 하려면 인증서의 SAN 목록에 Quay 경로와 빌더 경로 이름을 모두 추가하거나 와일드카드를 사용해야 합니다. 빌더 경로를 추가하려면 다음 형식을 사용합니다.

[quayregistry-cr-name]-quay-builder-[ocp-namespace].[ocp-domain-name]:443

9.3.2. Red Hat Quay 빌더에 OpenShift Container Platform 사용

다음 절차에서는 Red Hat Quay에서 빌더 기능을 구현하는 방법을 설명합니다.

사전 요구 사항

  • 빌더에는 SSL 인증서가 필요합니다. 자세한 내용은 Red Hat Quay 컨테이너에 TLS 인증서 추가를 참조하십시오.
  • AWS S3 스토리지를 사용하는 경우 빌더를 실행하기 전에 AWS 콘솔에서 스토리지 버킷을 수정해야 합니다. 필수 매개변수는 다음 섹션의 "AWS S3 스토리지 버킷 수정"을 참조하십시오.
절차
  • 이 절차에서는 클러스터가 이미 프로비저닝되어 Quay Operator가 실행되고 있다고 가정합니다.
  • 다음 절차에서는 OpenShift Container Platform에서 가상 네임스페이스를 설정하는 데 사용됩니다.

9.3.2.1. 가상 빌더를 위한 OpenShift Container Platform 준비

  1. 클러스터 관리자 계정을 사용하여 Red Hat Quay 클러스터에 로그인합니다.
  2. 가상 빌더가 실행될 새 프로젝트를 생성합니다(예: virtual-builders).

    $ oc new-project virtual-builders
  3. 이 프로젝트에서 빌드를 실행하는 데 사용할 ServiceAccount 를 생성합니다.

    $ oc create sa -n virtual-builders quay-builder
  4. 빌드를 실행할 수 있도록 편집 권한이 생성된 서비스 계정을 제공합니다.

    $ oc adm policy -n virtual-builders add-role-to-user edit system:serviceaccount:virtual-builders:quay-builder
  5. Quay 빌더 anyuid scc 권한을 부여합니다.

    $ oc adm policy -n virtual-builders add-scc-to-user anyuid -z quay-builder
    참고

    이 작업을 수행하려면 클러스터 관리자 권한이 필요합니다. 이는 권한이 없거나 rootless 빌드가 작동하려면 빌더를 Podman 사용자로 실행해야 하므로 필요합니다.

  6. Quay 빌더 서비스 계정의 토큰을 가져옵니다.

    1. OpenShift Container Platform 4.10 또는 이전 버전을 사용하는 경우 다음 명령을 입력합니다.

      oc sa get-token -n virtual-builders quay-builder
    2. OpenShift Container Platform 4.11 이상을 사용하는 경우 다음 명령을 입력합니다.

      $ oc create token quay-builder -n virtual-builders

      샘플 출력

      eyJhbGciOiJSUzI1NiIsImtpZCI6IldfQUJkaDVmb3ltTHZ0dGZMYjhIWnYxZTQzN2dJVEJxcDJscldSdEUtYWsifQ...

  7. 빌더 경로를 확인합니다.

    $ oc get route -n quay-enterprise

    샘플 출력

    NAME                                  HOST/PORT                                                                    PATH   SERVICES                              PORT   TERMINATION     WILDCARD
    ...
    example-registry-quay-builder         example-registry-quay-builder-quay-enterprise.apps.docs.quayteam.org                example-registry-quay-app             grpc   edge/Redirect   None
    ...

  8. .crt 확장자를 사용하여 자체 서명된 SSL 인증서를 생성합니다.

    $ oc extract cm/kube-root-ca.crt -n openshift-apiserver ca.crt
    $ mv ca.crt extra_ca_cert_build_cluster.crt
  9. 콘솔에서 구성 번들의 시크릿을 찾고 작업 시크릿 편집을 선택하고 적절한 빌더 구성을 추가합니다.

    FEATURE_USER_INITIALIZE: true
    BROWSER_API_CALLS_XHR_ONLY: false
    SUPER_USERS:
    - <superusername>
    FEATURE_USER_CREATION: false
    FEATURE_QUOTA_MANAGEMENT: true
    FEATURE_BUILD_SUPPORT: True
    BUILDMAN_HOSTNAME: <sample_build_route> 
    1
    
    BUILD_MANAGER:
      - ephemeral
      - ALLOWED_WORKER_COUNT: 1
        ORCHESTRATOR_PREFIX: buildman/production/
        JOB_REGISTRATION_TIMEOUT: 3600 
    2
    
        ORCHESTRATOR:
          REDIS_HOST: <sample_redis_hostname> 
    3
    
          REDIS_PASSWORD: ""
          REDIS_SSL: false
          REDIS_SKIP_KEYSPACE_EVENT_SETUP: false
        EXECUTORS:
          - EXECUTOR: kubernetesPodman
            NAME: openshift
            BUILDER_NAMESPACE: <sample_builder_namespace> 
    4
    
            SETUP_TIME: 180
            MINIMUM_RETRY_THRESHOLD:
            BUILDER_CONTAINER_IMAGE: <sample_builder_container_image> 
    5
    
            # Kubernetes resource options
            K8S_API_SERVER: <sample_k8s_api_server> 
    6
    
            K8S_API_TLS_CA: <sample_crt_file> 
    7
    
            VOLUME_SIZE: 8G
            KUBERNETES_DISTRIBUTION: openshift
            CONTAINER_MEMORY_LIMITS: 300m 
    8
    
            CONTAINER_CPU_LIMITS: 1G 
    9
    
            CONTAINER_MEMORY_REQUEST: 300m 
    10
    
            CONTAINER_CPU_REQUEST: 1G 
    11
    
            NODE_SELECTOR_LABEL_KEY: ""
            NODE_SELECTOR_LABEL_VALUE: ""
            SERVICE_ACCOUNT_NAME: <sample_service_account_name>
            SERVICE_ACCOUNT_TOKEN: <sample_account_token> 
    12
    1
    빌드 경로는 OpenShift Operators 네임스페이스의 이름으로 oc get route -n 을 실행하여 가져옵니다. 예를 들어, 포트는 경로 끝에 제공되어야 하며 [quayregistry-cr-name]-quay-builder-[ocp-namespace].[ocp-domain-name]:443 형식을 따라야 합니다.
    2
    JOB_REGISTRATION_TIMEOUT 매개변수가 너무 낮으면 다음과 같은 오류가 발생할 수 있습니다: failed to register job to build manager:ECDHE error: code = Unauthenticated desc = Invalid build token: signature has expired. 이 매개 변수는 최소 CloudEvent로 설정되는 것이 좋습니다.
    3
    Redis 호스트에 암호 또는 SSL 인증서가 있는 경우 적절하게 업데이트해야 합니다.
    4
    가상 빌더 네임스페이스의 이름과 일치하도록 설정합니다(예: virtual-builders ).
    5
    초기 액세스의 경우 BUILDER_CONTAINER_IMAGE 는 현재 quay.io/projectquay/quay-builder:3.7.0-rc.2 입니다. 초기 액세스 기간 동안 변경될 수 있습니다. 이러한 상황이 발생하면 고객에게 경고를 받을 수 있습니다.
    6
    oc cluster-info 를 실행하여 가져옵니다.
    7
    사용자 정의 CA 인증서를 수동으로 생성하고 추가해야 합니다(예: K8S_API_TLS_CA: /conf/stack/extra_ca_certs/build_cluster.crt ).
    8
    지정되지 않은 경우 기본값은 5120Mi입니다.
    9
    가상 빌드의 경우 클러스터에 리소스가 충분한지 확인해야 합니다. 지정되지 않은 경우 기본값은 1000m입니다.
    10
    지정되지 않은 경우 기본값은 3968Mi입니다.
    11
    지정되지 않은 경우 기본값은 500m입니다.
    12
    oc create sa 를 실행할 때 가져옵니다.

    샘플 구성

    FEATURE_USER_INITIALIZE: true
    BROWSER_API_CALLS_XHR_ONLY: false
    SUPER_USERS:
    - quayadmin
    FEATURE_USER_CREATION: false
    FEATURE_QUOTA_MANAGEMENT: true
    FEATURE_BUILD_SUPPORT: True
    BUILDMAN_HOSTNAME: example-registry-quay-builder-quay-enterprise.apps.docs.quayteam.org:443
    BUILD_MANAGER:
      - ephemeral
      - ALLOWED_WORKER_COUNT: 1
        ORCHESTRATOR_PREFIX: buildman/production/
        JOB_REGISTRATION_TIMEOUT: 3600
        ORCHESTRATOR:
          REDIS_HOST: example-registry-quay-redis
          REDIS_PASSWORD: ""
          REDIS_SSL: false
          REDIS_SKIP_KEYSPACE_EVENT_SETUP: false
        EXECUTORS:
          - EXECUTOR: kubernetesPodman
            NAME: openshift
            BUILDER_NAMESPACE: virtual-builders
            SETUP_TIME: 180
            MINIMUM_RETRY_THRESHOLD:
            BUILDER_CONTAINER_IMAGE: quay.io/projectquay/quay-builder:3.7.0-rc.2
            # Kubernetes resource options
            K8S_API_SERVER: api.docs.quayteam.org:6443
            K8S_API_TLS_CA: /conf/stack/extra_ca_certs/build_cluster.crt
            VOLUME_SIZE: 8G
            KUBERNETES_DISTRIBUTION: openshift
            CONTAINER_MEMORY_LIMITS: 1G
            CONTAINER_CPU_LIMITS: 1080m
            CONTAINER_MEMORY_REQUEST: 1G
            CONTAINER_CPU_REQUEST: 580m
            NODE_SELECTOR_LABEL_KEY: ""
            NODE_SELECTOR_LABEL_VALUE: ""
            SERVICE_ACCOUNT_NAME: quay-builder
            SERVICE_ACCOUNT_TOKEN: "eyJhbGciOiJSUzI1NiIsImtpZCI6IldfQUJkaDVmb3ltTHZ0dGZMYjhIWnYxZTQzN2dJVEJxcDJscldSdEUtYWsifQ"

9.3.2.2. SSL 인증서를 수동으로 추가합니다.

중요
  • 구성 도구의 알려진 문제로 인해 빌더를 올바르게 실행하려면 사용자 정의 SSL 인증서를 수동으로 추가해야 합니다. 사용자 정의 SSL 인증서를 수동으로 추가하려면 다음 절차를 사용하십시오. SSL 인증서를 생성하는 방법에 대한 자세한 내용은 Red Hat Quay 컨테이너에 TLS 인증서 추가를 참조하십시오.
9.3.2.2.1. 인증서 생성 및 서명
  1. 인증 기관을 생성하고 인증서에 서명합니다. 자세한 내용은 인증 기관 생성 및 인증서에 서명을 참조하십시오.

    참고
    • Quay 레지스트리의 URL에 alt_name 을 추가합니다.
    • config.yaml에 지정된 BUILDMAN_HOSTNAMEalt_name 을 추가합니다.

    openssl.cnf

    [req]
    req_extensions = v3_req
    distinguished_name = req_distinguished_name
    [req_distinguished_name]
    [ v3_req ]
    basicConstraints = CA:FALSE
    keyUsage = nonRepudiation, digitalSignature, keyEncipherment
    subjectAltName = @alt_names
    [alt_names]
    DNS.1 = example-registry-quay-quay-enterprise.apps.docs.quayteam.org
    DNS.2 = example-registry-quay-builder-quay-enterprise.apps.docs.quayteam.org

    샘플 명령

    $ openssl genrsa -out rootCA.key 2048
    $ openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem
    $ openssl genrsa -out ssl.key 2048
    $ openssl req -new -key ssl.key -out ssl.csr
    $ openssl x509 -req -in ssl.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out ssl.cert -days 356 -extensions v3_req -extfile openssl.cnf

9.3.2.2.2. TLS를 Unmanaged로 설정

Quay Registry yaml에서 kind: tlsmanaged: false 로 설정합니다.

  - kind: tls
    managed: false

이벤트에서는 적절한 구성을 설정할 때까지 변경 사항이 차단됩니다.

    - lastTransitionTime: '2022-03-28T12:56:49Z'
      lastUpdateTime: '2022-03-28T12:56:49Z'
      message: >-
        required component `tls` marked as unmanaged, but `configBundleSecret`
        is missing necessary fields
      reason: ConfigInvalid
      status: 'True'
9.3.2.2.3. 임시 보안 생성
  1. CA 인증서의 기본 네임스페이스에 보안을 생성합니다.

    $ oc create secret generic -n quay-enterprise temp-crt --from-file extra_ca_cert_build_cluster.crt
  2. ssl.key 및 ssl.cert 파일의 기본 네임스페이스에 보안을 생성합니다.

    $ oc create secret generic -n quay-enterprise quay-config-ssl --from-file ssl.cert --from-file ssl.key
9.3.2.2.4. 시크릿 데이터를 config.yaml에 복사
  1. 워크로드 시크릿의 콘솔 UI에서 새 보안을 찾습니다.
  2. 각 시크릿에 대해 YAML 보기를 찾습니다.

    kind: Secret
    apiVersion: v1
    metadata:
      name: temp-crt
      namespace: quay-enterprise
      uid: a4818adb-8e21-443a-a8db-f334ace9f6d0
      resourceVersion: '9087855'
      creationTimestamp: '2022-03-28T13:05:30Z'
    ...
    data:
      extra_ca_cert_build_cluster.crt: >-
        LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURNakNDQWhxZ0F3SUJBZ0l....
    type: Opaque
    kind: Secret
    apiVersion: v1
    metadata:
      name: quay-config-ssl
      namespace: quay-enterprise
      uid: 4f5ae352-17d8-4e2d-89a2-143a3280783c
      resourceVersion: '9090567'
      creationTimestamp: '2022-03-28T13:10:34Z'
    ...
    data:
      ssl.cert: >-
        LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVaakNDQTA2Z0F3SUJBZ0lVT...
      ssl.key: >-
        LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcFFJQkFBS0NBUUVBc...
    type: Opaque
  3. 다음과 같은 명령을 실행하여 UI에서 Quay 레지스트리 구성 번들의 시크릿을 검색하거나 명령줄을 통해 찾습니다.

    $ oc get quayregistries.quay.redhat.com -o jsonpath="{.items[0].spec.configBundleSecret}{'\n'}"  -n quay-enterprise
  4. OpenShift 콘솔에서 구성 번들 시크릿의 YAML 탭을 선택하고 생성한 두 보안의 데이터를 추가합니다.

    kind: Secret
    apiVersion: v1
    metadata:
      name: init-config-bundle-secret
      namespace: quay-enterprise
      uid: 4724aca5-bff0-406a-9162-ccb1972a27c1
      resourceVersion: '4383160'
      creationTimestamp: '2022-03-22T12:35:59Z'
    ...
    data:
      config.yaml: >-
        RkVBVFVSRV9VU0VSX0lOSVRJQUxJWkU6IHRydWUKQlJ...
      extra_ca_cert_build_cluster.crt: >-
        LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURNakNDQWhxZ0F3SUJBZ0ldw....
      ssl.cert: >-
        LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVaakNDQTA2Z0F3SUJBZ0lVT...
      ssl.key: >-
        LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcFFJQkFBS0NBUUVBc...
    type: Opaque
  5. 저장을 클릭합니다. Pod가 다시 시작되어야 합니다.

    $ oc get pods -n quay-enterprise

    샘플 출력

    NAME                                                   READY   STATUS              RESTARTS   AGE
    ...
    example-registry-quay-app-6786987b99-vgg2v             0/1     ContainerCreating   0          2s
    example-registry-quay-app-7975d4889f-q7tvl             1/1     Running             0          5d21h
    example-registry-quay-app-7975d4889f-zn8bb             1/1     Running             0          5d21h
    example-registry-quay-app-upgrade-lswsn                0/1     Completed           0          6d1h
    example-registry-quay-config-editor-77847fc4f5-nsbbv   0/1     ContainerCreating   0          2s
    example-registry-quay-config-editor-c6c4d9ccd-2mwg2    1/1     Running             0          5d21h
    example-registry-quay-database-66969cd859-n2ssm        1/1     Running             0          6d1h
    example-registry-quay-mirror-764d7b68d9-jmlkk          1/1     Terminating         0          5d21h
    example-registry-quay-mirror-764d7b68d9-jqzwg          1/1     Terminating         0          5d21h
    example-registry-quay-redis-7cc5f6c977-956g8           1/1     Running             0          5d21h

  6. Quay 레지스트리가 재구성된 후 Quay 앱 포드가 실행 중인지 확인합니다.

    $ oc get pods -n quay-enterprise

    샘플 출력

    example-registry-quay-app-6786987b99-sz6kb             1/1     Running            0          7m45s
    example-registry-quay-app-6786987b99-vgg2v             1/1     Running            0          9m1s
    example-registry-quay-app-upgrade-lswsn                0/1     Completed          0          6d1h
    example-registry-quay-config-editor-77847fc4f5-nsbbv   1/1     Running            0          9m1s
    example-registry-quay-database-66969cd859-n2ssm        1/1     Running            0          6d1h
    example-registry-quay-mirror-758fc68ff7-5wxlp          1/1     Running            0          8m29s
    example-registry-quay-mirror-758fc68ff7-lbl82          1/1     Running            0          8m29s
    example-registry-quay-redis-7cc5f6c977-956g8           1/1     Running            0          5d21h

  7. 브라우저에서 레지스트리 끝점에 액세스하여 인증서가 적절하게 업데이트되었는지 확인합니다.

    Common Name (CN)	example-registry-quay-quay-enterprise.apps.docs.quayteam.org
    Organisation (O)	DOCS
    Organisational Unit (OU)	QUAY

9.3.2.3. UI를 사용하여 빌드 트리거 생성

  1. Quay 리포지토리에 로그인합니다.
  2. Create New Repository 를 클릭하고 새 레지스트리(예: testrepo )를 생성합니다.
  3. Repositories (리포지토리) 페이지의 왼쪽 창에서 Builds 탭을 클릭합니다. 또는 해당 URL을 직접 사용합니다. 예를 들면 다음과 같습니다.

    https://example-registry-quay-quay-enterprise.apps.docs.quayteam.org/repository/quayadmin/testrepo?tab=builds
    중요

    경우에 따라 빌더에 호스트 이름을 확인하는 데 문제가 있을 수 있습니다. 이 문제는 작업 오브젝트에 대해 dnsPolicydefault 로 설정되는 것과 관련이 있을 수 있습니다. 현재 이 문제에 대한 해결방법이 없습니다. 이 문제는 향후 Red Hat Quay 버전에서 해결될 예정입니다.

  4. 빌드 트리거 생성 사용자 지정 Git 리포지토리 내보내기를 클릭합니다.
  5. Git 리포지토리를 복제하는 데 사용되는 HTTPS 또는 SSH 스타일 URL을 입력한 다음 Continue 를 클릭합니다. 예를 들면 다음과 같습니다.

    https://github.com/gabriel-rh/actions_test.git
  6. 분기 또는 태그 이름으로 태그 매니페스트를 확인한 다음 Continue 를 클릭합니다.
  7. 트리거를 호출할 때 빌드할 Dockerfile의 위치를 입력하고(예: /Dockerfile ) 계속 을 클릭합니다.
  8. Docker 빌드에 대한 컨텍스트 위치(예: / )를 입력하고 Continue 를 클릭합니다.
  9. 필요한 경우 WebSocket 계정을 만듭니다. 그렇지 않으면 Continue 를 클릭합니다.
  10. Continue 를 클릭하여 매개 변수를 확인합니다.
  11. 빌드 페이지에서 트리거 이름의 옵션 아이콘을 클릭한 다음 지금 트리거 실행을 클릭합니다.
  12. Git 리포지토리에서 커밋 SHA를 입력하고 Start Build 를 클릭합니다.
  13. 빌드 기록 페이지에서 커밋을 클릭하거나 oc get pods -n virtual-builders 를 실행하여 빌드 상태를 확인할 수 있습니다.

     $ oc get pods -n virtual-builders
    NAME                                               READY   STATUS    RESTARTS   AGE
    f192fe4a-c802-4275-bcce-d2031e635126-9l2b5-25lg2   1/1     Running   0          7s
    $ oc get pods -n virtual-builders
    NAME                                               READY   STATUS        RESTARTS   AGE
    f192fe4a-c802-4275-bcce-d2031e635126-9l2b5-25lg2   1/1     Terminating   0          9s
    $ oc get pods -n virtual-builders
    No resources found in virtual-builders namespace.
  14. 빌드가 완료되면 왼쪽 창에서 태그 아래에 있는 태그의 상태를 확인할 수 있습니다.

    참고

    초기 액세스 권한을 사용하면 현재 전체 빌드 로그 및 빌드 타임 스탬프를 사용할 수 없습니다.

9.3.2.4. AWS S3 스토리지 버킷 수정

AWS S3 스토리지를 사용하는 경우 빌더를 실행하기 전에 AWS 콘솔에서 스토리지 버킷을 수정해야 합니다.

  1. s3.console.aws.com 에서 AWS 콘솔에 로그인합니다.
  2. 검색 창에서 S3 을 검색한 다음 S3 을 클릭합니다.
  3. 버킷 이름을 클릭합니다(예: myawsbucket ).
  4. 권한 탭을 클릭합니다.
  5. CORS(Cross-origin resource sharing) 아래에서 다음 매개변수를 포함합니다.

      [
          {
              "AllowedHeaders": [
                  "Authorization"
              ],
              "AllowedMethods": [
                  "GET"
              ],
              "AllowedOrigins": [
                  "*"
              ],
              "ExposeHeaders": [],
              "MaxAgeSeconds": 3000
          },
          {
              "AllowedHeaders": [
                  "Content-Type",
                  "x-amz-acl",
                  "origin"
              ],
              "AllowedMethods": [
                  "PUT"
              ],
              "AllowedOrigins": [
                  "*"
              ],
              "ExposeHeaders": [],
              "MaxAgeSeconds": 3000
          }
      ]
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 문서 정보

Legal Notice

Theme

© 2026 Red Hat
맨 위로 이동