OpenShift Container Platform에 Red Hat Quay Operator 배포


Red Hat Quay 3.12

OpenShift Container Platform에 Red Hat Quay Operator 배포

Red Hat OpenShift Documentation Team

초록

OpenShift Container Platform 클러스터에 Red Hat Quay Operator 배포

머리말

Red Hat Quay는 엔터프라이즈급 컨테이너 레지스트리입니다. Red Hat Quay를 사용하여 컨테이너 이미지를 빌드하고 저장한 다음 엔터프라이즈에 배포할 수 있도록 합니다.

Red Hat Quay Operator는 OpenShift 클러스터에 Red Hat Quay를 배포하고 관리하는 간단한 방법을 제공합니다.

Red Hat Quay 3.4.0이 릴리스되면서 개선된 환경을 제공하고 Day 2 작업에 대한 지원을 추가하기 위해 Red Hat Quay Operator가 다시 작성되었습니다. 그 결과 Red Hat Quay Operator를 더 쉽게 사용할 수 있게 되었습니다. Red Hat Quay 3.4.0 이전 버전과의 주요 차이점은 다음과 같습니다.

  • QuayEcosystem 사용자 정의 리소스가 QuayRegistry 사용자 정의 리소스로 교체되었습니다.
  • 기본 설치 옵션은 완전히 지원되는 Red Hat Quay 환경을 생성합니다. 데이터베이스, 캐시, 오브젝트 스토리지 등과 같은 모든 관리 종속 항목은 프로덕션 용도로 지원됩니다.

    참고

    일부 구성 요소는 가용성이 높지 않을 수 있습니다.

  • Red Hat Quay의 구성을 위한 새로운 검증 라이브러리입니다.
  • ObjectBucketClaim Kubernetes API를 사용하여 Red Hat Quay Operator에서 오브젝트 스토리지를 관리할 수 있습니다.

    참고

    Red Hat OpenShift Data Foundation은 OpenShift Container Platform에서 지원되는 API 구현을 제공하는 데 사용할 수 있습니다.

  • 테스트 및 개발 시나리오에 배포된 Pod에서 사용하는 컨테이너 이미지의 사용자 지정

1장. Red Hat Quay Operator 소개

이 장의 콘텐츠를 사용하여 다음을 실행합니다.

  • Red Hat Quay Operator를 사용하여 OpenShift Container Platform에 Red Hat Quay 설치
  • 관리되거나 관리되지 않는 개체 스토리지 구성
  • 데이터베이스, Redis, 경로, TLS 등과 같은 관리되지 않는 구성 요소 구성
  • Red Hat Quay Operator를 사용하여 OpenShift Container Platform에 Red Hat Quay 레지스트리 배포
  • Red Hat Quay에서 지원하는 고급 기능 사용
  • Red Hat Quay Operator를 사용하여 Red Hat Quay 레지스트리 업그레이드

1.1. Red Hat Quay Operator 구성 요소

Red Hat Quay에는 많은 종속 항목이 있습니다. 이러한 종속 항목에는 데이터베이스, 오브젝트 스토리지, Redis 등이 포함됩니다. Red Hat Quay Operator는 Red Hat Quay의 의견 배포와 Kubernetes에 대한 종속성을 관리합니다. 이러한 종속 항목은 구성 요소로 취급되며 QuayRegistry API를 통해 구성됩니다.

QuayRegistry 사용자 정의 리소스에서 spec.components 필드는 구성 요소를 구성합니다. 각 구성 요소에는 kind (구성 요소의 이름) 및 관리 (구성 요소 라이프사이클이 Red Hat Quay Operator에서 처리되는지 여부를 처리하는 부울) 두 개의 필드가 포함되어 있습니다.

기본적으로 모든 구성 요소는 가시성을 위해 조정 시 관리되고 자동으로 채워집니다.

QuayRegistry 리소스의 예

apiVersion: quay.redhat.com/v1
kind: QuayRegistry
metadata:
  name: example-registry
  namespace: quay-enterprise
  spec:
    configBundleSecret: config-bundle-secret
    components:
    - kind: quay
      managed: true
    - kind: postgres
      managed: true
    - kind: clair
      managed: true
    - kind: redis
      managed: true
    - kind: horizontalpodautoscaler
      managed: true
    - kind: objectstorage
      managed: true
    - kind: route
      managed: true
    - kind: mirror
      managed: true
    - kind: monitoring
      managed: true
    - kind: tls
      managed: true
    - kind: clairpostgres
      managed: true
Copy to Clipboard Toggle word wrap

1.2. 관리형 구성 요소 사용

QuayRegistry 사용자 정의 리소스가 달리 지정하지 않는 한 Red Hat Quay Operator는 다음 관리 구성 요소에 기본값을 사용합니다.

  • Quay: OpenShift Container Platform에 Red Hat Quay 배포에 대한 재정의가 있습니다(예: 환경 변수 및 복제본 수). 이 구성 요소는 Red Hat Quay 3.7부터 새로운 구성 요소이며 관리되지 않음으로 설정할 수 없습니다.
  • Postgres: 레지스트리 메타데이터를 저장하기 위해 Red Hat Quay 3.9로 Software Collections 의 PostgreSQL 13 버전을 사용합니다.

    참고

    Red Hat Quay 3.8 → 3.9에서 업그레이드할 때 Operator는 PostgreSQL 10 업그레이드를 자동으로 처리합니다. 이 업그레이드는 필수입니다. PostgreSQL 10은 2022년 11월 10일에 최종 릴리스되었으며 더 이상 지원되지 않습니다.

  • Clair: 이미지 취약점 스캔을 제공합니다.
  • Redis: 라이브 빌더 로그 및 Red Hat Quay 튜토리얼을 저장합니다. 가비지 컬렉션에 필요한 잠금 메커니즘도 포함되어 있습니다.
  • HorizontalPodAutoscaler: 메모리/cpu 소비에 따라 Quay Pod 수를 조정합니다.
  • ObjectStorage: 이미지 계층 Blob을 저장하기 위해 Noobaa 또는 Red Hat OpenShift Data Foundation에서 제공하는 ObjectBucketClaim Kubernetes API를 활용합니다.
  • route: OpenShift Container Platform 외부에서 Red Hat Quay 레지스트리에 외부 진입점을 제공합니다.
  • mirror: 선택적 저장소 미러링을 지원하도록 저장소 미러 작업자를 구성합니다.
  • 모니터링: 기능에는 Grafana 대시보드, 개별 메트릭에 대한 액세스, Quay pod를 자주 다시 시작하는 알림이 포함됩니다.
  • TLS: Red Hat Quay 또는 OpenShift Container Platform에서 SSL/TLS를 처리할지 여부를 구성합니다.
  • clairpostgres: 관리되는 Clair 데이터베이스를 구성합니다. 이는 Red Hat Quay 배포에 사용되는 PostgreSQL 데이터베이스와 별도의 데이터베이스입니다.

Red Hat Quay Operator는 Red Hat Quay에서 관리형 구성 요소를 사용하는 데 필요한 모든 구성 및 설치 작업을 처리합니다. Red Hat Quay Operator에서 수행하는 의견 배포가 환경에 적합하지 않은 경우 다음 섹션에 설명된 대로 Red Hat Quay Operator에 관리되지 않는 리소스를 제공하거나 덮어쓸 수 있습니다.

1.3. 종속성에 관리되지 않는 구성 요소 사용

Red Hat Quay와 함께 사용하려는 PostgreSQL, Redis 또는 오브젝트 스토리지와 같은 기존 구성 요소가 있는 경우 먼저 Red Hat Quay 구성 번들 또는 config.yaml 파일 내에서 구성합니다. 그런 다음 관리되지 않는 구성 요소를 나타내는 동안 QuayRegistry 번들에서 Kubernetes Secret 으로 참조해야 합니다.

참고

관리되지 않는 PostgreSQL 데이터베이스를 사용하고 있고 버전이 PostgreSQL 10인 경우 PostgreSQL 13으로 업그레이드하는 것이 좋습니다. PostgreSQL 10은 2022년 11월 10일에 최종 릴리스되었으며 더 이상 지원되지 않습니다. 자세한 내용은 PostgreSQL 버전 관리 정책을 참조하십시오.

관리되지 않는 구성 요소를 구성하려면 다음 섹션을 참조하십시오.

1.4. 구성 번들 시크릿

spec.configBundleSecret 필드는 QuayRegistry 리소스와 동일한 네임스페이스에 있는 Secretmetadata.name 에 대한 참조입니다. 이 시크릿에config.yaml 키/값 쌍이 포함되어야 합니다.

config.yaml 파일은 Red Hat Quay config.yaml 파일입니다. 이 필드는 선택 사항이며 제공되지 않는 경우 Red Hat Quay Operator에 의해 자동으로 채워집니다. 제공된 경우 나중에 관리형 구성 요소의 다른 필드와 병합되어 최종 출력 Secret 을 형성한 다음 Red Hat Quay 애플리케이션 pod에 마운트되는 기본 구성 필드 세트 역할을 합니다.

1.5. OpenShift Container Platform에서 Red Hat Quay 사전 요구 사항

Red Hat Quay Operator를 사용하여 OpenShift Container Platform에 Red Hat Quay를 배포하기 전에 다음 사전 요구 사항을 고려하십시오.

1.5.1. OpenShift Container Platform 클러스터

Red Hat Quay Operator를 배포하려면 OpenShift Container Platform 4.5 이상의 클러스터가 있어야 하며 관리 계정에 액세스할 수 있어야 합니다. 관리 계정에는 클러스터 범위에서 네임스페이스를 생성할 수 있는 기능이 있어야 합니다.

1.5.2. 리소스 요구 사항

각 Red Hat Quay 애플리케이션 포드에는 다음과 같은 리소스 요구 사항이 있습니다.

  • 8Gi 메모리
  • 2000밀리코어의 CPU

Red Hat Quay Operator는 관리하는 Red Hat Quay 배포마다 하나 이상의 애플리케이션 Pod를 생성합니다. OpenShift Container Platform 클러스터에 이러한 요구 사항에 맞는 충분한 컴퓨팅 리소스가 있는지 확인합니다.

1.5.3. 오브젝트 스토리지

기본적으로 Red Hat Quay Operator는 ObjectBucketClaim Kubernetes API를 사용하여 오브젝트 스토리지를 프로비저닝합니다. 이 API를 사용하면 벤더별 구현에서 Red Hat Quay Operator가 분리됩니다. Red Hat OpenShift Data Foundation은 이 문서 전체에서 예제로 사용되는 NooBaa 구성 요소를 통해 이 API를 제공합니다.

다음을 포함하여 여러 스토리지 클라우드 공급자를 사용하도록 Red Hat Quay를 수동으로 구성할 수 있습니다.

오브젝트 스토리지 공급자의 전체 목록은 Quay Enterprise 3.x 지원 매트릭스입니다.

1.5.4. StorageClass

Red Hat Quay Operator를 사용하여 Quay 및 Clair PostgreSQL 데이터베이스를 배포할 때 기본 StorageClass 는 클러스터에 구성됩니다.

Red Hat Quay Operator에서 사용하는 기본 StorageClassQuayClair 데이터베이스에 필요한 영구 볼륨 클레임을 프로비저닝합니다. 이러한 PVC는 데이터를 영구적으로 저장하는 데 사용되며, Red Hat Quay 레지스트리 및 Clair 취약점 스캐너를 계속 사용할 수 있도록 하고 재시작 또는 실패 시 상태를 유지 관리합니다.

설치를 진행하기 전에 QuayClair 구성 요소에 대한 스토리지를 원활하게 프로비저닝할 수 있도록 기본 StorageClass 가 클러스터에 구성되었는지 확인합니다.

2장. OperatorHub에서 Red Hat Quay Operator 설치

다음 절차에 따라 OpenShift Container Platform OperatorHub에서 Red Hat Quay Operator를 설치합니다.

프로세스

  1. OpenShift Container Platform 콘솔을 사용하여 OperatorOperatorHub 를 선택합니다.
  2. 검색 상자에 Red Hat Quay 를 입력하고 Red Hat에서 제공하는 공식 Red Hat Quay Operator를 선택합니다. 그러면 기능, 사전 요구 사항 및 배포 정보를 간략하게 설명하는 설치 페이지로 이동합니다.
  3. 설치를 선택합니다. 그러면 Operator 설치 페이지로 이동합니다.
  4. 설치를 사용자 정의하는 데 다음 옵션을 사용할 수 있습니다.

    1. 업데이트 채널: 업데이트 채널을 선택합니다(예: 최신 릴리스의 경우 stable-3.12).
    2. 설치 모드:

      1. Red Hat Quay Operator 를 클러스터 전체에서 사용할 수 있도록 하려면 클러스터의 모든 네임스페이스 를 선택합니다. 클러스터 전체에서 Red Hat Quay Operator를 설치하는 것이 좋습니다. 단일 네임스페이스를 선택하면 기본적으로 모니터링 구성 요소를 사용할 수 없습니다.
      2. 단일 네임스페이스 내에서만 배포하려면 클러스터에서 특정 네임스페이스를 선택합니다.

        • 승인 전략: 자동 또는 수동 업데이트를 승인하도록 선택합니다. 자동 업데이트 전략이 권장됩니다.
  5. 설치를 선택합니다.

3장. 배포 전에 Red Hat Quay 구성

Red Hat Quay Operator는 OpenShift Container Platform에 배포할 때 모든 Red Hat Quay 구성 요소를 관리할 수 있습니다. 그러나 이는 기본 구성이지만 설정을 더 많이 제어하려는 경우 외부에서 하나 이상의 구성 요소를 관리할 수 있습니다.

다음 패턴을 사용하여 관리되지 않는 Red Hat Quay 구성 요소를 구성합니다.

프로세스

  1. 적절한 설정으로 config.yaml 구성 파일을 생성합니다. 최소 구성에 대해 다음 참조를 사용합니다.

    $ touch config.yaml
    Copy to Clipboard Toggle word wrap
    AUTHENTICATION_TYPE: Database
    BUILDLOGS_REDIS:
        host: <quay-server.example.com>
        password: <strongpassword>
        port: 6379
        ssl: false
    DATABASE_SECRET_KEY: <0ce4f796-c295-415b-bf9d-b315114704b8>
    DB_URI: <postgresql://quayuser:quaypass@quay-server.example.com:5432/quay>
    DEFAULT_TAG_EXPIRATION: 2w
    DISTRIBUTED_STORAGE_CONFIG:
        default:
            - LocalStorage
            - storage_path: /datastorage/registry
    DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: []
    DISTRIBUTED_STORAGE_PREFERENCE:
        - default
    PREFERRED_URL_SCHEME: http
    SECRET_KEY: <e8f9fe68-1f84-48a8-a05f-02d72e6eccba>
    SERVER_HOSTNAME: <quay-server.example.com>
    SETUP_COMPLETE: true
    TAG_EXPIRATION_OPTIONS:
        - 0s
        - 1d
        - 1w
        - 2w
        - 4w
        - 3y
    USER_EVENTS_REDIS:
        host: <quay-server.example.com>
        port: 6379
        ssl: false
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 입력하여 구성 파일을 사용하여 보안을 생성합니다.

    $ oc create secret generic --from-file config.yaml=./config.yaml config-bundle-secret
    Copy to Clipboard Toggle word wrap
  3. 관리되지 않는 구성 요소를 식별하고 생성된 Secret 을 참조하는 quayregistry.yaml 파일을 생성합니다. 예를 들면 다음과 같습니다.

    QuayRegistry YAML 파일의 예

    apiVersion: quay.redhat.com/v1
    kind: QuayRegistry
    metadata:
      name: example-registry
      namespace: quay-enterprise
    spec:
      configBundleSecret: <config_bundle_secret>
      components:
        - kind: objectstorage
          managed: false
    # ...
    Copy to Clipboard Toggle word wrap

  4. quayregistry.yaml 파일을 사용하여 레지스트리를 배포하려면 다음 명령을 입력합니다.

    $ oc create -n quay-enterprise -f quayregistry.yaml
    Copy to Clipboard Toggle word wrap

3.1. 자동화를 위해 Red Hat Quay 사전 구성

Red Hat Quay는 자동화를 활성화하는 여러 구성 옵션을 지원합니다. 사용자는 사용자 인터페이스와 상호 작용의 필요성을 줄이기 위해 배포 전에 이러한 옵션을 구성할 수 있습니다.

3.1.1. API가 첫 번째 사용자를 생성하도록 허용

첫 번째 사용자를 생성하려면 FEATURE_USER_INITIALIZE 매개변수를 True 로 설정하고 /api/v1/user/initialize API를 호출해야 합니다. 기존 조직의 OAuth 애플리케이션에서 생성한 OAuth 토큰이 필요한 다른 모든 레지스트리 API 호출과 달리 API 끝점에는 인증이 필요하지 않습니다.

사용자는 다른 사용자가 생성되지 않은 경우 Red Hat Quay를 배포한 후 API를 사용하여 quayadmin 과 같은 사용자를 생성할 수 있습니다. 자세한 내용은 API를 사용하여 첫 번째 사용자 만들기를 참조하십시오.

3.1.2. 일반 API 액세스 활성화

Red Hat Quay 레지스트리 API에 대한 일반적인 액세스를 허용하려면 BROWSER_API_CALLS_XHR_ONLY 구성 옵션을 False 로 설정해야 합니다.

3.1.3. 슈퍼유저 추가

Red Hat Quay를 배포한 후 사용자는 사용자를 생성하고 전체 권한으로 첫 번째 사용자 관리자 권한을 부여할 수 있습니다. 사용자는 SUPER_USER 구성 오브젝트를 사용하여 사전에 전체 권한을 구성할 수 있습니다. 예를 들면 다음과 같습니다.

# ...
SERVER_HOSTNAME: quay-server.example.com
SETUP_COMPLETE: true
SUPER_USERS:
  - quayadmin
# ...
Copy to Clipboard Toggle word wrap

3.1.4. 사용자 생성 제한

슈퍼유저를 구성한 후 FEATURE_USER_CREATIONFalse 로 설정하여 슈퍼유저 그룹에 새 사용자를 생성하는 기능을 제한할 수 있습니다. 예를 들면 다음과 같습니다.

# ...
FEATURE_USER_INITIALIZE: true
BROWSER_API_CALLS_XHR_ONLY: false
SUPER_USERS:
- quayadmin
FEATURE_USER_CREATION: false
# ...
Copy to Clipboard Toggle word wrap

3.1.5. Red Hat Quay 3.12에서 새 기능 활성화

새로운 Red Hat Quay 3.12 기능을 사용하려면 다음 기능 중 일부 또는 모두를 활성화합니다.

# ...
FEATURE_UI_V2: true
FEATURE_UI_V2_REPO_SETTINGS: true
FEATURE_AUTO_PRUNE: true
ROBOTS_DISALLOW: false
# ...
Copy to Clipboard Toggle word wrap

3.1.6. 자동화를 위한 제안된 구성

자동화에는 다음 config.yaml 매개변수가 권장됩니다.

# ...
FEATURE_USER_INITIALIZE: true
BROWSER_API_CALLS_XHR_ONLY: false
SUPER_USERS:
- quayadmin
FEATURE_USER_CREATION: false
# ...
Copy to Clipboard Toggle word wrap

3.2. 오브젝트 스토리지 구성

Red Hat Quay Operator가 스토리지를 관리하거나 직접 관리할 수 있는지 여부에 관계없이 Red Hat Quay를 설치하기 전에 오브젝트 스토리지를 구성해야 합니다.

Red Hat Quay Operator가 스토리지 관리를 담당하는 경우 NooBaa 및 Red Hat OpenShift Data Foundations Operator 설치 및 구성에 대한 정보는 관리형 스토리지 의 섹션을 참조하십시오.

별도의 스토리지 솔루션을 사용하는 경우 Operator를 구성할 때 objectstorageUnmanaged 로 설정합니다. 다음 섹션을 참조하십시오. 기존 스토리지 구성에 대한 자세한 내용은 관리되지 않는 스토리지입니다.

3.2.1. 관리되지 않는 스토리지 사용

이 섹션에서는 편의를 위해 관리되지 않는 스토리지에 대한 구성 예제를 제공합니다. 오브젝트 스토리지 설정 방법에 대한 자세한 내용은 Red Hat Quay 구성 가이드를 참조하십시오.

3.2.1.1. AWS S3 스토리지

Red Hat Quay 배포를 위해 AWS S3 스토리지를 구성할 때 다음 예제를 사용합니다.

DISTRIBUTED_STORAGE_CONFIG:
  s3Storage:
    - S3Storage
    - host: s3.us-east-2.amazonaws.com
      s3_access_key: ABCDEFGHIJKLMN
      s3_secret_key: OL3ABCDEFGHIJKLMN
      s3_bucket: quay_bucket
      s3_region: <region>
      storage_path: /datastorage/registry
DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: []
DISTRIBUTED_STORAGE_PREFERENCE:
    - s3Storage
Copy to Clipboard Toggle word wrap
3.2.1.2. Google Cloud 스토리지

Red Hat Quay 배포를 위해 Google Cloud 스토리지를 구성할 때 다음 예제를 사용합니다.

DISTRIBUTED_STORAGE_CONFIG:
    googleCloudStorage:
        - GoogleCloudStorage
        - access_key: GOOGQIMFB3ABCDEFGHIJKLMN
          bucket_name: quay-bucket
          secret_key: FhDAYe2HeuAKfvZCAGyOioNaaRABCDEFGHIJKLMN
          storage_path: /datastorage/registry
          boto_timeout: 120 
1

DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: []
DISTRIBUTED_STORAGE_PREFERENCE:
    - googleCloudStorage
Copy to Clipboard Toggle word wrap
1
선택 사항입니다. 연결에서 읽으려고 할 때 시간 초과 예외가 throw될 때까지 시간(초)입니다. 기본값은 60 초입니다. 또한 연결을 시도할 때 시간 초과 예외가 throw될 때까지 시간(초)을 포함합니다. 기본값은 60 초입니다.
3.2.1.3. Microsoft Azure 스토리지

Red Hat Quay 배포를 위해 Microsoft Azure 스토리지를 구성할 때 다음 예제를 사용합니다.

DISTRIBUTED_STORAGE_CONFIG:
  azureStorage:
    - AzureStorage
    - azure_account_name: azure_account_name_here
      azure_container: azure_container_here
      storage_path: /datastorage/registry
      azure_account_key: azure_account_key_here
      sas_token: some/path/
      endpoint_url: https://[account-name].blob.core.usgovcloudapi.net 
1

DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: []
DISTRIBUTED_STORAGE_PREFERENCE:
    - azureStorage
Copy to Clipboard Toggle word wrap
1
Microsoft Azure 스토리지의 endpoint_url 매개변수는 선택 사항이며 Microsoft Azure Government (MAG) 끝점과 함께 사용할 수 있습니다. 비워 두면 endpoint_url 이 일반 Microsoft Azure 리전에 연결됩니다.

Red Hat Quay 3.7부터는 MAG Blob 서비스의 기본 엔드포인트를 사용해야 합니다. MAG Blob 서비스의 보조 끝점을 사용하면 다음과 같은 오류가 발생합니다. AuthenticationErrorDetail:Cannot find the claimed account when trying to GetProperties for the account whusc8-secondary.

3.2.1.4. Ceph/RadosGW Storage

Red Hat Quay 배포를 위해 Ceph/RadosGW 스토리지를 구성할 때 다음 예제를 사용합니다.

DISTRIBUTED_STORAGE_CONFIG:
  radosGWStorage: #storage config name
    - RadosGWStorage #actual driver
    - access_key: access_key_here #parameters
      secret_key: secret_key_here
      bucket_name: bucket_name_here
      hostname: hostname_here
      is_secure: 'true'
      port: '443'
      storage_path: /datastorage/registry
DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: []
DISTRIBUTED_STORAGE_PREFERENCE: #must contain name of the storage config
    - radosGWStorage
Copy to Clipboard Toggle word wrap
3.2.1.5. Swift 스토리지

Red Hat Quay 배포를 위해 Swift 스토리지를 구성할 때 다음 예제를 사용합니다.

DISTRIBUTED_STORAGE_CONFIG:
  swiftStorage:
    - SwiftStorage
    - swift_user: swift_user_here
      swift_password: swift_password_here
      swift_container: swift_container_here
      auth_url: https://example.org/swift/v1/quay
      auth_version: 3
      os_options:
        tenant_id: <osp_tenant_id_here>
        user_domain_name: <osp_domain_name_here>
      ca_cert_path: /conf/stack/swift.cert"
      storage_path: /datastorage/registry
DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: []
DISTRIBUTED_STORAGE_PREFERENCE:
    - swiftStorage
Copy to Clipboard Toggle word wrap
3.2.1.6. NooBaa 관리되지 않는 스토리지

관리되지 않는 스토리지 구성으로 NooBaa를 배포하려면 다음 절차를 사용하십시오.

프로세스

  1. 스토리지 → 오브젝트 버킷 클레임으로 이동하여 Red Hat Quay 콘솔에서 NooBaa Object Bucket Claims 를 생성합니다.
  2. Access Key, Bucket Name, Endpoint (hostname) 및 Secret Key를 포함하여 Object Bucket Claim Data 세부 정보를 검색합니다.
  3. Object Bucket Claim에 대한 정보를 사용하는 config.yaml 구성 파일을 생성합니다.

    DISTRIBUTED_STORAGE_CONFIG:
      default:
        - RHOCSStorage
        - access_key: WmrXtSGk8B3nABCDEFGH
          bucket_name: my-noobaa-bucket-claim-8b844191-dc6c-444e-9ea4-87ece0abcdef
          hostname: s3.openshift-storage.svc.cluster.local
          is_secure: true
          port: "443"
          secret_key: X9P5SDGJtmSuHFCMSLMbdNCMfUABCDEFGH+C5QD
          storage_path: /datastorage/registry
    DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: []
    DISTRIBUTED_STORAGE_PREFERENCE:
      - default
    Copy to Clipboard Toggle word wrap

오브젝트 버킷 클레임 구성에 대한 자세한 내용은 오브젝트 버킷 클레임을 참조하십시오.

3.2.2. 관리되지 않는 NooBaa 인스턴스 사용

Red Hat Quay 배포에 관리되지 않는 NooBaa 인스턴스를 사용하려면 다음 절차를 사용하십시오.

프로세스

  1. 스토리지 → 오브젝트 버킷 클레임의 콘솔에 NooBaa Object Bucket Claims를 생성합니다.
  2. 액세스 키, 버킷이름,엔드포인트(hostname)시크릿 키를 포함하여 오브젝트 버킷 클레임 데이터 세부 정보를 검색합니다.
  3. Object Bucket Claim에 대한 정보를 사용하여 config.yaml 구성 파일을 생성합니다. 예를 들면 다음과 같습니다.

    DISTRIBUTED_STORAGE_CONFIG:
      default:
        - RHOCSStorage
        - access_key: WmrXtSGk8B3nABCDEFGH
          bucket_name: my-noobaa-bucket-claim-8b844191-dc6c-444e-9ea4-87ece0abcdef
          hostname: s3.openshift-storage.svc.cluster.local
          is_secure: true
          port: "443"
          secret_key: X9P5SDGJtmSuHFCMSLMbdNCMfUABCDEFGH+C5QD
          storage_path: /datastorage/registry
    DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: []
    DISTRIBUTED_STORAGE_PREFERENCE:
      - default
    Copy to Clipboard Toggle word wrap

3.2.3. 관리 스토리지

Red Hat Quay Operator에서 Red Hat Quay용 오브젝트 스토리지를 관리하려면 클러스터에서 ObjectBucketClaim API를 통해 오브젝트 스토리지를 제공할 수 있어야 합니다. Red Hat OpenShift Data Foundation Operator를 사용하면 다음과 같은 두 가지 옵션을 사용할 수 있습니다.

  • 로컬 Kubernetes PersistentVolume 스토리지에서 지원하는 Multi-Cloud Object Gateway의 독립 실행형 인스턴스

    • 가용성이 높지 않음
    • Red Hat Quay 서브스크립션에 포함
    • Red Hat OpenShift Data Foundation에 대한 별도의 서브스크립션이 필요하지 않음
  • 스케일 아웃 오브젝트 서비스 및 Ceph를 사용하는 Red Hat OpenShift Data Foundation의 프로덕션 배포

    • 고가용성
    • Red Hat OpenShift Data Foundation에 대해 별도의 서브스크립션이 필요

독립 실행형 인스턴스 옵션을 사용하려면 아래를 계속 읽으십시오. Red Hat OpenShift Data Foundation의 프로덕션 배포는 공식 문서를 참조하십시오.

참고

오브젝트 스토리지 디스크 공간은 50GiB의 Red Hat Quay Operator에 의해 자동으로 할당됩니다. 이 수는 대부분의 소규모에서 중간 규모의 Red Hat Quay 설치에 사용 가능한 스토리지 양을 나타내지만 사용 사례에는 충분하지 않을 수 있습니다. Red Hat OpenShift Data Foundation 볼륨 크기 조정은 현재 Red Hat Quay Operator에 의해 처리되지 않습니다. 자세한 내용은 관리 스토리지 크기 조정 섹션을 참조하십시오.

Red Hat Quay 서브스크립션의 일부로 사용자는 Red Hat OpenShift Data Foundation Operator(이전의 OpenShift Container Storage Operator라고도 함)의 Multicloud Object Gateway 구성 요소를 사용할 수 있습니다. 이 게이트웨이 구성 요소를 사용하면 Kubernetes PersistentVolume- 기반 블록 스토리지에서 지원하는 Red Hat Quay에 S3 호환 오브젝트 스토리지 인터페이스를 제공할 수 있습니다. 사용량은 Operator에서 관리하는 Red Hat Quay 배포와 아래에 설명된 대로 multicloud Object Gateway 인스턴스의 정확한 사양으로 제한됩니다.

Red Hat Quay는 로컬 파일 시스템 스토리지를 지원하지 않으므로 대신 Kubernetes PersistentVolume 스토리지와 함께 게이트웨이를 활용하여 지원되는 배포를 제공할 수 있습니다. PersistentVolume 은 오브젝트 스토리지의 백업 저장소로 게이트웨이 인스턴스에 직접 마운트되며 모든 블록 기반 StorageClass 가 지원됩니다.

PersistentVolume 의 특성에 따라 이는 확장 가능한 고가용성 솔루션이 아니며 Red Hat OpenShift Data Foundation과 같은 스케일 아웃 스토리지 시스템을 대체하지 않습니다. 게이트웨이의 단일 인스턴스만 실행 중입니다. 일정 변경, 업데이트 또는 계획되지 않은 다운타임으로 인해 게이트웨이를 실행하는 Pod를 사용할 수 없게 되면 연결된 Red Hat Quay 인스턴스가 일시적으로 저하됩니다.

Red Hat OpenShift Data Foundation을 사용하여 OpenShift Container Platform에 Red Hat Quay를 배포하려면 Local Storage Operator인 Red Hat OpenShift Data Foundation Operator를 다운로드한 다음 OpenShift Container Platform UI를 사용하여 독립 실행형 Multicloud Object Gateway를 배포해야 합니다. 다음 단계는 다음 Red Hat OpenShift Data Foundation 설명서를 참조하십시오.

4장. 트래픽 인그레스 구성

4.1. SSL/TLS 및 경로 구성

새로운 관리 구성 요소 tls 를 통해 OpenShift Container Platform 엣지 종료 경로에 대한 지원이 추가되었습니다. 이를 통해 SSL/TLS와 경로 구성 요소를 분리하고 사용자가 둘 다 별도로 구성할 수 있습니다.

EXTERNAL_TLS_TERMINATION: true 는 의견이 지정된 설정입니다.

참고
  • Managed tls 는 기본 클러스터 와일드카드 인증서가 사용됨을 의미합니다.
  • Unmanaged tls 는 사용자가 제공한 키와 인증서 쌍이 경로에 삽입됨을 의미합니다.

이제 ssl.certssl.key 가 별도의 영구 보안으로 이동되어 모든 조정 시 키 및 인증서 쌍이 다시 생성되지 않습니다. 이제 키 및 인증서 쌍이 에지 경로로 포맷되어 Quay 컨테이너의 동일한 디렉터리에 마운트됩니다.

SSL/TLS 및 경로를 구성할 때 여러 변경 사항을 사용할 수 있지만 다음 규칙이 적용됩니다.

  • SSL/TLS가 관리되는 경우 경로도 관리해야 합니다.
  • SSL/TLS가 관리되지 않는 경우 구성 번들에 인증서를 직접 제공해야 합니다.

다음 표에서는 유효한 옵션을 설명합니다.

Expand
표 4.1. TLS 및 경로에 유효한 구성 옵션
옵션경로TLS제공된 인증서결과

자체 로드 밸런서에서 TLS 처리

관리됨

관리됨

없음

기본 와일드카드 인증서가 있는 엣지 경로

Red Hat Quay에서 TLS 처리

관리됨

Unmanaged

제공됨

Pod 내부에 마운트된 인증서가 있는 패스스루 경로

Red Hat Quay에서 TLS 처리

Unmanaged

Unmanaged

제공됨

인증서는 quay pod 내부에서 설정되지만 경로를 수동으로 생성해야 합니다.

4.1.1. SSL/TLS 인증서 및 키 쌍을 사용하여 구성 번들 시크릿 생성

다음 절차에 따라 자체 SSL/TLS 인증서 및 키 쌍을 포함하는 구성 번들 시크릿을 생성합니다.

프로세스

  • 다음 명령을 입력하여 자체 SSL/TLS 인증서 및 키 쌍을 포함하는 구성 번들 시크릿을 생성합니다.

    $ oc create secret generic --from-file config.yaml=./config.yaml --from-file ssl.cert=./ssl.cert --from-file ssl.key=./ssl.key config-bundle-secret
    Copy to Clipboard Toggle word wrap

5장. OpenShift Container Platform에서 관리되는 구성 요소의 리소스 구성

Pod가 실행 중인 다음 구성 요소에 대해 OpenShift Container Platform의 Red Hat Quay의 리소스를 수동으로 조정할 수 있습니다.

  • quay
  • Clair
  • 미러링
  • clairpostgres
  • Postgres

이 기능을 사용하면 더 작은 테스트 클러스터를 실행하거나 부분적으로 성능이 저하된 Quay Pod를 방지하기 위해 더 많은 리소스를 미리 요청할 수 있습니다. 제한 사항 및 요청은 Kubernetes 리소스 단위에 따라 설정할 수 있습니다.

다음 구성 요소는 최소 요구 사항보다 낮게 설정해서는 안 됩니다. 이로 인해 배포에 문제가 발생할 수 있으며 경우에 따라 Pod 배포가 실패할 수 있습니다.

  • Quay: 최소 6GB, 2vCPU
  • Clair: 2GB 메모리 권장, vCPU 2개
  • clairpostgres: 200MB의 최소

OpenShift Container Platform UI에서 또는 QuayRegistry YAML을 업데이트하여 직접 리소스 요청을 구성할 수 있습니다.

중요

이러한 구성 요소에 설정된 기본값은 제안된 값입니다. 리소스 요청을 너무 높거나 너무 낮게 설정하면 리소스 사용률이 떨어지거나 성능이 저하될 수 있습니다.

5.1. OpenShift Container Platform UI를 사용하여 리소스 요청 구성

OpenShift Container Platform UI를 사용하여 리소스를 구성하려면 다음 절차를 사용하십시오.

프로세스

  1. OpenShift Container Platform 개발자 콘솔에서 Operator → 설치된 Operator Red Hat Quay 를 클릭합니다.
  2. QuayRegistry 를 클릭합니다.
  3. 레지스트리 이름을 클릭합니다(예: example-registry ).
  4. YAML 을 클릭합니다.
  5. spec.components 필드에서 .overrides.resources.limitsoverrides.resources.requests 필드의 값을 설정하여 quay, clair postgres 및 postgres 리소스의 리소스를 덮어쓸 수 있습니다. 예를 들면 다음과 같습니다.

    spec:
      components:
        - kind: clair
          managed: true
          overrides:
            resources:
              limits:
                cpu: "5"     # Limiting to 5 CPU (equivalent to 5000m or 5000 millicpu)
                memory: "18Gi"  # Limiting to 18 Gibibytes of memory
              requests:
                cpu: "4"     # Requesting 4 CPU
                memory: "4Gi"   # Requesting 4 Gibibytes of memory
        - kind: postgres
          managed: true
          overrides:
            resources:
              limits: {} 
    1
    
              requests:
                cpu: "700m"   # Requesting 700 millicpu or 0.7 CPU
                memory: "4Gi"   # Requesting 4 Gibibytes of memory
        - kind: mirror
          managed: true
          overrides:
            resources:
              limits: 
    2
    
              requests:
                cpu: "800m"   # Requesting 800 millicpu or 0.8 CPU
                memory: "1Gi"   # Requesting 1 Gibibyte of memory
        - kind: quay
          managed: true
          overrides:
            resources:
              limits:
                cpu: "4"    # Limiting to 4 CPU
                memory: "10Gi"   # Limiting to 10 Gibibytes of memory
              requests:
                cpu: "4"   # Requesting 4 CPU
                memory: "10Gi"   # Requesting 10 Gibi of memory
        - kind: clairpostgres
          managed: true
          overrides:
            resources:
              limits:
                cpu: "800m"   # Limiting to 800 millicpu or 0.8 CPU
                memory: "3Gi"   # Limiting to 3 Gibibytes of memory
              requests: {}
    Copy to Clipboard Toggle word wrap
    1
    limits 또는 requests 필드를 {} 로 설정하면 이러한 리소스의 기본값이 사용됩니다.
    2
    limits 또는 requests 필드를 비워 두면 이러한 리소스에 제한이 없습니다.

5.2. QuayRegistry YAML을 편집하여 리소스 요청 구성

이미 레지스트리를 배포한 후 리소스 요청을 구성하도록 Red Hat Quay를 다시 구성할 수 있습니다. 이 작업은 QuayRegistry YAML 파일을 직접 편집한 다음 레지스트리를 다시 배포하여 수행할 수 있습니다.

프로세스

  1. 선택 사항: QuayRegistry YAML 파일의 로컬 사본이 없는 경우 다음 명령을 입력하여 가져옵니다.

    $ oc get quayregistry <registry_name> -n <namespace> -o yaml > quayregistry.yaml
    Copy to Clipboard Toggle word wrap
  2. 이 절차의 1단계에서 생성된 quayregistry.yaml 을 열고 원하는 대로 변경합니다. 예를 들면 다음과 같습니다.

        - kind: quay
          managed: true
          overrides:
            resources:
              limits: {}
              requests:
                cpu: "0.7"   # Requesting 0.7 CPU (equivalent to 500m or 500 millicpu)
                memory: "512Mi"   # Requesting 512 Mebibytes of memory
    Copy to Clipboard Toggle word wrap
  3. 변경 사항을 저장합니다.
  4. 다음 명령을 실행하여 업데이트된 구성을 사용하여 Red Hat Quay 레지스트리를 적용합니다.

    $ oc replace -f quayregistry.yaml
    Copy to Clipboard Toggle word wrap

    출력 예

    quayregistry.quay.redhat.com/example-registry replaced
    Copy to Clipboard Toggle word wrap

6장. 데이터베이스 구성

6.1. 기존 PostgreSQL 데이터베이스 사용

외부 관리형 PostgreSQL 데이터베이스를 사용하는 경우 성공적인 배포를 위해 pg_trgm 확장을 수동으로 활성화해야 합니다.

중요

Red Hat Quay 및 Clair 배포 모두에 대해 외부적으로 관리되는 PostgreSQL 데이터베이스를 사용해서는 안 됩니다. Red Hat Quay 또는 Clair와 같은 연결 집약적 워크로드(예: Red Hat Quay 또는 Clair)와 같은 PostgreSQL 측에서 자연 연결 제한이 소모될 수 있으므로 PostgreSQL 데이터베이스를 다른 워크로드와 공유해서는 안 됩니다. 또한 pgBouncer는 Red Hat Quay 또는 Clair에서 지원되지 않으므로 이 문제를 해결하는 옵션이 아닙니다.

기존 PostgreSQL 데이터베이스를 배포하려면 다음 절차를 사용하십시오.

프로세스

  1. 필요한 데이터베이스 필드를 사용하여 config.yaml 파일을 생성합니다. 예를 들면 다음과 같습니다.

    config.yaml 파일의 예:

    DB_URI: postgresql://test-quay-database:postgres@test-quay-database:5432/test-quay-database
    Copy to Clipboard Toggle word wrap

  2. 구성 파일을 사용하여 보안을 생성합니다.

    $ kubectl create secret generic --from-file config.yaml=./config.yaml config-bundle-secret
    Copy to Clipboard Toggle word wrap
  3. postgres 구성 요소를 관리되지 않음 으로 표시하고 생성된 Secret 을 참조하는 QuayRegistry.yaml 파일을 만듭니다. 예를 들면 다음과 같습니다.

    quayregistry.yaml 파일 예

    apiVersion: quay.redhat.com/v1
    kind: QuayRegistry
    metadata:
      name: example-registry
      namespace: quay-enterprise
    spec:
      configBundleSecret: config-bundle-secret
      components:
        - kind: postgres
          managed: false
    Copy to Clipboard Toggle word wrap

다음 단계

  • 다음 섹션을 계속 진행하여 레지스트리를 배포합니다.

6.1.1. 데이터베이스 구성

이 섹션에서는 Red Hat Quay 배포에 사용할 수 있는 데이터베이스 구성 필드에 대해 설명합니다.

6.1.1.1. 데이터베이스 URI

Red Hat Quay에서 데이터베이스에 대한 연결은 필수 DB_URI 필드를 사용하여 구성됩니다.

다음 표에서는 DB_URI 구성 필드를 설명합니다.

Expand
표 6.1. 데이터베이스 URI
필드유형설명

DB_URI
(필수)

문자열

자격 증명을 포함하여 데이터베이스에 액세스하기 위한 URI입니다.

DB_URI 필드의 예:

postgresql://quayuser:quaypass@quay-server.example.com:5432/quay

6.1.1.2. 데이터베이스 연결 인수

선택적 연결 인수는 DB_CONNECTION_ARGS 매개변수를 통해 구성됩니다. DB_CONNECTION_ARGS 에서 정의된 일부 키-값 쌍은 일반적인 반면 다른 쌍은 데이터베이스별입니다.

다음 표에서는 데이터베이스 연결 인수를 설명합니다.

Expand
표 6.2. 데이터베이스 연결 인수
필드유형설명

DB_CONNECTION_ARGS

개체

데이터베이스의 선택적 연결 인수(예: 시간 초과 및 SSL/TLS)입니다.

.autorollback

부울

스레드 로컬 연결을 사용할지 여부입니다.
항상 True여야 합니다.

.threadlocals

부울

자동 롤백 연결을 사용할지 여부입니다.
항상 True여야 합니다.

6.1.1.2.1. PostgreSQL SSL/TLS 연결 인수

SSL/TLS를 사용하면 배포 중인 데이터베이스에 따라 구성이 달라집니다. 다음 예제에서는 PostgreSQL SSL/TLS 구성을 보여줍니다.

DB_CONNECTION_ARGS:
  sslmode: verify-ca
  sslrootcert: /path/to/cacert
Copy to Clipboard Toggle word wrap

sslmode 옵션은 보안 SSL/TLS TCP/IP 연결이 서버와 협상될 우선순위를 결정합니다. 여섯 가지 모드가 있습니다.

Expand
표 6.3. SSL/TLS 옵션
모드설명

disable

구성은 SSL/TLS 연결만 시도합니다.

allow

구성은 먼저 비 SSL/TLS 연결을 시도합니다. 실패하면 SSL/TLS 연결을 시도합니다.

선호
(기본값)

구성은 먼저 SSL/TLS 연결을 시도합니다. 실패하면 SSL/TLS 연결을 시도합니다.

require

구성은 SSL/TLS 연결만 시도합니다. 루트 CA 파일이 있는 경우 verify-ca가 지정된 것과 동일한 방식으로 인증서를 확인합니다.

verify-ca

구성은 SSL/TLS 연결만 시도하며 신뢰할 수 있는 CA(인증 기관)에서 서버 인증서를 발급하는지 확인합니다.

verify-full

SSL/TLS 연결만 시도한 후 서버 인증서가 신뢰할 수 있는 CA에서 발행되고 요청된 서버 호스트 이름이 인증서에서 해당 이름과 일치하는지 확인합니다.

PostgreSQL에 대한 유효한 인수에 대한 자세한 내용은 데이터베이스 연결 제어 함수 를 참조하십시오.

6.1.1.2.2. MySQL SSL/TLS 연결 인수

다음 예제에서는 샘플 MySQL SSL/TLS 구성을 보여줍니다.

DB_CONNECTION_ARGS:
  ssl:
    ca: /path/to/cacert
Copy to Clipboard Toggle word wrap

MySQL의 유효한 연결 인수에 대한 정보는 URI-Like 문자열 또는 키-값 쌍을 사용하여 서버에 연결할 수 있습니다.

6.1.2. 관리형 PostgreSQL 데이터베이스 사용

Red Hat Quay 3.9를 사용하면 Red Hat Quay Operator에서 데이터베이스를 관리하는 경우 Red Hat Quay 3.8 → 3.9에서 업데이트하면 PostgreSQL 10에서 PostgreSQL 13으로의 업그레이드를 자동으로 처리합니다.

중요
  • 관리형 데이터베이스가 있는 사용자는 PostgreSQL 데이터베이스를 10 → 13에서 업그레이드해야 합니다.
  • Operator에서 Red Hat Quay 및 Clair 데이터베이스를 관리하는 경우 3.9.0 업그레이드가 성공하려면 각 구성 요소의 데이터베이스 업그레이드가 성공해야 합니다. 데이터베이스 업그레이드 중 하나가 실패하면 전체 Red Hat Quay 버전 업그레이드가 실패합니다. 이 동작이 예상됩니다.

Red Hat Quay Operator가 PostgreSQL 배포를 PostgreSQL 10 → 13에서 업그레이드하지 않으려면 quayregistry.yaml 파일에서 PostgreSQL 매개변수를 managed: false 로 설정해야 합니다. 데이터베이스를 Unmanaged로 설정하는 방법에 대한 자세한 내용은 기존 Postgres 데이터베이스 사용을 참조하십시오.

중요
  • PostgreSQL 13으로 업그레이드하는 것이 좋습니다. PostgreSQL 10은 2022년 11월 10일에 최종 릴리스되었으며 더 이상 지원되지 않습니다. 자세한 내용은 PostgreSQL 버전 관리 정책을 참조하십시오.

PostgreSQL 데이터베이스가 RHEL(Red Hat Enterprise Linux) 시스템과 동일한 버전을 일치시키려면 RHEL 8용 RHEL 8 버전으로 마이그레이션 하거나 RHEL 9용 RHEL 9 버전의 PostgreSQL으로 마이그레이션 을 참조하십시오.

Red Hat Quay 3.8 → 3.9 절차에 대한 자세한 내용은 Red Hat Quay Operator 업그레이드 개요를 참조하십시오.

6.1.2.1. PostgreSQL 데이터베이스 권장 사항

Red Hat Quay 팀은 PostgreSQL 데이터베이스를 관리하기 위해 다음을 권장합니다.

  • 데이터베이스 백업은 PostgreSQL 이미지 또는 자체 백업 인프라에서 제공된 툴을 사용하여 정기적으로 수행해야 합니다. Red Hat Quay Operator는 현재 PostgreSQL 데이터베이스가 백업되었는지 확인하지 않습니다.
  • 백업에서 PostgreSQL 데이터베이스 복원은 PostgreSQL 툴 및 절차를 사용하여 수행해야 합니다. 데이터베이스 복원이 진행 중인 동안 Quay pod가 실행되지 않아야 합니다.
  • 데이터베이스 디스크 공간은 50GiB의 Red Hat Quay Operator에 의해 자동으로 할당됩니다. 이 수는 대부분의 소규모에서 중간 규모의 Red Hat Quay 설치에 사용 가능한 스토리지 양을 나타내지만 사용 사례에는 충분하지 않을 수 있습니다. 데이터베이스 볼륨 크기 조정은 현재 Red Hat Quay Operator에 의해 처리되지 않습니다.

6.2. 외부 Redis 구성

이 섹션의 콘텐츠를 사용하여 외부 Redis 배포를 설정합니다.

6.2.1. 관리되지 않는 Redis 데이터베이스 사용

다음 절차에 따라 외부 Redis 데이터베이스를 설정합니다.

프로세스

  1. 다음 Redis 필드를 사용하여 config.yaml 파일을 생성합니다.

    # ...
    BUILDLOGS_REDIS:
        host: <quay-server.example.com>
        port: 6379
        ssl: false
    # ...
    USER_EVENTS_REDIS:
        host: <quay-server.example.com>
        port: 6379
        ssl: false
    # ...
    Copy to Clipboard Toggle word wrap
  2. 구성 파일을 사용하여 보안을 생성하려면 다음 명령을 입력합니다.

    $ oc create secret generic --from-file config.yaml=./config.yaml config-bundle-secret
    Copy to Clipboard Toggle word wrap
  3. Redis 구성 요소를 Unmanaged 로 설정하고 생성된 시크릿을 참조하는 quayregistry.yaml 파일을 생성합니다.

    apiVersion: quay.redhat.com/v1
    kind: QuayRegistry
    metadata:
      name: example-registry
      namespace: quay-enterprise
    spec:
      configBundleSecret: config-bundle-secret
      components:
        - kind: redis
          managed: false
    # ...
    Copy to Clipboard Toggle word wrap
  4. Red Hat Quay 레지스트리를 배포합니다.

6.2.2. 관리되지 않는 Horizontal Pod Autoscaler 사용

이제 HPA(Horizontal Pod Autoscalers)가 Clair,Quay, Mirror Pod에 포함되어 로드 급증 중에 자동으로 확장됩니다.

HPA는 기본적으로 관리되도록 구성되므로 Clair,Quay미러 Pod의 수는 2로 설정됩니다. 이를 통해 Operator를 통해 또는 일정 조정 중에 Red Hat Quay를 업데이트하거나 재구성할 때 다운타임을 방지할 수 있습니다.

참고

HorizontalPodAutoscaler 구성 요소를 비활성화하고 HPA 리소스 자체를 편집하려고 할 때 알려진 문제가 있으며 minReplicas 필드의 값을 늘립니다. 이 설정을 시도할 때 Quay 애플리케이션 pod는 관리되지 않는 HPA에서 확장되며 60초 후에 Red Hat Quay Operator에 의해 복제본 수를 조정합니다. 결과적으로 Operator에서 HPA Pod가 지속적으로 생성되고 제거됩니다.

이 문제를 해결하려면 Red Hat Quay 배포를 최소 버전 3.12.5 또는 3.13.1로 업그레이드한 다음 다음 예제를 사용하여 문제를 방지해야 합니다.

이 문제는 Red Hat Quay의 향후 버전에서 해결될 예정입니다. 자세한 내용은 PROJQUAY-6474 를 참조하십시오.

6.2.2.1. Horizontal Pod Autoscaler 비활성화

자동 스케일링을 비활성화하거나 자체 HorizontalPodAutoscaler 구성 요소를 생성하려면 QuayRegistry 사용자 정의 리소스 정의에서 구성 요소를 Unmanaged 로 지정합니다. 위에서 언급한 알려진 문제를 방지하려면 QuayRegistry CRD 오브젝트를 수정하고 quay,clair, 미러 구성 요소에 대해 null 과 같은 복제본을 설정해야 합니다.

프로세스

  • quay 구성 요소에 대해 null replicas 를 포함하도록 QuayRegistry CRD를 편집합니다.

    $ oc edit quayregistry <quay_registry_name> -n <quay_namespace>
    Copy to Clipboard Toggle word wrap
    apiVersion: quay.redhat.com/v1
    kind: QuayRegistry
    metadata:
    name: quay-registry
    namespace: quay-enterprise
    spec:
    components:
      - kind: horizontalpodautoscaler
        managed: false
      - kind: quay
        managed: true
        overrides:
          replicas: null 
    1
    
      - kind: clair
        managed: true
        overrides:
          replicas: null
      - kind: mirror
        managed: true
        overrides:
          replicas: null
    # ...
    Copy to Clipboard Toggle word wrap
    1
    QuayRegistry CRD에 replicas: null 을 설정한 후 Quay 앱의 배포 매니페스트가 replicas: 1 로 변경되므로 새 복제본 세트가 생성될 수 있습니다.

검증

  1. 사용자 지정 HorizontalPodAutoscalers CRD를 생성하고 Exampe의 경우 minReplicas 양을 더 높은 값으로 늘립니다.

    kind: HorizontalPodAutoscaler
    apiVersion: autoscaling/v2
    metadata:
      name: quay-registry-quay-app
      namespace: quay-enterprise
    spec:
      scaleTargetRef:
        kind: Deployment
        name: quay-registry-quay-app
        apiVersion: apps/v1
      minReplicas: 3
      maxReplicas: 20
      metrics:
        - type: Resource
          resource:
            name: memory
            target:
              type: Utilization
              averageUtilization: 90
        - type: Resource
          resource:
            name: cpu
            target:
              type: Utilization
              averageUtilization: 90
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 입력하여 QuayRegistry 애플리케이션이 성공적으로 시작되었는지 확인합니다.

    $ oc get pod | grep quay-app
    Copy to Clipboard Toggle word wrap

    출력 예

    quay-registry-quay-app-5b8fd49d6b-7wvbk         1/1     Running     0          34m
    quay-registry-quay-app-5b8fd49d6b-jslq9         1/1     Running     0          3m42s
    quay-registry-quay-app-5b8fd49d6b-pskpz         1/1     Running     0          43m
    quay-registry-quay-app-upgrade-llctl            0/1     Completed   0          51m
    Copy to Clipboard Toggle word wrap

  3. 다음 명령을 입력하여 HorizontalPodAutoscalers 가 성공적으로 시작되었는지 확인합니다.

    $ oc get hpa
    Copy to Clipboard Toggle word wrap
    NAME                     REFERENCE                           TARGETS            MINPODS   MAXPODS   REPLICAS   AGE
    quay-registry-quay-app   Deployment/quay-registry-quay-app   67%/90%, 54%/90%   3         20        3          51m
    Copy to Clipboard Toggle word wrap

6.2.3. Route 구성 요소 비활성화

Red Hat Quay Operator가 경로를 생성하지 못하도록 하려면 다음 절차를 사용하십시오.

프로세스

  1. quayregistry.yaml 파일에서 구성 요소를 managed: false 로 설정합니다.

    apiVersion: quay.redhat.com/v1
    kind: QuayRegistry
    metadata:
      name: example-registry
      namespace: quay-enterprise
    spec:
      components:
        - kind: route
          managed: false
    Copy to Clipboard Toggle word wrap
  2. config.yaml 파일을 편집하여 Red Hat Quay가 SSL/TLS를 처리하도록 지정합니다. 예를 들면 다음과 같습니다.

    # ...
    EXTERNAL_TLS_TERMINATION: false
    # ...
    SERVER_HOSTNAME: example-registry-quay-quay-enterprise.apps.user1.example.com
    # ...
    PREFERRED_URL_SCHEME: https
    # ...
    Copy to Clipboard Toggle word wrap

    관리되지 않는 경로를 올바르게 구성하지 않으면 다음 오류가 반환됩니다.

    {
      {
        "kind":"QuayRegistry",
        "namespace":"quay-enterprise",
        "name":"example-registry",
        "uid":"d5879ba5-cc92-406c-ba62-8b19cf56d4aa",
        "apiVersion":"quay.redhat.com/v1",
        "resourceVersion":"2418527"
      },
      "reason":"ConfigInvalid",
      "message":"required component `route` marked as unmanaged, but `configBundleSecret` is missing necessary fields"
    }
    Copy to Clipboard Toggle word wrap
참고

기본 경로를 비활성화하면 Red Hat Quay 인스턴스에 액세스하기 위해 경로,서비스 또는 Ingress 를 생성해야 합니다. 또한 사용하는 DNS는 Red Hat Quay 구성의 SERVER_HOSTNAME 과 일치해야 합니다.

6.2.4. 모니터링 구성 요소 비활성화

단일 네임스페이스에 Red Hat Quay Operator를 설치하는 경우 모니터링 구성 요소가 자동으로 managed: false 로 설정됩니다. 다음 참조를 사용하여 모니터링을 명시적으로 비활성화합니다.

관리되지 않는 모니터링

apiVersion: quay.redhat.com/v1
kind: QuayRegistry
metadata:
  name: example-registry
  namespace: quay-enterprise
spec:
  components:
    - kind: monitoring
      managed: false
Copy to Clipboard Toggle word wrap

이 시나리오에서 모니터링을 활성화하려면 Red Hat Quay Operator가 단일 네임스페이스에 설치될 때 모니터링 활성화를 참조하십시오.

6.2.5. 미러링 구성 요소 비활성화

미러링을 비활성화하려면 다음 YAML 구성을 사용합니다.

관리되지 않는 미러링 예제 YAML 구성

apiVersion: quay.redhat.com/v1
kind: QuayRegistry
metadata:
  name: example-registry
  namespace: quay-enterprise
spec:
  components:
    - kind: mirroring
      managed: false
Copy to Clipboard Toggle word wrap

7장. Operator를 사용하여 Red Hat Quay 배포

OpenShift Container Platform의 Red Hat Quay는 명령줄 인터페이스 또는 OpenShift Container Platform 콘솔을 사용하여 배포할 수 있습니다. 단계는 근본적으로 동일합니다.

7.1. 명령줄에서 Red Hat Quay 배포

다음 절차에 따라 CLI(명령줄 인터페이스)를 사용하여 에서 Red Hat Quay를 배포합니다.

사전 요구 사항

  • CLI를 사용하여 OpenShift Container Platform에 로그인했습니다.

프로세스

  1. 다음 명령을 입력하여 네임스페이스(예: quay-enterprise )를 만듭니다.

    $ oc new-project quay-enterprise
    Copy to Clipboard Toggle word wrap
  2. 선택 사항입니다. Red Hat Quay 배포의 모든 측면을 사전 구성하려면 구성 번들에 대한 보안을 생성합니다.

    $ oc create secret generic quay-enterprise-config-bundle --from-file=config-bundle.tar.gz=/path/to/config-bundle.tar.gz
    Copy to Clipboard Toggle word wrap
  3. quayregistry.yaml이라는 파일에 QuayRegistry 사용자 정의 리소스를 생성

    1. 최소 배포의 경우 모든 기본값을 사용합니다.

      quayregistry.yaml:

      apiVersion: quay.redhat.com/v1
      kind: QuayRegistry
      metadata:
        name: example-registry
        namespace: quay-enterprise
      Copy to Clipboard Toggle word wrap

    2. 선택 사항입니다. 일부 구성 요소가 관리되지 않도록 하려면 spec 필드에 이 정보를 추가합니다. 최소 배포는 다음 예와 같을 수 있습니다.

      관리되지 않는 구성 요소가 있는 quayregistry.yaml의 예

      apiVersion: quay.redhat.com/v1
      kind: QuayRegistry
      metadata:
        name: example-registry
        namespace: quay-enterprise
      spec:
        components:
          - kind: clair
            managed: false
          - kind: horizontalpodautoscaler
            managed: false
          - kind: mirror
            managed: false
          - kind: monitoring
            managed: false
      Copy to Clipboard Toggle word wrap

    3. 선택 사항입니다. 구성 번들을 생성한 경우(예: init-config-bundle-secret ) quayregistry.yaml 파일에서 참조합니다.

      구성 번들이 포함된 quayregistry.yaml 예

      apiVersion: quay.redhat.com/v1
      kind: QuayRegistry
      metadata:
        name: example-registry
        namespace: quay-enterprise
      spec:
        configBundleSecret: init-config-bundle-secret
      Copy to Clipboard Toggle word wrap

    4. 선택 사항입니다. 프록시가 구성된 경우 Red Hat Quay, Clair, 미러링에 대한 재정의를 사용하여 정보를 추가할 수 있습니다.

      프록시가 구성된 quayregistry.yaml 예

        kind: QuayRegistry
        metadata:
          name: quay37
        spec:
          configBundleSecret: config-bundle-secret
          components:
            - kind: objectstorage
              managed: false
            - kind: route
              managed: true
            - kind: mirror
              managed: true
              overrides:
                env:
                  - name: DEBUGLOG
                    value: "true"
                  - name: HTTP_PROXY
                    value: quayproxy.qe.devcluster.openshift.com:3128
                  - name: HTTPS_PROXY
                    value: quayproxy.qe.devcluster.openshift.com:3128
                  - name: NO_PROXY
                    value: svc.cluster.local,localhost,quay370.apps.quayperf370.perfscale.devcluster.openshift.com
            - kind: tls
              managed: false
            - kind: clair
              managed: true
              overrides:
                env:
                  - name: HTTP_PROXY
                    value: quayproxy.qe.devcluster.openshift.com:3128
                  - name: HTTPS_PROXY
                    value: quayproxy.qe.devcluster.openshift.com:3128
                  - name: NO_PROXY
                    value: svc.cluster.local,localhost,quay370.apps.quayperf370.perfscale.devcluster.openshift.com
            - kind: quay
              managed: true
              overrides:
                env:
                  - name: DEBUGLOG
                    value: "true"
                  - name: NO_PROXY
                    value: svc.cluster.local,localhost,quay370.apps.quayperf370.perfscale.devcluster.openshift.com
                  - name: HTTP_PROXY
                    value: quayproxy.qe.devcluster.openshift.com:3128
                  - name: HTTPS_PROXY
                    value: quayproxy.qe.devcluster.openshift.com:3128
      Copy to Clipboard Toggle word wrap

  4. 다음 명령을 입력하여 지정된 네임스페이스에 QuayRegistry 를 생성합니다.

    $ oc create -n quay-enterprise -f quayregistry.yaml
    Copy to Clipboard Toggle word wrap
  5. status.registryEndpoint 가 채워지는 시기를 확인하려면 다음 명령을 입력합니다.

    $ oc get quayregistry -n quay-enterprise example-registry -o jsonpath="{.status.registryEndpoint}" -w
    Copy to Clipboard Toggle word wrap

추가 리소스

7.1.1. API를 사용하여 첫 번째 사용자 생성

다음 절차에 따라 Red Hat Quay 조직에 첫 번째 사용자를 생성합니다.

사전 요구 사항

  • 구성 옵션 FEATURE_USER_INITIALIZETrue 로 설정해야 합니다.
  • 데이터베이스에 이미 존재하지 않는 사용자가 없습니다.
프로세스

이 절차에서는 "access_token": true 를 지정하여 OAuth 토큰을 요청합니다.

  1. Red Hat Quay 구성 파일을 열고 다음 구성 필드를 업데이트합니다.

    FEATURE_USER_INITIALIZE: true
    SUPER_USERS:
         -  quayadmin
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 입력하여 Red Hat Quay 서비스를 중지합니다.

    $ sudo podman stop quay
    Copy to Clipboard Toggle word wrap
  3. 다음 명령을 입력하여 Red Hat Quay 서비스를 시작합니다.

    $ sudo podman run -d -p 80:8080 -p 443:8443 --name=quay -v $QUAY/config:/conf/stack:Z  -v $QUAY/storage:/datastorage:Z {productrepo}/{quayimage}:{productminv}
    Copy to Clipboard Toggle word wrap
  4. 다음 CURL 명령을 실행하여 사용자 이름, 암호, 이메일 및 액세스 토큰이 있는 새 사용자를 생성합니다.

    $ curl -X POST -k  http://quay-server.example.com/api/v1/user/initialize --header 'Content-Type: application/json' --data '{ "username": "quayadmin", "password":"quaypass12345", "email": "quayadmin@example.com", "access_token": true}'
    Copy to Clipboard Toggle word wrap

    성공하면 명령은 사용자 이름, 이메일 및 암호화된 암호를 사용하여 오브젝트를 반환합니다. 예를 들면 다음과 같습니다.

    {"access_token":"6B4QTRSTSD1HMIG915VPX7BMEZBVB9GPNY2FC2ED", "email":"quayadmin@example.com","encrypted_password":"1nZMLH57RIE5UGdL/yYpDOHLqiNCgimb6W9kfF8MjZ1xrfDpRyRs9NUnUuNuAitW","username":"quayadmin"} # gitleaks:allow
    Copy to Clipboard Toggle word wrap

    사용자가 데이터베이스에 이미 있는 경우 오류가 반환됩니다.

    {"message":"Cannot initialize user in a non-empty database"}
    Copy to Clipboard Toggle word wrap

    암호가 8자 이상이어야 하거나 공백을 포함하는 경우 오류가 반환됩니다.

    {"message":"Failed to initialize user: Invalid password, password must be at least 8 characters and contain no whitespace."}
    Copy to Clipboard Toggle word wrap
  5. 다음 명령을 입력하여 Red Hat Quay 배포에 로그인합니다.

    $ sudo podman login -u quayadmin -p quaypass12345 http://quay-server.example.com --tls-verify=false
    Copy to Clipboard Toggle word wrap

    출력 예

    Login Succeeded!
    Copy to Clipboard Toggle word wrap

7.1.2. 명령줄을 사용하여 생성된 구성 요소 보기

배포된 Red Hat Quay 구성 요소를 보려면 다음 절차를 사용하십시오.

사전 요구 사항

  • OpenShift Container Platform에 Red Hat Quay를 배포했습니다.

프로세스

  1. 배포된 구성 요소를 보려면 다음 명령을 입력합니다.

    $ oc get pods -n quay-enterprise
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                                                   READY   STATUS      RESTARTS   AGE
    example-registry-clair-app-5ffc9f77d6-jwr9s            1/1     Running     0          3m42s
    example-registry-clair-app-5ffc9f77d6-wgp7d            1/1     Running     0          3m41s
    example-registry-clair-postgres-54956d6d9c-rgs8l       1/1     Running     0          3m5s
    example-registry-quay-app-79c6b86c7b-8qnr2             1/1     Running     4          3m42s
    example-registry-quay-app-79c6b86c7b-xk85f             1/1     Running     4          3m41s
    example-registry-quay-app-upgrade-5kl5r                0/1     Completed   4          3m50s
    example-registry-quay-database-b466fc4d7-tfrnx         1/1     Running     2          3m42s
    example-registry-quay-mirror-6d9bd78756-6lj6p          1/1     Running     0          2m58s
    example-registry-quay-mirror-6d9bd78756-bv6gq          1/1     Running     0          2m58s
    example-registry-quay-postgres-init-dzbmx              0/1     Completed   0          3m43s
    example-registry-quay-redis-8bd67b647-skgqx            1/1     Running     0          3m42s
    Copy to Clipboard Toggle word wrap

7.1.3. 수평 Pod 자동 스케일링

기본 배포에는 다음과 같은 실행 중인 Pod가 표시됩니다.

  • Red Hat Quay 애플리케이션 자체를 위한 두 개의 Pod(예:-registry-quay-app-*')
  • Red Hat Quay 로깅을 위한 하나의 Redis Pod (예:-registry-quay-redis-*)
  • 메타데이터 스토리지에 Red Hat Quay에서 사용하는 PostgreSQL용 데이터베이스 포드 1개(예:-registry-quay-database-*)
  • 두 개의 Quay 미러링 Pod(example-registry-quay-mirror-*)
  • Clair 애플리케이션을 위한 두 개의 Pod(예:-registry-clair-app-*)
  • Clair를 위한 하나의 PostgreSQL Pod(example-registry-clair-postgres-*)

수평 PPod 자동 확장은 기본적으로 관리 되도록 구성되며 Quay, Clair 및 리포지토리 미러링의 Pod 수는 2로 설정됩니다. 이를 통해 Red Hat Quay Operator 또는 일정 조정 이벤트를 통해 Red Hat Quay를 업데이트하거나 재구성할 때 다운타임을 방지할 수 있습니다. 다음 명령을 입력하여 HPA 오브젝트에 대한 정보를 볼 수 있습니다.

$ oc get hpa -n quay-enterprise
Copy to Clipboard Toggle word wrap

출력 예

NAME                           REFERENCE                                 TARGETS           MINPODS   MAXPODS   REPLICAS   AGE
example-registry-clair-app     Deployment/example-registry-clair-app     16%/90%, 0%/90%   2         10        2          13d
example-registry-quay-app      Deployment/example-registry-quay-app      31%/90%, 1%/90%   2         20        2          13d
example-registry-quay-mirror   Deployment/example-registry-quay-mirror   27%/90%, 0%/90%   2         20        2          13d
Copy to Clipboard Toggle word wrap

8장. 인프라 노드에 Red Hat Quay 배포

기본적으로 모든 quay관련 Pod는 OpenShift Container Platform 클러스터의 사용 가능한 작업자 노드에 예약됩니다. 일부 환경에서는 레지스트리, 데이터베이스, 모니터링 Pod와 같은 인프라 워크로드에 대해 특정 노드를 전용으로 지정하여 성능을 개선하고 중요한 구성 요소를 분리하거나 유지보수를 간소화해야 할 수 있습니다.

OpenShift Container Platform은 인프라 머신 세트를 사용하여 이 방법을 지원하여 인프라용으로 예약된 노드를 자동으로 생성하고 관리합니다.

OpenShift Container Platform 관리자는 작업자 노드에 레이블을 지정하고 테인트하여 동일한 결과를 얻을 수 있습니다. 이렇게 하면 quay pod와 같은 인프라 워크로드만 이러한 노드에 예약됩니다. 인프라 노드를 구성한 후 노드 선택기 및 허용 오차를 사용하여 quay Pod가 실행되는 위치를 제어할 수 있습니다.

다음 절차는 단일 네임스페이스에 Red Hat Quay Operator를 설치하고 자체 백엔드 스토리지를 제공하는 새 배포를 위한 것입니다. 이 절차에서는 전용 인프라 노드에서 노드를 준비하고 Red Hat Quay를 배포하는 방법을 보여줍니다. 이 절차에서는 모든 quay관련 Pod가 전용 인프라 노드에 배치됩니다.

8.1. 인프라 사용을 위해 노드에 레이블 지정 및 테인트

다음 절차에 따라 인프라 사용을 위해 노드에 레이블을 지정하고 테인트를 수행합니다.

참고

다음 절차에서는 infra 레이블을 사용하여 3개의 작업자 노드에 레이블을 지정합니다. 환경과 관련된 리소스에 따라 infra 레이블을 사용하여 3개 이상의 작업자 노드에 레이블을 지정해야 할 수 있습니다.

  1. 다음 명령을 입력하여 배포에서 작업자 노드 목록을 가져옵니다.

    $ oc get nodes | grep worker
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                                                              STATUS   ROLES                  AGE    VERSION
    ---
    example-cluster-new-c5qqp-worker-b-4zxx5.c.quay-devel.internal   Ready    worker                 401d   v1.31.11
    example-cluster-new-c5qqp-worker-b-kz6jn.c.quay-devel.internal   Ready    worker                 402d   v1.31.11
    example-cluster-new-c5qqp-worker-b-wrhw4.c.quay-devel.internal   Ready    worker                 401d   v1.31.11
    ---
    Copy to Clipboard Toggle word wrap

  2. 다음 명령을 입력하여 node-role.kubernetes.io/infra= 레이블을 작업자 노드에 추가합니다. 필요한 인프라 노드 수는 환경에 따라 다릅니다. 프로덕션 환경에서는 모든 quay관련 구성 요소에 대해 고가용성 및 충분한 리소스를 보장하기 위해 충분한 인프라 노드를 프로비저닝해야 합니다. CPU, 메모리 및 스토리지 사용률을 모니터링하여 추가 인프라 노드가 필요한지 확인합니다.

    $ oc label node --overwrite <infra_node_one> <infra_node_two> <infra_node_three> node-role.kubernetes.io/infra=
    Copy to Clipboard Toggle word wrap
  3. 다음 명령을 입력하여 node-role.kubernetes.io/infra= 레이블이 적절한 노드에 추가되었는지 확인합니다.

    $ oc get node | grep infra
    Copy to Clipboard Toggle word wrap
    ---
    example-cluster-new-c5qqp-worker-b-4zxx5.c.quay-devel.internal   Ready    infra,worker           405d   v1.32.8
    example-cluster-new-c5qqp-worker-b-kz6jn.c.quay-devel.internal   Ready    infra,worker           406d   v1.32.8
    example-cluster-new-c5qqp-worker-b-wrhw4.c.quay-devel.internal   Ready    infra,worker           405d   v1.32.8
    ---
    Copy to Clipboard Toggle word wrap
  4. 작업자 노드에 infra 역할이 할당되면 사용자 워크로드가 실수로 인프라 노드에 할당될 수 있습니다. 이를 방지하려면 인프라 노드에 테인트를 적용한 다음 제어하려는 Pod에 대한 허용 오차를 추가할 수 있습니다. 다음 명령을 입력하여 infra 레이블이 있는 작업자 노드를 테인트합니다.

    $ oc adm taint nodes -l node-role.kubernetes.io/infra \
      node-role.kubernetes.io/infra=reserved:NoSchedule --overwrite
    Copy to Clipboard Toggle word wrap

    출력 예

    node/example-cluster-new-c5qqp-worker-b-4zxx5.c.quay-devel.internal modified
    node/example-cluster-new-c5qqp-worker-b-kz6jn.c.quay-devel.internal modified
    node/example-cluster-new-c5qqp-worker-b-wrhw4.c.quay-devel.internal modified
    Copy to Clipboard Toggle word wrap

8.2. 노드 선택기 및 허용 오차를 사용하여 프로젝트 생성

다음 절차에 따라 node-selectortolerations 주석이 있는 프로젝트를 생성합니다.

프로세스

  1. 다음 명령을 입력하여 node-selector 주석을 네임스페이스에 추가합니다.

    $ oc annotate namespace <namespace> openshift.io/node-selector='node-role.kubernetes.io/infra='
    Copy to Clipboard Toggle word wrap

    출력 예

    namespace/<namespace> annotated
    Copy to Clipboard Toggle word wrap

  2. 다음 명령을 입력하여 네임스페이스에 tolerations 주석을 추가합니다.

    $ oc annotate namespace <namespace> scheduler.alpha.kubernetes.io/defaultTolerations='[{"operator":"Equal","value":"reserved","effect":"NoSchedule","key":"node-role.kubernetes.io/infra"},{"operator":"Equal","value":"reserved","effect":"NoExecute","key":"node-role.kubernetes.io/infra"}]' --overwrite
    Copy to Clipboard Toggle word wrap

    출력 예

    namespace/<namespace> annotated
    Copy to Clipboard Toggle word wrap

    중요

    이 예제의 허용 오차는 일반적으로 인프라 노드에 적용되는 두 개의 테인트에 고유합니다. 환경에 구성된 테인트는 다를 수 있습니다. 인프라 노드에 적용된 테인트와 일치하도록 허용 오차를 적절하게 설정해야 합니다.

8.3. 주석이 달린 네임스페이스에 Red Hat Quay Operator 설치

node-role.kubernetes.io/infra= 레이블을 작업자 노드에 추가하고 node-selectortolerations 주석을 네임스페이스에 추가한 후 해당 네임스페이스에서 Red Hat Quay Operator를 다운로드해야 합니다.

다음 절차에서는 주석이 지정된 네임스페이스에서 Red Hat Quay Operator를 다운로드하고 성공적으로 설치하기 위해 서브스크립션을 업데이트하는 방법을 보여줍니다.

프로세스

  1. OpenShift Container Platform 웹 콘솔에서 OperatorOperatorHub 를 클릭합니다.
  2. 검색 상자에 Red Hat Quay 를 입력합니다.
  3. Red Hat Quay설치를 클릭합니다.
  4. 업데이트 채널(예: stable-3.12 및 버전)을 선택합니다.
  5. 설치 모드 의 클러스터에서 특정 네임스페이스 를 클릭한 다음 노드 선택기허용 오차 주석을 적용한 네임스페이스를 선택합니다.
  6. 설치를 클릭합니다.
  1. 다음 명령을 입력하여 Operator가 설치되었는지 확인합니다.

    $ oc get pods -n <annotated_namespace> -o wide | grep quay-operator
    Copy to Clipboard Toggle word wrap

    출력 예

    quay-operator.v3.15.1-858b5c5fdc-lf5kj   1/1     Running   0          29m   10.130.6.18   example-cluster-new-c5qqp-worker-f-mhngl.c.quay-devel.internal   <none>           <none>
    Copy to Clipboard Toggle word wrap

8.4. Red Hat Quay 레지스트리 생성

Red Hat Quay Operator를 다운로드한 후 Red Hat Quay 레지스트리를 생성해야 합니다. 레지스트리의 구성 요소(예: clair,postgres,redis 등)는 인프라 작업자 노드에 예약할 수 있도록 허용 오차 주석을 패치해야 합니다.

다음 절차에서는 인프라 노드에서 실행되는 Red Hat Quay 레지스트리를 생성하는 방법을 보여줍니다.

프로세스

  1. OpenShift Container Platform 웹 콘솔에서 Operator → 설치된 Operator Red Hat Quay 를 클릭합니다.
  2. Red Hat Quay Operator 세부 정보 페이지에서 Quay RegistryCreate QuayRegistry 를 클릭합니다.
  3. Create QuayRegistry 페이지에서 monitoringobjectstorage 필드를 false 로 설정합니다. Red Hat Quay가 단일 네임스페이스에 설치된 경우 모니터링 구성 요소를 활성화할 수 없습니다. 예를 들면 다음과 같습니다.

    # ...
        - kind: monitoring
          managed: false
        - kind: objectstorage
          managed: false
    # ...
    Copy to Clipboard Toggle word wrap
  4. 생성을 클릭합니다.
  1. 선택 사항: Pod가 인프라 노드에서 실행 중인지 확인합니다.

    1. 다음 명령을 입력하여 예약된 노드와 함께 모든 Quay관련 Pod를 나열합니다.

      $ oc get pods -n <annotated_namespace> -o wide | grep example-registry
      Copy to Clipboard Toggle word wrap

      출력 예

      ...
      NAME                                               READY   STATUS      RESTARTS   AGE   IP             NODE                                                              NOMINATED NODE   READINESS GATES
      example-registry-clair-app-5f95d685bd-dgjf6        1/1     Running     0          52m   10.128.4.12    example-cluster-new-c5qqp-worker-b-wrhw4.c.quay-devel.internal   <none>           <none>
      ...
      Copy to Clipboard Toggle word wrap

    2. 다음 명령을 실행하여 나열된 노드에 infra 레이블이 지정된 노드만 포함되어 있는지 확인합니다.

      $ oc get nodes -l node-role.kubernetes.io/infra -o name
      Copy to Clipboard Toggle word wrap

      출력 예

      node/example-cluster-new-c5qqp-worker-b-4zxx5.c.quay-devel.internal modified
      node/example-cluster-new-c5qqp-worker-b-kz6jn.c.quay-devel.internal modified
      node/example-cluster-new-c5qqp-worker-b-wrhw4.c.quay-devel.internal modified
      Copy to Clipboard Toggle word wrap

      참고

      비infra 노드에 Pod가 표시되면 네임스페이스 주석 및 배포 패치를 다시 확인하십시오.

  2. 다음 명령을 입력하여 Red Hat Quay 레지스트리의 모든 pod를 다시 시작합니다.

    $ oc delete pod -n <annotated_namespace> --all
    Copy to Clipboard Toggle word wrap
  3. 다음 명령을 입력하여 Pod의 상태를 확인합니다.

    $ oc get pods -n <annotated_namespace>
    Copy to Clipboard Toggle word wrap

    출력 예

    ...
    NAME                                               READY   STATUS      RESTARTS   AGE
    example-registry-clair-app-5f95d685bd-dgjf6        1/1     Running     0          5m4s
    ...
    Copy to Clipboard Toggle word wrap

9장. 배포 프로세스 모니터링 및 디버깅

사용자는 배포 단계에서 문제를 해결할 수 있습니다. QuayRegistry 오브젝트의 상태는 배포 중에 구성 요소의 상태를 모니터링하는 데 도움이 될 수 있으며 발생할 수 있는 문제를 디버깅하는 데 도움이 될 수 있습니다.

프로세스

  1. 다음 명령을 입력하여 배포 상태를 확인합니다.

    $ oc get quayregistry -n quay-enterprise -o yaml
    Copy to Clipboard Toggle word wrap

    출력 예

    배포 직후 QuayRegistry 오브젝트에는 기본 설정이 표시됩니다.

    apiVersion: v1
    items:
    - apiVersion: quay.redhat.com/v1
      kind: QuayRegistry
      metadata:
        creationTimestamp: "2021-09-14T10:51:22Z"
        generation: 3
        name: example-registry
        namespace: quay-enterprise
        resourceVersion: "50147"
        selfLink: /apis/quay.redhat.com/v1/namespaces/quay-enterprise/quayregistries/example-registry
        uid: e3fc82ba-e716-4646-bb0f-63c26d05e00e
      spec:
        components:
        - kind: postgres
          managed: true
        - kind: clair
          managed: true
        - kind: redis
          managed: true
        - kind: horizontalpodautoscaler
          managed: true
        - kind: objectstorage
          managed: true
        - kind: route
          managed: true
        - kind: mirror
          managed: true
        - kind: monitoring
          managed: true
        - kind: tls
          managed: true
        - kind: clairpostgres
          managed: true
        configBundleSecret: example-registry-config-bundle-kt55s
    kind: List
    metadata:
      resourceVersion: ""
      selfLink: ""
    Copy to Clipboard Toggle word wrap
  2. 배포된 구성 요소의 현재 상태를 보려면 oc get pods 명령을 사용합니다.

    $ oc get pods -n quay-enterprise
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                                                   READY   STATUS              RESTARTS   AGE
    example-registry-clair-app-86554c6b49-ds7bl            0/1     ContainerCreating   0          2s
    example-registry-clair-app-86554c6b49-hxp5s            0/1     Running             1          17s
    example-registry-clair-postgres-68d8857899-lbc5n       0/1     ContainerCreating   0          17s
    example-registry-quay-app-upgrade-h2v7h                0/1     ContainerCreating   0          9s
    example-registry-quay-database-66f495c9bc-wqsjf        0/1     ContainerCreating   0          17s
    example-registry-quay-mirror-854c88457b-d845g          0/1     Init:0/1            0          2s
    example-registry-quay-mirror-854c88457b-fghxv          0/1     Init:0/1            0          17s
    example-registry-quay-postgres-init-bktdt              0/1     Terminating         0          17s
    example-registry-quay-redis-f9b9d44bf-4htpz            0/1     ContainerCreating   0          17s
    Copy to Clipboard Toggle word wrap

  3. 배포가 진행 중인 동안 QuayRegistry 오브젝트에 현재 상태가 표시됩니다. 이 경우 데이터베이스 마이그레이션이 수행되고 기타 구성 요소가 완료될 때까지 대기 중입니다.

      status:
        conditions:
        - lastTransitionTime: "2021-09-14T10:52:04Z"
          lastUpdateTime: "2021-09-14T10:52:04Z"
          message: all objects created/updated successfully
          reason: ComponentsCreationSuccess
          status: "False"
          type: RolloutBlocked
        - lastTransitionTime: "2021-09-14T10:52:05Z"
          lastUpdateTime: "2021-09-14T10:52:05Z"
          message: running database migrations
          reason: MigrationsInProgress
          status: "False"
          type: Available
        lastUpdated: 2021-09-14 10:52:05.371425635 +0000 UTC
        unhealthyComponents:
          clair:
          - lastTransitionTime: "2021-09-14T10:51:32Z"
            lastUpdateTime: "2021-09-14T10:51:32Z"
            message: 'Deployment example-registry-clair-postgres: Deployment does not have minimum availability.'
            reason: MinimumReplicasUnavailable
            status: "False"
            type: Available
          - lastTransitionTime: "2021-09-14T10:51:32Z"
            lastUpdateTime: "2021-09-14T10:51:32Z"
            message: 'Deployment example-registry-clair-app: Deployment does not have minimum availability.'
            reason: MinimumReplicasUnavailable
            status: "False"
            type: Available
          mirror:
          - lastTransitionTime: "2021-09-14T10:51:32Z"
            lastUpdateTime: "2021-09-14T10:51:32Z"
            message: 'Deployment example-registry-quay-mirror: Deployment does not have minimum availability.'
            reason: MinimumReplicasUnavailable
            status: "False"
            type: Available
    Copy to Clipboard Toggle word wrap
  4. 배포 프로세스가 완료되면 QuayRegistry 오브젝트의 상태가 비정상 구성 요소를 표시하지 않습니다.

      status:
        conditions:
        - lastTransitionTime: "2021-09-14T10:52:36Z"
          lastUpdateTime: "2021-09-14T10:52:36Z"
          message: all registry component healthchecks passing
          reason: HealthChecksPassing
          status: "True"
          type: Available
        - lastTransitionTime: "2021-09-14T10:52:46Z"
          lastUpdateTime: "2021-09-14T10:52:46Z"
          message: all objects created/updated successfully
          reason: ComponentsCreationSuccess
          status: "False"
          type: RolloutBlocked
        currentVersion: {producty}
        lastUpdated: 2021-09-14 10:52:46.104181633 +0000 UTC
        registryEndpoint: https://example-registry-quay-quay-enterprise.apps.docs.quayteam.org
        unhealthyComponents: {}
    Copy to Clipboard Toggle word wrap

9.1. OpenShift Container Platform 콘솔에서 Red Hat Quay 배포

  1. 네임스페이스를 생성합니다(예: quay-enterprise ).
  2. Operators설치된 Operator 를 선택한 다음 Quay Operator를 선택하여 Operator 세부 정보 보기로 이동합니다.
  3. '제공된 API' 아래의 'Quay Registry' 타일에서 '인스턴스 생성'을 클릭합니다.
  4. 선택적으로 QuayRegistry 의 '이름'을 변경합니다. 이는 레지스트리의 호스트 이름에 영향을 미칩니다. 다른 모든 필드는 기본값으로 채워져 있습니다.
  5. 'Create'를 클릭하여 Quay Operator가 배포할 QuayRegistry 를 제출합니다.
  6. QuayRegistry 목록 보기로 리디렉션됩니다. 방금 생성한 QuayRegistry 를 클릭하여 세부 정보 보기를 확인합니다.
  7. 'Registry Endpoint'에 값이 있으면 이를 클릭하여 UI를 통해 새 Quay 레지스트리에 액세스합니다. 이제 '계정 만들기'를 선택하여 사용자를 생성하고 로그인할 수 있습니다.

9.1.1. Red Hat Quay UI를 사용하여 첫 번째 사용자 생성

다음 절차에 따라 Red Hat Quay UI에서 첫 번째 사용자를 생성합니다.

참고

이 절차에서는 FEATURE_USER_CREATION 구성 옵션이 false로 설정되지 않은 것으로 가정합니다. False 인 경우 UI의 계정 만들기 기능이 비활성화되고 API를 사용하여 첫 번째 사용자를 생성해야 합니다.

프로세스

  1. OpenShift Container Platform 콘솔에서 적절한 네임스페이스/프로젝트를 사용하여 Operator → 설치된 Operator 로 이동합니다.
  2. 새로 설치된 QuayRegistry 오브젝트를 클릭하여 세부 정보를 확인합니다. 예를 들면 다음과 같습니다.

    QuayRegistry details

  3. Registry Endpoint 에 값이 있으면 브라우저에서 이 URL로 이동합니다.
  4. Red Hat Quay 레지스트리 UI에서 계정 만들기 를 선택하여 사용자를 생성합니다. 예를 들면 다음과 같습니다.

    Create Account

  5. 사용자 이름 , 암호,이메일에 대한 세부 정보를 입력한 다음 Create Account 를 클릭합니다. 예를 들면 다음과 같습니다.

    Enter account details

첫 번째 사용자를 생성한 후 Red Hat Quay 레지스트리에 자동으로 로그인됩니다. 예를 들면 다음과 같습니다.

Initial log in

10장. QuayRegistry 오브젝트의 상태 보기

지정된 Red Hat Quay 배포의 라이프사이클 관찰 기능은 해당 QuayRegistry 오브젝트의 status 섹션에서 보고됩니다. Red Hat Quay Operator는 이 섹션을 지속적으로 업데이트하므로 Red Hat Quay 또는 관리형 종속성에서 문제 또는 상태 변경 사항을 찾을 수 있는 첫 번째 위치에 있어야 합니다.

10.1. 레지스트리 끝점 보기

Red Hat Quay를 사용할 준비가 되면 status.registryEndpoint 필드가 레지스트리의 공개적으로 사용 가능한 호스트 이름으로 채워집니다.

10.2. 사용 중인 Red Hat Quay 버전 보기

실행 중인 Red Hat Quay의 현재 버전은 status.currentVersion 으로 보고됩니다.

10.3. Red Hat Quay 배포의 조건 보기

특정 조건이 status.conditions 에 보고됩니다.

11장. OpenShift Container Platform에서 Red Hat Quay 사용자 정의

배포 후 Red Hat Quay 구성 번들 secret spec.configBundleSecret 을 편집하여 Red Hat Quay 애플리케이션을 사용자 지정할 수 있습니다. QuayRegistry 리소스의 spec.components 오브젝트에서 구성 요소의 관리 상태를 변경하고 일부 구성 요소에 대한 리소스 요청을 구성할 수도 있습니다.

11.1. OpenShift Container Platform 콘솔에서 구성 번들 시크릿 편집

다음 절차에 따라 OpenShift Container Platform 콘솔에서 구성 번들 시크릿을 편집합니다.

프로세스

  1. Red Hat Quay Registry 개요 화면에서 Config Bundle Secret 에 대한 링크를 클릭합니다.

    Red Hat Quay Registry overview

  2. 시크릿을 편집하려면 작업시크릿 편집을 클릭합니다.

    Edit secret

  3. 구성을 수정하고 변경 사항을 저장합니다.

    Save changes

  4. 배포를 모니터링하여 성공적으로 완료되고 구성 변경 사항이 적용되었는지 확인합니다.

11.2. QuayRegistry 엔드 포인트 및 시크릿 확인

다음 절차에 따라 QuayRegistry 엔드 포인트 및 시크릿을 찾으십시오.

프로세스

  1. oc describe quayregistry 또는 oc get quayregistry -o yaml 을 사용하여 QuayRegistry 리소스를 검사하여 다음 명령을 입력하여 현재 끝점 및 시크릿을 찾을 수 있습니다.

    $ oc get quayregistry example-registry -n quay-enterprise -o yaml
    Copy to Clipboard Toggle word wrap

    출력 예

    apiVersion: quay.redhat.com/v1
    kind: QuayRegistry
    metadata:
      ...
      name: example-registry
      namespace: quay-enterprise
      ...
    spec:
      components:
      - kind: quay
        managed: true
      ...
      - kind: clairpostgres
        managed: true
      configBundleSecret: init-config-bundle-secret 
    1
    
    status:
      currentVersion: 3.7.0
      lastUpdated: 2022-05-11 13:28:38.199476938 +0000 UTC
      registryEndpoint: https://example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org 
    2
    Copy to Clipboard Toggle word wrap

    1
    config.yaml 파일 및 모든 SSL/TLS 인증서가 포함된 구성 번들 시크릿입니다.
    2
    레지스트리의 URL, 레지스트리 UI에 대한 브라우저 액세스 및 레지스트리 API 끝점용 URL입니다.

11.3. 기존 구성 다운로드

다음 절차에서는 다양한 전략을 사용하여 기존 구성을 다운로드하는 방법을 자세히 설명합니다.

11.3.1. 구성 번들 시크릿을 사용하여 기존 구성 다운로드

구성 번들 시크릿을 사용하여 기존 구성을 다운로드할 수 있습니다.

프로세스

  1. 다음 명령을 입력하여 QuayRegistry 리소스를 설명합니다.

    $ oc describe quayregistry -n <quay_namespace>
    Copy to Clipboard Toggle word wrap
    # ...
      Config Bundle Secret:  example-registry-config-bundle-v123x
    # ...
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 입력하여 시크릿 데이터를 가져옵니다.

    $ oc get secret -n <quay_namespace> <example-registry-config-bundle-v123x> -o jsonpath='{.data}'
    Copy to Clipboard Toggle word wrap

    출력 예

    {
        "config.yaml": "RkVBVFVSRV9VU0 ... MDAwMAo="
    }
    Copy to Clipboard Toggle word wrap

  3. 다음 명령을 입력하여 데이터를 디코딩합니다.

    $ echo 'RkVBVFVSRV9VU0 ... MDAwMAo=' | base64 --decode
    Copy to Clipboard Toggle word wrap

    출력 예

    FEATURE_USER_INITIALIZE: true
    BROWSER_API_CALLS_XHR_ONLY: false
    SUPER_USERS:
    - quayadmin
    FEATURE_USER_CREATION: false
    FEATURE_QUOTA_MANAGEMENT: true
    FEATURE_PROXY_CACHE: true
    FEATURE_BUILD_SUPPORT: true
    DEFAULT_SYSTEM_REJECT_QUOTA_BYTES: 102400000
    Copy to Clipboard Toggle word wrap

  4. 선택 사항입니다. config.yaml 플래그를 전달하여 YAML 파일로 데이터를 현재 디렉터리로 내보낼 수 있습니다. 예를 들면 다음과 같습니다.

    $ echo 'RkVBVFVSRV9VU0 ... MDAwMAo=' | base64 --decode >> config.yaml
    Copy to Clipboard Toggle word wrap

OpenShift Container Platform에서 Red Hat Quay의 초기 배포 전이나 후에 사용자 정의 SSL/TLS 인증서를 구성할 수 있습니다. 이 프로세스에는 사용자 정의 인증서를 통합하기 위해 QuayRegistry YAML 파일 내에서 configBundleSecret 리소스를 생성하거나 업데이트해야 합니다.

참고

기존 배포에 인증서를 추가하는 경우 구성을 변경하지 않아도 기존 config.yaml 파일을 새 구성 번들 시크릿에 포함해야 합니다.

다음 절차를 통해 사용자 지정 SSL/TLS 인증서를 적용하여 OpenShift Container Platform 배포에서 Red Hat Quay에 대한 보안 통신을 보장하고 특정 보안 요구 사항을 충족할 수 있습니다. 이러한 단계에는 CA(인증 기관) 파일, ssl.keyssl.cert 생성이 포함됩니다. 그런 다음 해당 파일을 OpenShift Container Platform 배포의 Red Hat Quay에 통합하여 레지스트리가 지정된 보안 설정으로 작동하고 조직의 SSL/TLS 정책을 준수하는 방법을 보여줍니다.

참고

다음 절차는 HTTPS 인증서로 Red Hat Quay를 보호하는 데 사용됩니다. 이는 인증 기관 신뢰 번들 관리와 다릅니다. CA Trust Bundles는 Quay 컨테이너 내의 시스템 프로세스에서 사용하여 신뢰할 수 있는 CA에 대한 인증서를 확인하고 LDAP, 스토리지 백엔드 및 OIDC 연결과 같은 서비스를 신뢰할 수 있는지 확인합니다.

12.1. 인증 기관 생성

자체 서명된 인증서를 사용하여 Red Hat Quay를 구성하려면 먼저 CA(인증 기관)를 생성해야 합니다. 다음 절차를 사용하여 CA(인증 기관)를 생성합니다.

프로세스

  1. 다음 명령을 입력하여 루트 CA 키를 생성합니다.

    $ openssl genrsa -out rootCA.key 2048
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 입력하여 루트 CA 인증서를 생성합니다.

    $ openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem
    Copy to Clipboard Toggle word wrap
  3. 서버 호스트 이름을 포함하여 인증서 요청에 통합될 정보를 입력합니다. 예를 들면 다음과 같습니다.

    Country Name (2 letter code) [XX]:IE
    State or Province Name (full name) []:GALWAY
    Locality Name (eg, city) [Default City]:GALWAY
    Organization Name (eg, company) [Default Company Ltd]:QUAY
    Organizational Unit Name (eg, section) []:DOCS
    Common Name (eg, your name or your server's hostname) []:quay-server.example.com
    Copy to Clipboard Toggle word wrap

12.1.1. 인증서에 서명

다음 절차에 따라 인증서에 서명하십시오.

프로세스

  1. 다음 명령을 입력하여 서버 키를 생성합니다.

    $ openssl genrsa -out ssl.key 2048
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 입력하여 서명 요청을 생성합니다.

    $ openssl req -new -key ssl.key -out ssl.csr
    Copy to Clipboard Toggle word wrap
  3. 서버 호스트 이름을 포함하여 인증서 요청에 통합될 정보를 입력합니다. 예를 들면 다음과 같습니다.

    Country Name (2 letter code) [XX]:IE
    State or Province Name (full name) []:GALWAY
    Locality Name (eg, city) [Default City]:GALWAY
    Organization Name (eg, company) [Default Company Ltd]:QUAY
    Organizational Unit Name (eg, section) []:DOCS
    Common Name (eg, your name or your server's hostname) []:quay-server.example.com
    Email Address []:
    Copy to Clipboard Toggle word wrap
  4. 서버 호스트 이름을 지정하여 설정 파일 openssl.cnf 를 만듭니다. 예를 들면 다음과 같습니다.

    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 = <quay-server.example.com>
    IP.1 = 192.168.1.112
    Copy to Clipboard Toggle word wrap

  5. 구성 파일을 사용하여 인증서 ssl.cert 를 생성합니다.

    $ openssl x509 -req -in ssl.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out ssl.cert -days 356 -extensions v3_req -extfile openssl.cnf
    Copy to Clipboard Toggle word wrap

12.2. 사용자 정의 SSL/TLS configBundleSecret 리소스 생성

사용자 지정 SSL/TLS 인증서를 생성한 후 OpenShift Container Platform에서 Red Hat Quay에 대한 사용자 정의 configBundleSecret 리소스를 생성할 수 있으므로 ssl.certssl.key 파일을 업로드할 수 있습니다.

사전 요구 사항

  • base64에서 원래 구성 번들을 config.yaml 파일에 디코딩합니다.
  • 사용자 지정 SSL 인증서 및 키를 생성했습니다.

프로세스

  1. 새 YAML 파일(예: custom-ssl-config-bundle-secret.yaml )을 생성합니다.

    $ touch custom-ssl-config-bundle-secret.yaml
    Copy to Clipboard Toggle word wrap
  2. custom-ssl-config-bundle-secret 리소스를 생성합니다.

    1. 다음 명령을 입력하여 리소스를 생성합니다.

      $ oc -n <namespace> create secret generic custom-ssl-config-bundle-secret \
        --from-file=config.yaml=<config.yaml> \ 
      1
      
        --from-file=ssl.cert=<ssl.cert> \ 
      2
      
        --from-file=extra_ca_cert=<ca.cert> \ 
      3
      
        --from-file=ssl.key=<ssl.key> \ 
      4
      
        --dry-run=client -o yaml > custom-ssl-config-bundle-secret.yaml
      Copy to Clipboard Toggle word wrap
      1
      여기서 <config.yaml >은 base64 decoded config.yaml 파일입니다.
      2
      여기서 <ssl.cert >는 ssl.cert 파일입니다.
      3
      선택 사항입니다. --from-file=extra_ca_cert=<ca.cert > 필드를 사용하면 Red Hat Quay에서 사용자 정의 CA(인증 기관) 파일을 인식할 수 있습니다. LDAP, OIDC 또는 사용자 정의 CA를 사용하는 다른 서비스를 사용하는 경우 extra_ca_cert 경로를 통해 추가해야 합니다.
      4
      여기서 <ssl.key >는 ssl.key 파일입니다.
  3. 선택 사항입니다. 다음 명령을 입력하여 custom-ssl-config-bundle-secret.yaml 파일의 내용을 확인할 수 있습니다.

    $ cat custom-ssl-config-bundle-secret.yaml
    Copy to Clipboard Toggle word wrap

    출력 예

    apiVersion: v1
    data:
      config.yaml: QUxMT1dfUFVMTFNfV0lUSE9VVF9TVFJJQ1RfTE9HR0lORzogZmFsc2UKQVVUSEVOVElDQVRJT05fVFlQRTogRGF0YWJhc2UKREVGQVVMVF9UQUdfRVhQSVJBVElPTjogMncKRElTVFJJQlVURURfU1R...
      ssl.cert: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVYakNDQTBhZ0F3SUJBZ0lVTUFBRk1YVWlWVHNoMGxNTWI3U1l0eFV5eTJjd0RRWUpLb1pJaHZjTkFRRUwKQlFBd2dZZ3hDekFKQmdOVkJBWVR...
      extra_ca_cert:LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVYakNDQTBhZ0F3SUJBZ0lVTUFBRk1YVWlWVHNoMGxNTWI3U1l0eFV5eTJjd0RRWUpLb1pJaHZjTkFRRUwKQlFBd2dZZ3hDe...
      ssl.key: LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2UUlCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktjd2dnU2pBZ0VBQW9JQkFRQ2c0VWxZOVV1SVJPY1oKcFhpZk9MVEdqaS9neUxQMlpiMXQ...
    kind: Secret
    metadata:
      creationTimestamp: null
      name: custom-ssl-config-bundle-secret
      namespace: <namespace>
    Copy to Clipboard Toggle word wrap

  4. 다음 명령을 입력하여 configBundleSecret 리소스를 생성합니다.

    $ oc create -n <namespace> -f custom-ssl-config-bundle-secret.yaml
    Copy to Clipboard Toggle word wrap

    출력 예

    secret/custom-ssl-config-bundle-secret created
    Copy to Clipboard Toggle word wrap

  5. 다음 명령을 입력하여 custom-ssl-config-bundle-secret 오브젝트를 참조하도록 QuayRegistry YAML 파일을 업데이트합니다.

    $ oc patch quayregistry <registry_name> -n <namespace> --type=merge -p '{"spec":{"configBundleSecret":"custom-ssl-config-bundle-secret"}}'
    Copy to Clipboard Toggle word wrap

    출력 예

    quayregistry.quay.redhat.com/example-registry patched
    Copy to Clipboard Toggle word wrap

  6. 다음 명령을 입력하여 QuayRegistry YAML의 tls 구성 요소를 False 로 설정합니다.

    $ oc patch quayregistry <registry_name> -n <namespace> --type=merge -p '{"spec":{"components":[{"kind":"tls","managed":false}]}}'
    Copy to Clipboard Toggle word wrap

    출력 예

    quayregistry.quay.redhat.com/example-registry patched
    Copy to Clipboard Toggle word wrap

  7. 다음 명령을 입력하여 사용자 정의 SSL configBundleSecret 리소스를 사용하도록 QuayRegistry YAML 파일이 업데이트되었는지, 및 tls 리소스가 False 로 설정되어 있는지 확인합니다.

    $ oc get quayregistry <registry_name> -n <namespace> -o yaml
    Copy to Clipboard Toggle word wrap

    출력 예

    # ...
      configBundleSecret: custom-ssl-config-bundle-secret
    # ...
    spec:
      components:
      - kind: tls
        managed: false
    # ...
    Copy to Clipboard Toggle word wrap

검증

  • 다음 명령을 입력하여 서버 및 포트에 대한 TLS 연결을 확인합니다.

    $  openssl s_client -connect <quay-server.example.com>:443
    Copy to Clipboard Toggle word wrap

    출력 예

    # ...
    SSL-Session:
        Protocol  : TLSv1.3
        Cipher    : TLS_AES_256_GCM_SHA384
        Session-ID: 0E995850DC3A8EB1A838E2FF06CE56DBA81BD8443E7FA05895FBD6FBDE9FE737
        Session-ID-ctx:
        Resumption PSK: 1EA68F33C65A0F0FA2655BF9C1FE906152C6E3FEEE3AEB6B1B99BA7C41F06077989352C58E07CD2FBDC363FA8A542975
        PSK identity: None
        PSK identity hint: None
        SRP username: None
        TLS session ticket lifetime hint: 7200 (seconds)
    
    # ...
    Copy to Clipboard Toggle word wrap

다음 단계

법적 공지

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

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

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

Red Hat 소개

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

Theme

© 2025 Red Hat