9.3. OpenShift를 사용하여 Red Hat Quay 빌더 환경 생성
9.3.1. OpenShift TLS 구성 요소 링크 복사링크가 클립보드에 복사되었습니다!
tls 구성 요소를 사용하면 TLS 구성을 제어할 수 있습니다.
Operator에서 TLS 구성 요소를 관리하는 경우 Red Hat Quay 3.7은 빌더를 지원하지 않습니다.
tls 를 관리되지 않는 ssl.cert 및 ssl.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 준비 링크 복사링크가 클립보드에 복사되었습니다!
- 클러스터 관리자 계정을 사용하여 Red Hat Quay 클러스터에 로그인합니다.
가상 빌더가 실행될 새 프로젝트를 생성합니다(예:
virtual-builders).$ oc new-project virtual-builders이 프로젝트에서 빌드를
실행하는데 사용할ServiceAccount를 생성합니다.$ oc create sa -n virtual-builders quay-builder빌드를 실행할 수 있도록 편집 권한이 생성된 서비스 계정을 제공합니다.
$ oc adm policy -n virtual-builders add-role-to-user edit system:serviceaccount:virtual-builders:quay-builderQuay 빌더
anyuid scc권한을 부여합니다.$ oc adm policy -n virtual-builders add-scc-to-user anyuid -z quay-builder참고이 작업을 수행하려면 클러스터 관리자 권한이 필요합니다. 이는 권한이 없거나 rootless 빌드가 작동하려면 빌더를 Podman 사용자로 실행해야 하므로 필요합니다.
Quay 빌더 서비스 계정의 토큰을 가져옵니다.
OpenShift Container Platform 4.10 또는 이전 버전을 사용하는 경우 다음 명령을 입력합니다.
oc sa get-token -n virtual-builders quay-builderOpenShift Container Platform 4.11 이상을 사용하는 경우 다음 명령을 입력합니다.
$ oc create token quay-builder -n virtual-builders샘플 출력
eyJhbGciOiJSUzI1NiIsImtpZCI6IldfQUJkaDVmb3ltTHZ0dGZMYjhIWnYxZTQzN2dJVEJxcDJscldSdEUtYWsifQ...
빌더 경로를 확인합니다.
$ 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 ....crt 확장자를 사용하여 자체 서명된 SSL 인증서를 생성합니다.
$ oc extract cm/kube-root-ca.crt -n openshift-apiserver ca.crt$ mv ca.crt extra_ca_cert_build_cluster.crt콘솔에서 구성 번들의 시크릿을 찾고 작업
시크릿 편집을 선택하고 적절한 빌더 구성을 추가합니다. 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: 36002 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: 300m8 CONTAINER_CPU_LIMITS: 1G9 CONTAINER_MEMORY_REQUEST: 300m10 CONTAINER_CPU_REQUEST: 1G11 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. 인증서 생성 및 서명 링크 복사링크가 클립보드에 복사되었습니다!
인증 기관을 생성하고 인증서에 서명합니다. 자세한 내용은 인증 기관 생성 및 인증서에 서명을 참조하십시오.
참고-
Quay 레지스트리의 URL에
alt_name을 추가합니다. -
config.yaml에 지정된
BUILDMAN_HOSTNAME의alt_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-
Quay 레지스트리의 URL에
9.3.2.2.2. TLS를 Unmanaged로 설정 링크 복사링크가 클립보드에 복사되었습니다!
Quay Registry yaml에서 kind: tls 를 managed: 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. 임시 보안 생성 링크 복사링크가 클립보드에 복사되었습니다!
CA 인증서의 기본 네임스페이스에 보안을 생성합니다.
$ oc create secret generic -n quay-enterprise temp-crt --from-file extra_ca_cert_build_cluster.crtssl.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에 복사 링크 복사링크가 클립보드에 복사되었습니다!
-
워크로드
시크릿의 콘솔 UI에서 새 보안을 찾습니다. 각 시크릿에 대해 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: Opaquekind: 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다음과 같은 명령을 실행하여 UI에서 Quay 레지스트리 구성 번들의 시크릿을 검색하거나 명령줄을 통해 찾습니다.
$ oc get quayregistries.quay.redhat.com -o jsonpath="{.items[0].spec.configBundleSecret}{'\n'}" -n quay-enterpriseOpenShift 콘솔에서 구성 번들 시크릿의 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저장을 클릭합니다. 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 5d21hQuay 레지스트리가 재구성된 후 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브라우저에서 레지스트리 끝점에 액세스하여 인증서가 적절하게 업데이트되었는지 확인합니다.
Common Name (CN) example-registry-quay-quay-enterprise.apps.docs.quayteam.org Organisation (O) DOCS Organisational Unit (OU) QUAY
9.3.2.3. UI를 사용하여 빌드 트리거 생성 링크 복사링크가 클립보드에 복사되었습니다!
- Quay 리포지토리에 로그인합니다.
-
Create New Repository 를 클릭하고 새 레지스트리(예:
testrepo)를 생성합니다. Repositories (리포지토리) 페이지의 왼쪽 창에서 Builds 탭을 클릭합니다. 또는 해당 URL을 직접 사용합니다. 예를 들면 다음과 같습니다.
https://example-registry-quay-quay-enterprise.apps.docs.quayteam.org/repository/quayadmin/testrepo?tab=builds중요경우에 따라 빌더에 호스트 이름을 확인하는 데 문제가 있을 수 있습니다. 이 문제는 작업 오브젝트에 대해
dnsPolicy가default로 설정되는 것과 관련이 있을 수 있습니다. 현재 이 문제에 대한 해결방법이 없습니다. 이 문제는 향후 Red Hat Quay 버전에서 해결될 예정입니다.-
빌드 트리거 생성
사용자 지정 Git 리포지토리 내보내기를 클릭합니다. Git 리포지토리를 복제하는 데 사용되는 HTTPS 또는 SSH 스타일 URL을 입력한 다음 Continue 를 클릭합니다. 예를 들면 다음과 같습니다.
https://github.com/gabriel-rh/actions_test.git- 분기 또는 태그 이름으로 태그 매니페스트를 확인한 다음 Continue 를 클릭합니다.
-
트리거를 호출할 때 빌드할 Dockerfile의 위치를 입력하고(예:
/Dockerfile) 계속 을 클릭합니다. -
Docker 빌드에 대한 컨텍스트 위치(예:
/)를 입력하고 Continue 를 클릭합니다. - 필요한 경우 WebSocket 계정을 만듭니다. 그렇지 않으면 Continue 를 클릭합니다.
- Continue 를 클릭하여 매개 변수를 확인합니다.
- 빌드 페이지에서 트리거 이름의 옵션 아이콘을 클릭한 다음 지금 트리거 실행을 클릭합니다.
- Git 리포지토리에서 커밋 SHA를 입력하고 Start Build 를 클릭합니다.
빌드 기록 페이지에서 커밋을 클릭하거나
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.빌드가 완료되면 왼쪽 창에서 태그 아래에 있는 태그의 상태를 확인할 수 있습니다.
참고초기 액세스 권한을 사용하면 현재 전체 빌드 로그 및 빌드 타임 스탬프를 사용할 수 없습니다.
9.3.2.4. AWS S3 스토리지 버킷 수정 링크 복사링크가 클립보드에 복사되었습니다!
AWS S3 스토리지를 사용하는 경우 빌더를 실행하기 전에 AWS 콘솔에서 스토리지 버킷을 수정해야 합니다.
- s3.console.aws.com 에서 AWS 콘솔에 로그인합니다.
-
검색 창에서 S3 을 검색한 다음
S3을 클릭합니다. -
버킷 이름을 클릭합니다(예:
myawsbucket). - 권한 탭을 클릭합니다.
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 } ]