OpenShift에 Apicurio 레지스트리 설치 및 배포

Red Hat build of Apicurio Registry 2.3

Apicurio Registry 설치 및 배포 2.3

Red Hat build of Apicurio Registry Documentation Team

초록

이 가이드에서는 AMQ Streams 또는 PostgreSQL 데이터베이스의 레지스트리 데이터 스토리지 옵션을 사용하여 OpenShift에 Apicurio Registry를 설치하고 배포하는 방법을 설명합니다. 또한 이 가이드에서는 Apicurio Registry의 보안, 구성, 관리 방법을 보여주고 Apicurio Registry Operator에 대한 참조 정보를 제공합니다.

머리말

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

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 용어를 교체하기 위해 최선을 다하고 있습니다. 먼저 마스터(master), 슬레이브(slave), 블랙리스트(blacklist), 화이트리스트(whitelist) 등 네 가지 용어를 교체하고 있습니다. 이러한 변경 작업은 작업 범위가 크므로 향후 여러 릴리스에 걸쳐 점차 구현할 예정입니다. 자세한 내용은 CTO Chris Wright의 메시지를 참조하십시오.

1장. Service Registry Operator 빠른 시작

CRD(Custom Resource Definitions)를 사용하여 명령줄에서 Service Registry Operator를 빠르게 설치할 수 있습니다.

빠른 시작 예제에서는 SQL 데이터베이스에 스토리지와 함께 Apicurio Registry 인스턴스를 배포합니다.

참고

프로덕션 환경에 권장되는 설치 옵션은 OpenShift OperatorHub입니다. 권장되는 스토리지 옵션은 성능, 안정성 및 데이터 관리를 위한 SQL 데이터베이스입니다.

1.1. 빠른 시작 Service Registry Operator 설치

다운로드한 설치 파일 및 예제 CRD 세트를 사용하여 Operator Lifecycle Manager 없이 명령줄에 Service Registry Operator를 신속하게 설치하고 배포할 수 있습니다.

사전 요구 사항

  • 관리자 액세스 권한이 있는 OpenShift 클러스터에 로그인되어 있습니다.
  • OpenShift oc 명령줄 클라이언트가 설치되어 있어야 합니다. 자세한 내용은 OpenShift CLI 설명서를 참조하십시오.

절차

  1. Red Hat Software Downloads 로 이동하여 제품 버전을 선택한 후 Apicurio Registry CRDs .zip 파일에서 예제를 다운로드합니다.
  2. 다운로드한 CRD .zip 파일을 추출하고 apicurio-registry-install-examples 디렉터리로 변경합니다.
  3. Service Registry Operator 설치에 사용할 OpenShift 프로젝트를 생성합니다. 예를 들면 다음과 같습니다.

    export NAMESPACE="apicurio-registry"
    oc new-project "$NAMESPACE"
  4. install/install.yaml 파일에서 예제 CRD를 적용하려면 다음 명령을 입력합니다.

    cat install/install.yaml | sed "s/apicurio-registry-operator-namespace/$NAMESPACE/g" | oc apply -f -
  5. oc get deployment 를 입력하여 Service Registry Operator의 준비 상태를 확인합니다. 예를 들어 출력은 다음과 같아야 합니다.

    NAME                     	READY   UP-TO-DATE  AVAILABLE   AGE
    apicurio-registry-operator  1/1 	1        	1       	XmYs

1.2. 빠른 시작 Apicurio Registry 인스턴스 배포

Apicurio Registry 인스턴스 배포를 생성하려면 SQL 데이터베이스 스토리지 옵션을 사용하여 기존 PostgreSQL 데이터베이스에 연결합니다.

사전 요구 사항

  • Service Registry Operator가 설치되었는지 확인합니다.
  • OpenShift 클러스터에서 연결할 수 있는 PostgreSQL 데이터베이스가 있습니다.

절차

  1. 편집기에서 examples/apicurioregistry_sql_cr.yaml 파일을 열고 ApicurioRegistry 사용자 정의 리소스 (CR)를 확인합니다.

    SQL 스토리지용 CR의 예

    apiVersion: registry.apicur.io/v1
    kind: ApicurioRegistry
    metadata:
      name: example-apicurioregistry-sql
    spec:
      configuration:
        persistence: "sql"
        sql:
          dataSource:
            url: "jdbc:postgresql://<service name>.<namespace>.svc:5432/<database name>"
            userName: "postgres"
            password: "<password>" # Optional

  2. dataSource 섹션에서 예제 설정을 데이터베이스 연결 세부 정보로 교체합니다. 예를 들면 다음과 같습니다.

    dataSource:
        url: "jdbc:postgresql://postgresql.apicurio-registry.svc:5432/registry"
        userName: "pgadmin"
        password: "pgpass"
  3. 다음 명령을 입력하여 Apicurio Registry Operator를 사용하여 네임스페이스에서 업데이트된 ApicurioRegistry CR을 적용하고 Apicurio Registry 인스턴스가 배포할 때까지 기다립니다.

    oc project "$NAMESPACE"
    oc apply -f ./examples/apicurioregistry_sql_cr.yaml
  4. oc get deployment 를 입력하여 Apicurio Registry 인스턴스의 준비 상태를 확인합니다. 예를 들어 출력은 다음과 같아야 합니다.

    NAME                     	        READY UP-TO-DATE AVAILABLE AGE
    example-apicurioregistry-sql-deployment 1/1   1          1         XmYs
  5. oc get routes 를 입력하여 HOST/PORT URL을 가져와서 브라우저에서 Apicurio Registry 웹 콘솔을 시작합니다. 예를 들면 다음과 같습니다.

    example-apicurioregistry-sql.apicurio-registry.router-default.apps.mycluster.myorg.mycompany.com

2장. OpenShift에 Apicurio Registry 설치

이 장에서는 OpenShift Container Platform에 Apicurio Registry를 설치하는 방법을 설명합니다.

2.1. OpenShift OperatorHub에서 Apicurio Registry 설치

OperatorHub에서 OpenShift 클러스터에 Apicurio Registry Operator를 설치할 수 있습니다. OperatorHub는 OpenShift Container Platform 웹 콘솔에서 사용할 수 있으며 클러스터 관리자가 Operator를 검색하고 설치할 수 있는 인터페이스를 제공합니다. 자세한 내용은 OperatorHub 이해를 참조하십시오.

참고

환경에 따라 Apicurio Registry의 두 개 이상의 인스턴스를 설치할 수 있습니다. 인스턴스 수는 Apicurio Registry 및 선택한 스토리지 옵션에 저장된 아티팩트 수 및 유형에 따라 다릅니다.

사전 요구 사항

  • OpenShift 클러스터에 대한 클러스터 관리자 액세스 권한이 있어야 합니다.

절차

  1. OpenShift Container Platform 웹 콘솔에서 클러스터 관리자 권한이 있는 계정을 사용하여 로그인합니다.
  2. 새 OpenShift 프로젝트를 생성합니다.

    1. 왼쪽 탐색 메뉴에서 ,프로젝트 및 프로젝트 만들기 를 클릭합니다.
    2. 프로젝트 이름(예: my-project )을 입력하고 생성을 클릭합니다.
  3. 왼쪽 탐색 메뉴에서 Operators 를 클릭한 다음 OperatorHub 를 클릭합니다.
  4. 키워드로 필터링 텍스트 상자에 레지스트리 를 입력하여 Red Hat Integration - Service Registry Operator 를 찾습니다.
  5. Operator에 대한 정보를 읽고 설치를 클릭하여 Operator 서브스크립션 페이지를 표시합니다.
  6. 서브스크립션 설정을 선택합니다. 예를 들면 다음과 같습니다.

    • Update Channel: 다음 중 하나를 선택합니다.

      • 2.x: 2.3.0 및 2.0.3과 같은 모든 마이너 및 패치 업데이트를 포함합니다. 예를 들어 2.0.x에 설치가 2.3.x로 업그레이드됩니다.
      • 2.0.x: 2.0.1 및 2.0.2와 같은 패치 업데이트만 포함합니다. 예를 들어 2.0.x 설치는 2.3.x를 무시합니다.
    • 설치 모드: 다음 중 하나를 선택합니다.

      • 클러스터의 모든 네임스페이스(기본값)
      • 클러스터의 특정 네임스페이스my-project
    • 승인 전략: 자동 또는 수동을 선택합니다.
  7. 설치를 클릭하고 Operator를 사용할 준비가 될 때까지 잠시 기다립니다.

3장. AMQ Streams에 Apicurio Registry 스토리지 배포

이 장에서는 AMQ Streams에서 Apicurio Registry 데이터 스토리지를 설치 및 구성하는 방법을 설명합니다.

3.1. OpenShift OperatorHub에서 AMQ Streams 설치

AMQ Streams가 설치되어 있지 않은 경우 OperatorHub에서 OpenShift 클러스터에 AMQ Streams Operator를 설치할 수 있습니다. OperatorHub는 OpenShift Container Platform 웹 콘솔에서 사용할 수 있으며 클러스터 관리자가 Operator를 검색하고 설치할 수 있는 인터페이스를 제공합니다. 자세한 내용은 OperatorHub 이해를 참조하십시오.

사전 요구 사항

절차

  1. OpenShift Container Platform 웹 콘솔에서 클러스터 관리자 권한이 있는 계정을 사용하여 로그인합니다.
  2. AMQ Streams를 설치할 OpenShift 프로젝트로 변경합니다. 예를 들어 프로젝트 드롭다운에서 my-project 를 선택합니다.
  3. 왼쪽 탐색 메뉴에서 Operators 를 클릭한 다음 OperatorHub 를 클릭합니다.
  4. 키워드로 필터링 텍스트 상자에 AMQ Streams 를 입력하여 Red Hat Integration - AMQ Streams Operator를 찾습니다.
  5. Operator에 대한 정보를 읽고 설치를 클릭하여 Operator 서브스크립션 페이지를 표시합니다.
  6. 서브스크립션 설정을 선택합니다. 예를 들면 다음과 같습니다.

    • 채널을 업데이트한 다음 amq-streams-2.3.x
    • 설치 모드: 다음 중 하나를 선택합니다.

      • 클러스터의 모든 네임스페이스(기본값)
      • 클러스터의 특정 네임스페이스 > my-project
    • 승인 전략: 자동 또는 수동을 선택합니다.
  7. 설치를 클릭하고 Operator를 사용할 준비가 될 때까지 잠시 기다립니다.

3.2. OpenShift에서 Kafka 스토리지를 사용하여 Apicurio 레지스트리 구성

이 섹션에서는 OpenShift에서 AMQ Streams를 사용하여 Apicurio Registry의 Kafka 기반 스토리지를 구성하는 방법을 설명합니다. kafkasql 스토리지 옵션은 메모리 내 H2 데이터베이스의 Kafka 스토리지를 사용합니다. 이 스토리지 옵션은 OpenShift의 Kafka 클러스터에 대해 영구 스토리지가 구성된 경우 프로덕션 환경에 적합합니다.

기존 Kafka 클러스터에 Apicurio Registry를 설치하거나 환경에 따라 새 Kafka 클러스터를 생성할 수 있습니다.

사전 요구 사항

절차

  1. OpenShift Container Platform 웹 콘솔에서 클러스터 관리자 권한이 있는 계정을 사용하여 로그인합니다.
  2. Kafka 클러스터가 구성되어 있지 않은 경우 AMQ Streams를 사용하여 새 Kafka 클러스터를 생성합니다. 예를 들어 OpenShift OperatorHub에서 다음을 수행합니다.

    1. 설치된 Operators 를 클릭한 다음 Red Hat Integration - AMQ Streams 를 클릭합니다.
    2. 제공된 API 에서 Kafka 를 클릭한 다음 인스턴스 생성을 클릭하여 새 Kafka 클러스터를 생성합니다.
    3. 사용자 정의 리소스 정의를 적절하게 편집하고 생성을 클릭합니다.

      주의

      기본 예제에서는 3개의 Zookeeper 노드와 임시 스토리지가 있는 Kafka 노드 3개가 있는 클러스터를 생성합니다. 이 임시 스토리지는 개발 및 테스트에만 적합하며 프로덕션에는 적합하지 않습니다. 자세한 내용은 OpenShift에서 AMQ Streams 배포 및 업그레이드를 참조하십시오.

  3. 클러스터가 준비되면 제공된 API > Kafka > my-cluster > YAML 을 클릭합니다.
  4. 상태 블록에서 나중에 Apicurio Registry를 배포하는 데 사용할 bootstrapServers 값의 사본을 만듭니다. 예를 들면 다음과 같습니다.

    status:
      ...
      conditions:
      ...
      listeners:
        - addresses:
            - host: my-cluster-kafka-bootstrap.my-project.svc
              port: 9092
          bootstrapServers: 'my-cluster-kafka-bootstrap.my-project.svc:9092'
          type: plain
      ...
  5. 설치된 Operators > Red Hat Integration - Service Registry > ApicurioRegistry > Create ApicurioRegistry 를 클릭합니다.
  6. 다음 사용자 정의 리소스 정의에 붙여넣지만 이전에 복사한 bootstrapServers 값을 사용합니다.

    apiVersion: registry.apicur.io/v1
    kind: ApicurioRegistry
    metadata:
      name: example-apicurioregistry-kafkasql
    spec:
      configuration:
        persistence: 'kafkasql'
        kafkasql:
          bootstrapServers: 'my-cluster-kafka-bootstrap.my-project.svc:9092'
  7. 생성을 클릭하고 OpenShift에서 Apicurio 레지스트리 경로가 생성될 때까지 기다립니다.
  8. 네트워킹 > 경로를 클릭하여 Apicurio Registry 웹 콘솔의 새 경로에 액세스합니다. 예를 들면 다음과 같습니다.

    http://example-apicurioregistry-kafkasql.my-project.my-domain-name.com/
  9. Apicurio Registry가 데이터를 저장하는 데 사용하는 Kafka 주제를 구성하려면 설치된 Operator > Red Hat Integration - AMQ Streams > Provided APIs > Kafka Topic > kafkasql-journal > YAML 을 클릭합니다. 예를 들면 다음과 같습니다.

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaTopic
    metadata:
      name: kafkasql-journal
      labels:
        strimzi.io/cluster: my-cluster
      namespace: ...
    spec:
      partitions: 3
      replicas: 3
      config:
        cleanup.policy: compact
    주의

    Apicurio Registry에서 사용하는 Kafka 주제(기본적으로 kafkasql-journal )를 압축 정리 정책을 사용하여 구성해야 합니다. 그렇지 않으면 데이터 손실이 발생할 수 있습니다.

추가 리소스

3.3. TLS 보안을 사용하여 Kafka 스토리지 구성

암호화된 TLS(Transport Layer Security) 연결을 사용하도록 AMQ Streams Operator 및 Service Registry Operator를 구성할 수 있습니다.

사전 요구 사항

  • OperatorHub 또는 명령줄을 사용하여 Service Registry Operator를 설치했습니다.
  • AMQ Streams Operator를 설치하거나 OpenShift 클러스터에서 Kafka에 액세스할 수 있습니다.
참고

이 섹션에서는 AMQ Streams Operator를 사용할 수 있다고 가정하지만 Kafka 배포를 사용할 수 있습니다. 이 경우 Service Registry Operator에서 예상하는 Openshift 시크릿을 수동으로 생성해야 합니다.

절차

  1. OpenShift 웹 콘솔에서 설치된 Operator를 클릭하고 AMQ Streams Operator 세부 정보를 선택한 다음 Kafka 탭을 선택합니다.
  2. Kafka 생성을 클릭하여 Apicurio 레지스트리 스토리지에 대한 새 Kafka 클러스터를 프로비저닝합니다.
  3. Kafka 클러스터에 TLS 인증을 사용하도록 권한 부여tls 필드를 구성합니다. 예를 들면 다음과 같습니다.

    apiVersion: kafka.strimzi.io/v1beta2
    kind: Kafka
    metadata:
      name: my-cluster
      namespace: registry-example-kafkasql-tls
      # Change or remove the explicit namespace
    spec:
      kafka:
        config:
          offsets.topic.replication.factor: 3
          transaction.state.log.replication.factor: 3
          transaction.state.log.min.isr: 2
          log.message.format.version: '2.7'
          inter.broker.protocol.version: '2.7'
        version: 2.7.0
        storage:
          type: ephemeral
        replicas: 3
        listeners:
          - name: tls
            port: 9093
            type: internal
            tls: true
            authentication:
              type: tls
        authorization:
          type: simple
      entityOperator:
        topicOperator: {}
        userOperator: {}
      zookeeper:
        storage:
          type: ephemeral
        replicas: 3

    데이터를 저장하기 위해 Apicurio Registry에서 자동으로 생성되는 기본 Kafka 주제 이름은 kafkasql-journal 입니다. 환경 변수를 설정하여 이 동작 또는 기본 주제 이름을 재정의할 수 있습니다. 기본값은 다음과 같습니다.

    • REGISTRY_KAFKASQL_TOPIC_AUTO_CREATE=true
    • REGISTRY_KAFKASQL_TOPIC=kafkasql-journal

    Kafka 주제를 수동으로 생성하지 않으려면 다음 단계를 건너뜁니다.

  4. Kafka 주제 탭을 클릭한 다음 Kafka 주제 만들기 를 클릭하여 kafkasql-journal 주제를 생성합니다.

    apiVersion: kafka.strimzi.io/v1beta1
    kind: KafkaTopic
    metadata:
      name: kafkasql-journal
      labels:
        strimzi.io/cluster: my-cluster
      namespace: registry-example-kafkasql-tls
    spec:
      partitions: 2
      replicas: 1
      config:
        cleanup.policy: compact
  5. Kafka 사용자 리소스를 생성하여 Apicurio Registry 사용자에 대한 인증 및 권한 부여를 구성합니다. metadata 섹션에 사용자 이름을 지정하거나 기본 my-user 를 사용할 수 있습니다.

    apiVersion: kafka.strimzi.io/v1beta1
    kind: KafkaUser
    metadata:
      name: my-user
      labels:
        strimzi.io/cluster: my-cluster
      namespace: registry-example-kafkasql-tls
    spec:
      authentication:
        type: tls
      authorization:
        acls:
          - operation: All
            resource:
              name: '*'
              patternType: literal
              type: topic
          - operation: All
            resource:
              name: '*'
              patternType: literal
              type: cluster
          - operation: All
            resource:
              name: '*'
              patternType: literal
              type: transactionalId
          - operation: All
            resource:
              name: '*'
              patternType: literal
              type: group
        type: simple
    참고

    이 간단한 예제에서는 admin 권한을 가정하고 Kafka 주제를 자동으로 생성합니다. Apicurio 레지스트리에 필요한 주제 및 리소스에 대해 특별히 권한 부여 섹션을 구성해야 합니다.

    다음 예제에서는 Kafka 주제를 수동으로 생성할 때 필요한 최소 구성을 보여줍니다.

     ...
      authorization:
        acls:
        - operations:
            - Read
            - Write
          resource:
            name: kafkasql-journal
            patternType: literal
            type: topic
        - operations:
            - Read
            - Write
          resource:
            name: apicurio-registry-
            patternType: prefix
            type: group
        type: simple
  6. 워크로드 를 클릭한 다음 시크릿을 클릭하여 Apicurio Registry에서 Kafka 클러스터에 연결할 수 있도록 AMQ Streams에서 생성하는 두 가지 시크릿을 찾습니다.

    • my-cluster-cluster-ca-cert - Kafka 클러스터의 PKCS12 신뢰 저장소 포함
    • my-user - 사용자의 키 저장소를 포함합니다.

      참고

      시크릿 이름은 클러스터 또는 사용자 이름에 따라 다를 수 있습니다.

  7. 보안을 수동으로 생성하는 경우 다음 키-값 쌍을 포함해야 합니다.

    • my-cluster-ca-cert

      • ca.p12 - PKCS12 형식의 신뢰 저장소
      • ca.password - truststore password
    • my-user

      • user.p12 - PKCS12 형식의 키 저장소
      • user.password - keystore password
  8. Apicurio Registry를 배포하도록 다음 예제 구성을 구성합니다.

    apiVersion: registry.apicur.io/v1
    kind: ApicurioRegistry
    metadata:
      name: example-apicurioregistry-kafkasql-tls
    spec:
      configuration:
        persistence: "kafkasql"
        kafkasql:
          bootstrapServers: "my-cluster-kafka-bootstrap.registry-example-kafkasql-tls.svc:9093"
          security:
            tls:
              keystoreSecretName: my-user
              truststoreSecretName: my-cluster-cluster-ca-cert
중요

비보안 일반 사용 사례와 다른 bootstrapServers 주소를 사용해야 합니다. 주소는 TLS 연결을 지원해야 하며 type: tls 필드 아래의 지정된 Kafka 리소스에 있습니다.

3.4. SCRAM 보안을 사용하여 Kafka 스토리지 구성

Kafka 클러스터에 Salted Challenge Response Authentication Mechanism(SCRAM-SHA-512)을 사용하도록 AMQ Streams Operator 및 Service Registry Operator를 구성할 수 있습니다.

사전 요구 사항

  • OperatorHub 또는 명령줄을 사용하여 Service Registry Operator를 설치했습니다.
  • AMQ Streams Operator를 설치하거나 OpenShift 클러스터에서 Kafka에 액세스할 수 있습니다.
참고

이 섹션에서는 AMQ Streams Operator를 사용할 수 있다고 가정하지만 Kafka 배포를 사용할 수 있습니다. 이 경우 Service Registry Operator에서 예상하는 Openshift 시크릿을 수동으로 생성해야 합니다.

절차

  1. OpenShift 웹 콘솔에서 설치된 Operator를 클릭하고 AMQ Streams Operator 세부 정보를 선택한 다음 Kafka 탭을 선택합니다.
  2. Kafka 생성을 클릭하여 Apicurio 레지스트리 스토리지에 대한 새 Kafka 클러스터를 프로비저닝합니다.
  3. Kafka 클러스터에 SCRAM-SHA-512 인증을 사용하도록 권한 부여tls 필드를 구성합니다. 예를 들면 다음과 같습니다.

    apiVersion: kafka.strimzi.io/v1beta2
    kind: Kafka
    metadata:
      name: my-cluster
      namespace: registry-example-kafkasql-scram
      # Change or remove the explicit namespace
    spec:
      kafka:
        config:
          offsets.topic.replication.factor: 3
          transaction.state.log.replication.factor: 3
          transaction.state.log.min.isr: 2
          log.message.format.version: '2.7'
          inter.broker.protocol.version: '2.7'
        version: 2.7.0
        storage:
          type: ephemeral
        replicas: 3
        listeners:
          - name: tls
            port: 9093
            type: internal
            tls: true
            authentication:
              type: scram-sha-512
        authorization:
          type: simple
      entityOperator:
        topicOperator: {}
        userOperator: {}
      zookeeper:
        storage:
          type: ephemeral
        replicas: 3

    데이터를 저장하기 위해 Apicurio Registry에서 자동으로 생성되는 기본 Kafka 주제 이름은 kafkasql-journal 입니다. 환경 변수를 설정하여 이 동작 또는 기본 주제 이름을 재정의할 수 있습니다. 기본값은 다음과 같습니다.

    • REGISTRY_KAFKASQL_TOPIC_AUTO_CREATE=true
    • REGISTRY_KAFKASQL_TOPIC=kafkasql-journal

    Kafka 주제를 수동으로 생성하지 않으려면 다음 단계를 건너뜁니다.

  4. Kafka 주제 탭을 클릭한 다음 Kafka 주제 만들기 를 클릭하여 kafkasql-journal 주제를 생성합니다.

    apiVersion: kafka.strimzi.io/v1beta1
    kind: KafkaTopic
    metadata:
      name: kafkasql-journal
      labels:
        strimzi.io/cluster: my-cluster
      namespace: registry-example-kafkasql-scram
    spec:
      partitions: 2
      replicas: 1
      config:
        cleanup.policy: compact
  5. Kafka 사용자 리소스를 생성하여 Apicurio 레지스트리 사용자에 대한 SCRAM 인증 및 권한 부여를 구성합니다. metadata 섹션에 사용자 이름을 지정하거나 기본 my-user 를 사용할 수 있습니다.

    apiVersion: kafka.strimzi.io/v1beta1
    kind: KafkaUser
    metadata:
      name: my-user
      labels:
        strimzi.io/cluster: my-cluster
      namespace: registry-example-kafkasql-scram
    spec:
      authentication:
        type: scram-sha-512
      authorization:
        acls:
          - operation: All
            resource:
              name: '*'
              patternType: literal
              type: topic
          - operation: All
            resource:
              name: '*'
              patternType: literal
              type: cluster
          - operation: All
            resource:
              name: '*'
              patternType: literal
              type: transactionalId
          - operation: All
            resource:
              name: '*'
              patternType: literal
              type: group
        type: simple
    참고

    이 간단한 예제에서는 admin 권한을 가정하고 Kafka 주제를 자동으로 생성합니다. Apicurio 레지스트리에 필요한 주제 및 리소스에 대해 특별히 권한 부여 섹션을 구성해야 합니다.

    다음 예제에서는 Kafka 주제를 수동으로 생성할 때 필요한 최소 구성을 보여줍니다.

     ...
      authorization:
        acls:
        - operations:
            - Read
            - Write
          resource:
            name: kafkasql-journal
            patternType: literal
            type: topic
        - operations:
            - Read
            - Write
          resource:
            name: apicurio-registry-
            patternType: prefix
            type: group
        type: simple
  6. 워크로드 를 클릭한 다음 시크릿을 클릭하여 Apicurio Registry에서 Kafka 클러스터에 연결할 수 있도록 AMQ Streams에서 생성하는 두 가지 시크릿을 찾습니다.

    • my-cluster-cluster-ca-cert - Kafka 클러스터의 PKCS12 신뢰 저장소 포함
    • my-user - 사용자의 키 저장소를 포함합니다.

      참고

      시크릿 이름은 클러스터 또는 사용자 이름에 따라 다를 수 있습니다.

  7. 보안을 수동으로 생성하는 경우 다음 키-값 쌍을 포함해야 합니다.

    • my-cluster-ca-cert

      • ca.p12 - PKCS12 형식의 신뢰 저장소
      • ca.password - truststore password
    • my-user

      • 암호 - 사용자 암호
  8. Apicurio Registry를 배포하려면 다음 예제 설정을 구성합니다.

    apiVersion: registry.apicur.io/v1
    kind: ApicurioRegistry
    metadata:
      name: example-apicurioregistry-kafkasql-scram
    spec:
      configuration:
        persistence: "kafkasql"
        kafkasql:
          bootstrapServers: "my-cluster-kafka-bootstrap.registry-example-kafkasql-scram.svc:9093"
          security:
            scram:
              truststoreSecretName: my-cluster-cluster-ca-cert
              user: my-user
              passwordSecretName: my-user
중요

비보안 일반 사용 사례와 다른 bootstrapServers 주소를 사용해야 합니다. 주소는 TLS 연결을 지원해야 하며 type: tls 필드 아래의 지정된 Kafka 리소스에 있습니다.

3.5. Kafka 스토리지에 대한 OAuth 인증 구성

AMQ Streams에서 Kafka 기반 스토리지를 사용하는 경우 Apicurio Registry는 OAuth 인증이 필요한 Kafka 클러스터 액세스를 지원합니다. 이 지원을 활성화하려면 Apicurio Registry 배포에서 일부 환경 변수를 설정해야 합니다.

이러한 환경 변수를 설정하면 Apicurio 레지스트리의 Kafka 생산자 및 소비자 애플리케이션은 이 구성을 사용하여 OAuth를 통해 Kafka 클러스터에 인증합니다.

사전 요구 사항

절차

  • Apicurio Registry 배포에서 다음 환경 변수를 설정합니다.

    환경 변수설명기본값

    ENABLE_KAFKA_SASL

    Kafka에서 Apicurio Registry 스토리지에 대한 SASL OAuth 인증을 활성화합니다. 다른 변수가 적용되려면 이 변수를 true 로 설정해야 합니다.

    false

    CLIENT_ID

    Kafka 인증에 사용되는 클라이언트 ID입니다.

    -

    CLIENT_SECRET

    Kafka 인증에 사용되는 클라이언트 시크릿입니다.

    -

    OAUTH_TOKEN_ENDPOINT_URI

    OAuth ID 서버의 URL입니다.

    http://localhost:8090

추가 리소스

4장. PostgreSQL 데이터베이스에 Apicurio 레지스트리 스토리지 배포

이 장에서는 PostgreSQL 데이터베이스에서 Apicurio Registry 데이터 스토리지를 설치, 구성, 관리하는 방법을 설명합니다.

4.1. OpenShift OperatorHub에서 PostgreSQL 데이터베이스 설치

PostgreSQL 데이터베이스 Operator가 설치되어 있지 않은 경우 OperatorHub에서 OpenShift 클러스터에 PostgreSQL Operator를 설치할 수 있습니다. OperatorHub는 OpenShift Container Platform 웹 콘솔에서 사용할 수 있으며 클러스터 관리자가 Operator를 검색하고 설치할 수 있는 인터페이스를 제공합니다. 자세한 내용은 OperatorHub 이해를 참조하십시오.

사전 요구 사항

  • OpenShift 클러스터에 대한 클러스터 관리자 액세스 권한이 있어야 합니다.

절차

  1. OpenShift Container Platform 웹 콘솔에서 클러스터 관리자 권한이 있는 계정을 사용하여 로그인합니다.
  2. PostgreSQL Operator를 설치할 OpenShift 프로젝트로 변경합니다. 예를 들어 프로젝트 드롭다운에서 my-project 를 선택합니다.
  3. 왼쪽 탐색 메뉴에서 Operators 를 클릭한 다음 OperatorHub 를 클릭합니다.
  4. 키워드로 필터링 텍스트 상자에 PostgreSQL 을 입력하여 환경에 적합한 Operator를 찾습니다(예: OpenShift용 Crunchy PostgreSQL ).
  5. Operator에 대한 정보를 읽고 설치를 클릭하여 Operator 서브스크립션 페이지를 표시합니다.
  6. 서브스크립션 설정을 선택합니다. 예를 들면 다음과 같습니다.

    • 업데이트 채널:stable
    • 설치 모드:클러스터의 특정 네임스페이스my-project
    • 승인 전략: 자동 또는 수동을 선택합니다.
  7. 설치를 클릭하고 Operator를 사용할 준비가 될 때까지 잠시 기다립니다.

    중요

    데이터베이스를 생성하고 관리하는 방법에 대한 자세한 내용은 선택한 PostgreSQL Operator의 문서를 참조하십시오.

4.2. OpenShift에서 PostgreSQL 데이터베이스 스토리지를 사용하여 Apicurio Registry 구성

이 섹션에서는 PostgreSQL 데이터베이스 Operator를 사용하여 OpenShift에서 Apicurio Registry의 스토리지를 구성하는 방법을 설명합니다. Apicurio Registry를 기존 데이터베이스에 설치하거나 환경에 따라 새 데이터베이스를 생성할 수 있습니다. 이 섹션에서는 Dev4Ddevs.com의 PostgreSQL Operator를 사용하는 간단한 예를 보여줍니다.

사전 요구 사항

절차

  1. OpenShift Container Platform 웹 콘솔에서 클러스터 관리자 권한이 있는 계정을 사용하여 로그인합니다.
  2. Apicurio Registry 및 PostgreSQL Operator가 설치된 OpenShift 프로젝트로 변경합니다. 예를 들어 프로젝트 드롭다운에서 my-project 를 선택합니다.
  3. Apicurio 레지스트리 스토리지에 사용할 PostgreSQL 데이터베이스를 생성합니다. 예를 들어 설치된 Operator , Dev4Ddevs.com의 PostgreSQL Operator 를 클릭한 다음 Create database 를 클릭합니다.
  4. YAML 을 클릭하고 다음과 같이 데이터베이스 설정을 편집합니다.

    • name: 값을 registry로 변경
    • 이미지: 값을 centos/postgresql-12-centos7로 변경합니다.
  5. 환경에 따라 필요에 따라 다른 데이터베이스 설정을 편집합니다. 예를 들면 다음과 같습니다.

    apiVersion: postgresql.dev4devs.com/v1alpha1
    kind: Database
    metadata:
      name: registry
      namespace: my-project
    spec:
      databaseCpu: 30m
      databaseCpuLimit: 60m
      databaseMemoryLimit: 512Mi
      databaseMemoryRequest: 128Mi
      databaseName: example
      databaseNameKeyEnvVar: POSTGRESQL_DATABASE
      databasePassword: postgres
      databasePasswordKeyEnvVar: POSTGRESQL_PASSWORD
      databaseStorageRequest: 1Gi
      databaseUser: postgres
      databaseUserKeyEnvVar: POSTGRESQL_USER
      image: centos/postgresql-12-centos7
      size: 1
  6. 생성을 클릭하고 데이터베이스가 생성될 때까지 기다립니다.
  7. 설치된 Operators > Red Hat Integration - Service Registry > ApicurioRegistry > Create ApicurioRegistry 를 클릭합니다.
  8. 다음 사용자 정의 리소스 정의에 붙여넣고 사용자 환경과 일치하도록 데이터베이스 URL 및 인증 정보를 편집합니다.

    apiVersion: registry.apicur.io/v1
    kind: ApicurioRegistry
    metadata:
      name: example-apicurioregistry-sql
    spec:
      configuration:
        persistence: 'sql'
        sql:
          dataSource:
            url: 'jdbc:postgresql://<service name>.<namespace>.svc:5432/<database name>'
            # e.g. url: 'jdbc:postgresql://acid-minimal-cluster.my-project.svc:5432/registry'
            userName: 'postgres'
            password: '<password>' # Optional
  9. 생성을 클릭하고 OpenShift에서 Apicurio 레지스트리 경로가 생성될 때까지 기다립니다.
  10. 네트워킹 > 경로를 클릭하여 Apicurio Registry 웹 콘솔의 새 경로에 액세스합니다. 예를 들면 다음과 같습니다.

    http://example-apicurioregistry-sql.my-project.my-domain-name.com/

4.3. Apicurio Registry PostgreSQL 스토리지 백업

PostgreSQL 데이터베이스에서 스토리지를 사용하는 경우 Apicurio Registry에서 저장한 데이터를 정기적으로 백업해야 합니다.

SQL 덤프 는 모든 PostgreSQL 설치에서 작동하는 간단한 절차입니다. 이 명령은 pg_dump 유틸리티를 사용하여 덤프 시와 동일한 상태로 데이터베이스를 다시 생성하는 데 사용할 수 있는 SQL 명령으로 파일을 생성합니다.

pg_dump 는 일반 PostgreSQL 클라이언트 애플리케이션으로, 데이터베이스에 액세스할 수 있는 원격 호스트에서 실행할 수 있습니다. 다른 클라이언트와 마찬가지로 수행할 수 있는 작업은 사용자 권한으로 제한됩니다.

절차

  • pg_dump 명령을 사용하여 출력을 파일로 리디렉션합니다.

     $ pg_dump dbname > dumpfile

    pg_dump-h 호스트 및 - p 포트 옵션을 사용하여 연결하는 데이터베이스 서버를 지정할 수 있습니다.

  • gzip과 같은 압축 도구를 사용하여 대규모 덤프 파일을 줄일 수 있습니다. 예를 들면 다음과 같습니다.

     $ pg_dump dbname | gzip > filename.gz

추가 리소스

4.4. Apicurio Registry PostgreSQL 스토리지 복원

psql 유틸리티를 사용하여 pg_dump 에서 생성한 SQL Dump 파일을 복원할 수 있습니다.

사전 요구 사항

절차

  1. 다음 명령을 입력하여 데이터베이스를 생성합니다.

     $ createdb -T template0 dbname
  2. SQL 덤프를 복원하려면 다음 명령을 입력하십시오.

     $ psql dbname < dumpfile
  3. 쿼리의 통계에 유용한 통계가 있도록 각 데이터베이스에서 ANALYZE 를 실행합니다.

5장. Apicurio Registry 배포 보안

이 장에서는 OpenShift에서 Apicurio Registry 배포에 대한 보안 설정을 구성하는 방법을 설명합니다.

Apicurio Registry는 OpenID Connect (OIDC) 또는 HTTP 기본을 기반으로 Red Hat Single Sign-On을 사용하여 인증 및 권한 부여를 제공합니다. Red Hat Single Sign-On Operator를 사용하여 필요한 설정을 자동으로 구성하거나 Red Hat Single Sign-On 및 Apicurio Registry에서 수동으로 구성할 수 있습니다.

Apicurio Registry는 Red Hat Single Sign-On을 사용하여 Apicurio Registry 웹 콘솔 및 코어 REST API에 대한 역할 기반 인증 및 권한 부여를 제공합니다. 또한 Apicurio Registry는 아티팩트 작성자만 쓰기 액세스 권한이 있는 스키마 또는 API 수준에서 콘텐츠 기반 권한 부여를 제공합니다. OpenShift 클러스터 내부 또는 외부에서 Apicurio 레지스트리에 대한 HTTPS 연결을 구성할 수도 있습니다.

추가 리소스

5.1. Red Hat Single Sign-On Operator를 사용하여 Apicurio Registry 보안

다음 절차에서는 Red Hat Single Sign-On으로 Apicurio Registry REST API 및 웹 콘솔을 구성하는 방법을 보여줍니다.

Apicurio Registry에서는 다음 사용자 역할을 지원합니다.

표 5.1. Apicurio 레지스트리 사용자 역할

이름capabilities

sr-admin

전체 액세스, 제한 없음.

sr-developer

아티팩트를 생성하고 아티팩트 규칙을 구성합니다. 글로벌 규칙을 수정하거나 가져오기/내보딩을 수행하거나 /admin REST API 엔드포인트를 사용할 수 없습니다.

sr-readonly

보기 및 검색만 가능 아티팩트 또는 규칙을 수정하거나 가져오기/내보딩을 수행하거나 /admin REST API 엔드포인트를 사용할 수 없습니다.

참고

ApicurioRegistry CRD에 웹 콘솔을 읽기 전용 모드로 설정하는 데 사용할 수 있는 관련 구성 옵션이 있습니다. 그러나 이 구성은 REST API에 영향을 미치지 않습니다.

사전 요구 사항

  • Service Registry Operator가 이미 설치되어 있어야 합니다.
  • Red Hat Single Sign-On Operator를 설치하거나 OpenShift 클러스터에서 Red Hat Single Sign-On에 액세스할 수 있어야 합니다.
중요

이 절차의 예제 구성은 개발 및 테스트 전용입니다. 절차를 단순화하기 위해 HTTPS 및 프로덕션 환경에 권장되는 기타 방위를 사용하지 않습니다. 자세한 내용은 Red Hat Single Sign-On 설명서를 참조하십시오.

절차

  1. OpenShift 웹 콘솔에서 설치된 OperatorRed Hat Single Sign-On Operator 를 클릭한 다음 Keycloak 탭을 클릭합니다.
  2. Create Keycloak 을 클릭하여 Apicurio Registry 배포를 보호하려면 새 Red Hat Single Sign-On 인스턴스를 프로비저닝합니다. 기본값을 사용할 수 있습니다. 예를 들면 다음과 같습니다.

    apiVersion: keycloak.org/v1alpha1
    kind: Keycloak
    metadata:
      name: example-keycloak
      labels:
        app: sso
    spec:
      instances: 1
      externalAccess:
        enabled: True
      podDisruptionBudget:
        enabled: True
  3. 인스턴스가 생성될 때까지 기다린 다음 네트워킹을 클릭한 다음 Routes 를 클릭하여 keycloak 인스턴스의 새 경로에 액세스합니다.
  4. 위치 URL을 클릭하고 Apicurio Registry를 배포할 때 나중에 사용할 수 있도록 표시된 ../auth URL 값을 복사합니다.
  5. Installed OperatorsRed Hat Single Sign-On Operator 를 클릭하고 Keycloak Tab 탭을 클릭한 다음 Create Keycloak >-<을 클릭하여 레지스트리 예제 영역을 생성합니다.

    apiVersion: keycloak.org/v1alpha1
    kind: KeycloakRealm
    metadata:
      name: registry-keycloakrealm
      labels:
        app: registry
    spec:
      instanceSelector:
        matchLabels:
          app: sso
      realm:
        displayName: Registry
        enabled: true
        id: registry
        realm: registry
        sslRequired: none
        roles:
          realm:
            - name: sr-admin
            - name: sr-developer
            - name: sr-readonly
        clients:
          - clientId: registry-client-ui
            implicitFlowEnabled: true
            redirectUris:
              - '*'
            standardFlowEnabled: true
            webOrigins:
              - '*'
            publicClient: true
          - clientId: registry-client-api
            implicitFlowEnabled: true
            redirectUris:
              - '*'
            standardFlowEnabled: true
            webOrigins:
              - '*'
            publicClient: true
        users:
          - credentials:
              - temporary: false
                type: password
                value: changeme
            enabled: true
            realmRoles:
              - sr-admin
            username: registry-admin
          - credentials:
              - temporary: false
                type: password
                value: changeme
            enabled: true
            realmRoles:
              - sr-developer
            username: registry-developer
          - credentials:
              - temporary: false
                type: password
                value: changeme
            enabled: true
            realmRoles:
              - sr-readonly
            username: registry-user
    중요

    프로덕션에 배포하는 경우 환경에 적합한 값으로 이 KeycloakRealm 리소스를 사용자 지정해야 합니다. Red Hat Single Sign-On 웹 콘솔을 사용하여 영역을 생성하고 관리할 수도 있습니다.

  6. 클러스터에 유효한 HTTPS 인증서가 구성되어 있지 않은 경우 임시 해결 방법으로 다음 HTTP 서비스Ingress 리소스를 생성할 수 있습니다.

    1. 네트워킹을 클릭한 다음 Services 를 클릭하고 다음 예제를 사용하여 서비스 생성을 클릭합니다.

      apiVersion: v1
      kind: Service
      metadata:
        name: keycloak-http
        labels:
          app: keycloak
      spec:
        ports:
          - name: keycloak-http
            protocol: TCP
            port: 8080
            targetPort: 8080
        selector:
          app: keycloak
          component: keycloak
        type: ClusterIP
        sessionAffinity: None
      status:
        loadBalancer: {}
    2. 네트워킹을 클릭한 다음 Ingresses 를 클릭하고 다음 예제를 사용하여 Ingress 생성을 클릭합니다.

      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        name: keycloak-http
        labels:
          app: keycloak
      spec:
        rules:
          - host: KEYCLOAK_HTTP_HOST
            http:
              paths:
                - path: /
                  pathType: ImplementationSpecific
                  backend:
                    service:
                      name: keycloak-http
                      port:
                        number: 8080

      host 값을 수정하여 Apicurio Registry 사용자가 액세스할 수 있는 경로를 생성하고 Red Hat Single Sign-On Operator에서 생성한 HTTPS 경로 대신 사용합니다.

  7. Service Registry Operator 를 클릭하고 ApicurioRegistry 탭에서 다음 예제를 사용하여 ApicurioRegistry 만들기 를 클릭합니다. 그러나 keycloak 섹션의 값을 바꿉니다.

    apiVersion: registry.apicur.io/v1
    kind: ApicurioRegistry
    metadata:
      name: example-apicurioregistry-kafkasql-keycloak
    spec:
      configuration:
        security:
          keycloak:
            url: "http://keycloak-http-<namespace>.apps.<cluster host>/auth"
            # ^ Required
            # Keycloak server URL, must end with `/auth`.
            # Use an HTTP URL in development.
            realm: "registry"
            # apiClientId: "registry-client-api"
            # ^ Optional (default value)
            # uiClientId: "registry-client-ui"
            # ^ Optional (default value)
        persistence: 'kafkasql'
        kafkasql:
          bootstrapServers: '<my-cluster>-kafka-bootstrap.<my-namespace>.svc:9092'

5.2. Red Hat Single Sign-On을 사용하여 Apicurio Registry 인증 및 권한 부여 구성

이 섹션에서는 Red Hat Single Sign-On을 사용하여 Apicurio Registry에 대한 인증 및 권한 부여 옵션을 수동으로 구성하는 방법을 설명합니다.

참고

또는 이러한 설정을 자동으로 구성하는 방법에 대한 자세한 내용은 5.1절. “Red Hat Single Sign-On Operator를 사용하여 Apicurio Registry 보안” 을 참조하십시오.

OIDC(OpenID Connect)를 사용하여 OAuth를 기반으로 Red Hat Single Sign-On을 사용하여 Apicurio Registry 웹 콘솔 및 코어 REST API에 대한 인증을 활성화할 수 있습니다. 동일한 Red Hat Single Sign-On 영역과 OpenID Connect를 사용하여 Apicurio Registry 웹 콘솔과 코어 REST API를 통해 페더레이션되어 하나의 자격 증명만 있으면 됩니다.

Apicurio Registry는 기본 admin, write, 읽기 전용 사용자 역할에 대한 역할 기반 권한 부여를 제공합니다. 또한 Apicurio Registry는 스키마 또는 API 수준에서 콘텐츠 기반 권한 부여를 제공하며, 레지스트리 아티팩트 작성자만 업데이트하거나 삭제할 수 있습니다. Apicurio 레지스트리 인증 및 권한 부여 설정은 기본적으로 비활성화되어 있습니다.

사전 요구 사항

절차

  1. Red Hat Single Sign-On 관리 콘솔에서 Apicurio Registry용 Red Hat Single Sign-On 영역을 생성합니다. 기본적으로 Apicurio Registry에는 레지스트리 의 영역 이름이 필요합니다. 영역 생성에 대한 자세한 내용은 Red Hat Single Sign-On 사용자 설명서를 참조하십시오.
  2. Apicurio Registry API에 사용할 Red Hat Single Sign-On 클라이언트를 만듭니다. 기본적으로 Apicurio Registry에는 다음 설정이 필요합니다.

    • 클라이언트 ID:registry-api
    • 클라이언트 프로토콜:openid-connect
    • 액세스 유형:베어러 전용

      다른 클라이언트 설정에 기본값을 사용할 수 있습니다.

      참고

      Red Hat Single Sign-On 서비스 계정을 사용하는 경우 bearer-only 대신 클라이언트 액세스 유형을 기밀로 유지해야 합니다.

  3. Apicurio Registry 웹 콘솔의 Red Hat Single Sign-On 클라이언트를 만듭니다. 기본적으로 Apicurio Registry에는 다음 설정이 필요합니다.

    • 클라이언트 ID:apicurio-registry
    • 클라이언트 프로토콜:openid-connect
    • 액세스 유형:public
    • 유효한 리디렉션 URL:http://my-registry-url:8080/*
    • 웹 출처:+

      다른 클라이언트 설정에 기본값을 사용할 수 있습니다.

  4. OpenShift의 Apicurio Registry 배포에서 Red Hat Single Sign-On을 사용하여 인증을 구성하려면 다음 Apicurio Registry 환경 변수를 설정합니다.

    표 5.2. Apicurio 레지스트리 인증 구성

    환경 변수설명유형Default

    AUTH_ENABLED

    true 로 설정하면 이어지는 환경 변수가 필요합니다.

    문자열

    false

    KEYCLOAK_URL

    사용할 Red Hat Single Sign-On 인증 서버의 URL입니다. /auth 로 끝나야 합니다.

    문자열

    없음

    KEYCLOAK_REALM

    인증에 사용되는 Red Hat Single Sign-On 영역입니다.

    문자열

    레지스트리

    KEYCLOAK_API_CLIENT_ID

    Apicurio Registry REST API의 클라이언트 ID입니다.

    문자열

    registry-api

    KEYCLOAK_UI_CLIENT_ID

    Apicurio Registry 웹 콘솔의 클라이언트 ID입니다.

    문자열

    apicurio-registry

    작은 정보

    OpenShift에서 환경 변수를 설정하는 예는 6.1절. “OpenShift에서 Apicurio 레지스트리 상태 점검 구성” 을 참조하십시오.

  5. Red Hat Single Sign-On에서 Apicurio Registry 사용자 역할을 활성화하려면 다음 옵션을 true 로 설정합니다.

    표 5.3. Apicurio 레지스트리 역할 기반 권한 부여 구성

    환경 변수Java 시스템 속성유형기본값

    ROLE_BASED_AUTHZ_ENABLED

    registry.auth.role-based-authorization

    부울

    false

  6. Apicurio 레지스트리 사용자 역할이 활성화되면 Apicurio Registry 사용자를 Red Hat Single Sign-On 영역에서 다음 기본 사용자 역할 중 하나에 할당해야 합니다.

    표 5.4. 레지스트리 인증 및 권한 부여에 대한 기본 사용자 역할

    Role아티팩트 읽기아티팩트 쓰기글로벌 규칙요약

    sr-admin

    제공됨

    제공됨

    제공됨

    모든 생성, 읽기, 업데이트 및 삭제 작업에 대한 전체 액세스 권한

    sr-developer

    제공됨

    제공됨

    없음

    글로벌 규칙 구성을 제외하고 생성, 읽기, 업데이트 및 삭제 작업에 액세스할 수 있습니다. 이 역할은 아티팩트 규칙을 구성할 수 있습니다.

    sr-readonly

    제공됨

    없음

    없음

    읽기 및 검색 작업만 액세스할 수 있습니다. 이 역할은 규칙을 구성할 수 없습니다.

  7. Apicurio Registry에서 스키마 및 API 아티팩트에 대한 업데이트에 대한 소유자 전용 권한 부여를 활성화하려면 다음을 true 로 설정합니다.

    표 5.5. 소유자 전용 권한 부여 구성

    환경 변수Java 시스템 속성유형기본값

    REGISTRY_AUTH_OBAC_ENABLED

    registry.auth.owner-only-authorization

    부울

    false

추가 리소스

5.3. Apicurio Registry 인증 및 권한 부여 구성 옵션

Apicurio Registry는 Red Hat Single Sign-On 또는 HTTP 기본 인증을 사용하는 OpenID Connect에 대한 인증 옵션을 제공합니다.

Apicurio Registry는 역할 기반 및 콘텐츠 기반 접근 방식에 대한 권한 부여 옵션을 제공합니다.

  • 기본 admin, write 및 읽기 전용 사용자 역할에 대한 역할 기반 권한 부여
  • 아티팩트 또는 아티팩트 그룹의 소유자만 아티팩트 또는 아티팩트 그룹의 소유자만 업데이트하거나 삭제할 수 있는 스키마 또는 API 아티팩트에 대한 콘텐츠 기반 권한 부여입니다.
참고

Apicurio 레지스트리 인증 및 권한 부여 옵션은 기본적으로 비활성화되어 있습니다.

이 장에서는 다음 구성 옵션에 대해 자세히 설명합니다.

Red Hat Single Sign-On과 OpenID Connect를 사용한 Apicurio Registry 인증

Red Hat Single Sign-On을 사용하여 Apicurio Registry 웹 콘솔 및 API에 대한 인증을 구성하려면 다음 환경 변수를 설정할 수 있습니다.

표 5.6. Apicurio 레지스트리 인증 옵션 구성

환경 변수설명유형Default

AUTH_ENABLED

Apicurio Registry에서 인증을 활성화하거나 비활성화합니다. true 로 설정하면 이어지는 환경 변수가 필요합니다.

문자열

false

KEYCLOAK_URL

사용할 Red Hat Single Sign-On 인증 서버의 URL입니다. /auth 로 끝나야 합니다.

문자열

-

KEYCLOAK_REALM

인증에 사용되는 Red Hat Single Sign-On 영역입니다.

문자열

-

KEYCLOAK_API_CLIENT_ID

Apicurio Registry REST API의 클라이언트 ID입니다.

문자열

registry-api

KEYCLOAK_UI_CLIENT_ID

Apicurio Registry 웹 콘솔의 클라이언트 ID입니다.

문자열

apicurio-registry

HTTP 기본을 사용한 Apicurio Registry 인증

참고

기본적으로 Apicurio Registry는 OpenID Connect를 사용한 인증을 지원합니다. 사용자(또는 API 클라이언트)는 Apicurio Registry REST API에 대한 인증된 호출을 수행하기 위해 액세스 토큰을 받아야 합니다. 그러나 일부 도구에서는 OpenID Connect를 지원하지 않으므로 다음 설정 옵션을 true 로 설정하여 HTTP 기본 인증을 지원하도록 Apicurio Registry를 구성할 수도 있습니다.

표 5.7. Apicurio Registry HTTP 기본 인증 구성

환경 변수Java 시스템 속성유형기본값

CLIENT_CREDENTIALS_BASIC_AUTH_ENABLED

registry.auth.basic-auth-client-credentials.enabled

부울

false

Apicurio Registry 역할 기반 권한 부여

다음 옵션을 true 로 설정하여 Apicurio Registry에서 역할 기반 인증을 활성화할 수 있습니다.

표 5.8. Apicurio 레지스트리 역할 기반 권한 부여 구성

환경 변수Java 시스템 속성유형기본값

ROLE_BASED_AUTHZ_ENABLED

registry.auth.role-based-authorization

부울

false

그런 다음 사용자의 인증 토큰(예: Red Hat Single Sign-On을 사용하여 인증할 때 부여됨)에 포함된 역할을 사용하거나 Apicurio Registry에서 내부적으로 관리하는 역할 매핑을 사용하도록 역할 기반 권한을 구성할 수 있습니다.

Red Hat Single Sign-On에 할당된 사용 역할

Red Hat Single Sign-On에서 할당한 역할을 사용하여 활성화하려면 다음 환경 변수를 설정합니다.

표 5.9. Red Hat Single Sign-On을 사용한 Apicurio Registry 역할 기반 권한 부여 구성

환경 변수설명유형Default

ROLE_BASED_AUTHZ_SOURCE

토큰 으로 설정하면 인증 토큰에서 사용자 역할을 가져옵니다.

문자열

token

REGISTRY_AUTH_ROLES_ADMIN

사용자가 관리자임을 나타내는 역할의 이름입니다.

문자열

sr-admin

REGISTRY_AUTH_ROLES_DEVELOPER

사용자가 개발자임을 나타내는 역할의 이름입니다.

문자열

sr-developer

REGISTRY_AUTH_ROLES_READONLY

사용자에게 읽기 전용 액세스 권한이 있음을 나타내는 역할의 이름입니다.

문자열

sr-readonly

Apicurio Registry가 Red Hat Single Sign-On의 역할을 사용하도록 구성된 경우 Apicurio Registry 사용자를 Red Hat Single Sign-On에서 다음 사용자 역할 중 하나 이상에 할당해야 합니다. 그러나 표 5.9. “Red Hat Single Sign-On을 사용한 Apicurio Registry 역할 기반 권한 부여 구성” 의 환경 변수를 사용하여 다양한 사용자 역할 이름을 구성할 수 있습니다.

표 5.10. 인증 및 권한 부여를 위한 Apicurio Registry 역할

역할 이름아티팩트 읽기아티팩트 쓰기글로벌 규칙설명

sr-admin

제공됨

제공됨

제공됨

모든 생성, 읽기, 업데이트 및 삭제 작업에 대한 전체 액세스 권한

sr-developer

제공됨

제공됨

없음

글로벌 규칙 및 가져오기/내보도 구성을 제외하고 생성, 읽기, 업데이트 및 삭제 작업에 액세스할 수 있습니다. 이 역할은 아티팩트 규칙만 구성할 수 있습니다.

sr-readonly

제공됨

없음

없음

읽기 및 검색 작업만 액세스할 수 있습니다. 이 역할은 규칙을 구성할 수 없습니다.

Apicurio Registry에서 직접 역할 관리

Apicurio Registry에서 내부적으로 관리하는 역할을 사용하여 활성화하려면 다음 환경 변수를 설정합니다.

표 5.11. 내부 역할 매핑을 사용한 Apicurio 레지스트리 역할 기반 권한 부여 구성

환경 변수설명유형Default

ROLE_BASED_AUTHZ_SOURCE

application 로 설정하면 사용자 역할은 Apicurio Registry에서 내부적으로 관리됩니다.

문자열

token

내부적으로 관리되는 역할 매핑을 사용하는 경우 Apicurio Registry REST API에서 /admin/roleMappings 끝점을 사용하여 역할을 할당할 수 있습니다. 자세한 내용은 Apicurio Registry REST API 설명서를 참조하십시오.

사용자에게 정확히 하나의 역할인 ADMIN,DEVELOPER 또는 READ_ONLY 역할을 부여할 수 있습니다. admin 권한이 있는 사용자만 다른 사용자에게 액세스 권한을 부여할 수 있습니다.

Apicurio Registry admin-override 구성

Apicurio Registry에는 기본 관리자 사용자가 없으므로 일반적으로 admins로 식별할 수 있는 다른 방법을 구성하는 것이 유용합니다. 다음 환경 변수를 사용하여 이 admin-override 기능을 구성할 수 있습니다.

표 5.12. Apicurio Registry admin-override 구성

환경 변수설명유형Default

REGISTRY_AUTH_ADMIN_OVERRIDE_ENABLED

admin-override 기능을 활성화합니다.

문자열

false

REGISTRY_AUTH_ADMIN_OVERRIDE_FROM

admin-override 정보를 찾는 위치. 현재 토큰 만 지원됩니다.

문자열

token

REGISTRY_AUTH_ADMIN_OVERRIDE_TYPE

사용자가 관리자인지 확인하는 데 사용되는 정보 유형입니다. 값은 FROM 변수의 값에 따라 달라집니다(예: FROM이 토큰 인 경우 role 또는 클레임 ).

문자열

role

REGISTRY_AUTH_ADMIN_OVERRIDE_ROLE

사용자가 관리자임을 나타내는 역할의 이름입니다.

문자열

sr-admin

REGISTRY_AUTH_ADMIN_OVERRIDE_CLAIM

admin-override를 결정하는 데 사용할 JWT 토큰 클레임의 이름입니다.

문자열

org-admin

REGISTRY_AUTH_ADMIN_OVERRIDE_CLAIM_VALUE

CLAIM 변수에 표시된 JWT 토큰 클레임의 값은 사용자에게 admin-override를 부여해야 합니다.

문자열

true

예를 들어 이 admin-override 기능을 사용하여 해당 사용자에게 admin 역할을 부여하는 Red Hat Single Sign-On의 단일 사용자에게 sr-admin 역할을 할당할 수 있습니다. 그런 다음 해당 사용자는 /admin/roleMappings REST API(또는 관련 UI)를 사용하여 추가 사용자(추가 관리자 포함)에 역할을 부여할 수 있습니다.

Apicurio Registry 소유자 전용 권한 부여

다음 옵션을 true 로 설정하여 Apicurio Registry에서 아티팩트 또는 아티팩트 그룹에 대한 업데이트에 대한 소유자 전용 권한을 활성화할 수 있습니다.

표 5.13. 소유자 전용 권한 부여 구성

환경 변수Java 시스템 속성유형기본값

REGISTRY_AUTH_OBAC_ENABLED

registry.auth.owner-only-authorization

부울

false

REGISTRY_AUTH_OBAC_LIMIT_GROUP_ACCESS

registry.auth.owner-only-authorization.limit-group-access

부울

false

소유자 전용 권한이 활성화되면 아티팩트를 생성한 사용자만 해당 아티팩트를 수정하거나 삭제할 수 있습니다.

소유자 전용 권한 부여와 그룹 소유자 전용 권한 부여가 모두 활성화되면 아티팩트 그룹을 생성한 사용자만 해당 아티팩트 그룹에 대한 쓰기 액세스 권한을 갖습니다(예: 해당 그룹에서 아티팩트를 추가하거나 제거하는 등).

Apicurio Registry 인증 읽기 액세스

인증된 읽기 액세스 옵션이 활성화되면 Apicurio Registry는 사용자 역할에 관계없이 동일한 조직의 모든 인증된 사용자의 요청에 대한 읽기 전용 액세스 권한을 부여합니다.

인증된 읽기 액세스를 활성화하려면 먼저 역할 기반 인증을 활성화한 다음 다음 옵션을 true 로 설정해야 합니다.

표 5.14. 인증된 읽기 액세스에 대한 구성

환경 변수Java 시스템 속성유형기본값

REGISTRY_AUTH_AUTHENTICATED_READS_ENABLED

registry.auth.authenticated-read-access.enabled

부울

false

자세한 내용은 “Apicurio Registry 역할 기반 권한 부여” 에서 참조하십시오.

Apicurio Registry 익명 읽기 전용 액세스

권한 부여의 두 가지 주요 유형(역할 기반 및 소유자 기반 권한 부여) 외에도 Apicurio Registry에서는 익명 읽기 전용 액세스 옵션을 지원합니다.

인증 자격 증명이 없는 REST API 호출과 같은 익명 사용자를 허용하려면 REST API에 대한 읽기 전용 호출을 만들려면 다음 옵션을 true 로 설정합니다.

표 5.15. 익명 읽기 전용 액세스에 대한 구성

환경 변수Java 시스템 속성유형기본값

REGISTRY_AUTH_ANONYMOUS_READ_ACCESS_ENABLED

registry.auth.anonymous-read-access.enabled

부울

false

추가 리소스

5.4. OpenShift 클러스터 내부에서 Apicurio Registry에 대한 HTTPS 연결 구성

다음 절차에서는 OpenShift 클러스터 내부에서 HTTPS 연결에 사용할 포트를 노출하도록 Apicurio Registry 배포를 구성하는 방법을 보여줍니다.

주의

이러한 종류의 연결은 클러스터 외부에서 직접 사용할 수 없습니다. 라우팅은 호스트 이름을 기반으로 하며, HTTPS 연결 시 인코딩됩니다. 따라서 엣지 종료 또는 기타 구성이 여전히 필요합니다. 5.5절. “OpenShift 클러스터 외부에서 Apicurio Registry에 대한 HTTPS 연결 구성”을 참조하십시오.

사전 요구 사항

  • Service Registry Operator가 이미 설치되어 있어야 합니다.

절차

  1. 자체 서명된 인증서가 있는 키 저장소를 생성합니다. 자체 인증서를 사용하는 경우 이 단계를 건너뛸 수 있습니다.

    keytool -genkey -trustcacerts -keyalg RSA -keystore registry-keystore.jks -storepass password
  2. 키 저장소 및 키 저장소 암호를 저장할 새 시크릿을 생성합니다.

    1. OpenShift 웹 콘솔의 왼쪽 탐색 메뉴에서 워크로드 > 시크릿 > 키/값 시크릿 만들기를 클릭합니다.
    2. 다음 값을 사용합니다.
      이름: registry-keystore
      Key 1: keystore.jks
      Value 1: registry-keystore.jks (uploaded file)
      Key 2: password
      Value 2: password

      참고

      java.io.IOException: Invalid keystore 형식이 표시되면 바이너리 파일의 업로드가 제대로 작동하지 않았습니다. 또는 cat registry-keystore.jks | base64 -w0 > data.txt 를 사용하여 파일을 base64 문자열로 인코딩하여 인코딩된 파일을 수동으로 추가합니다.

  3. Apicurio Registry 인스턴스의 배포 리소스를 편집합니다. Service Registry Operator의 상태 필드에서 올바른 이름을 찾을 수 있습니다.

    1. 키 저장소 보안을 볼륨으로 추가합니다.

      template:
        spec:
          volumes:
          - name: registry-keystore-secret-volume
            secret:
            secretName: registry-keystore
    2. 볼륨 마운트를 추가합니다.

      volumeMounts:
        - name: registry-keystore-secret-volume
          mountPath: /etc/registry-keystore
          readOnly: true
    3. JAVA_OPTIONSKEYSTORE_PASSWORD 환경 변수를 추가합니다.

      - name: KEYSTORE_PASSWORD
        valueFrom:
          secretKeyRef:
            name: registry-keystore
            key: password
      - name: JAVA_OPTIONS
          value: >-
           -Dquarkus.http.ssl.certificate.key-store-file=/etc/registry-keystore/keystore.jks
           -Dquarkus.http.ssl.certificate.key-store-file-type=jks
           -Dquarkus.http.ssl.certificate.key-store-password=$(KEYSTORE_PASSWORD)
      참고

      문자열 보간을 사용할 때는 순서가 중요합니다.

    4. HTTPS 포트를 활성화합니다.

      ports:
        - containerPort: 8080
          protocol: TCP
        - containerPort: 8443
          protocol: TCP
  4. Apicurio Registry 인스턴스의 서비스 리소스를 편집합니다. Service Registry Operator의 상태 필드에서 올바른 이름을 찾을 수 있습니다.

    ports:
      - name: http
        protocol: TCP
        port: 8080
        targetPort: 8080
      - name: https
        protocol: TCP
        port: 8443
        targetPort: 8443
  5. 연결이 작동하는지 확인합니다.

    1. SSH를 사용하여 클러스터의 Pod에 연결합니다(Apicurio Registry Pod를 사용할 수 있음).

      oc rsh -n default example-apicurioregistry-deployment-vx28s-4-lmtqb
    2. 서비스 리소스에서 Apicurio Registry Pod의 클러스터 IP를 찾습니다(웹 콘솔의 위치 열 참조). 이후 테스트 요청을 실행합니다(자체 서명 인증서를 사용하므로 비보안 플래그가 필요합니다.

      curl -k https://172.30.209.198:8443/health
      [...]

5.5. OpenShift 클러스터 외부에서 Apicurio Registry에 대한 HTTPS 연결 구성

다음 절차에서는 OpenShift 클러스터 외부의 연결에 대해 HTTPS 에지 종료 경로를 노출하도록 Apicurio Registry 배포를 구성하는 방법을 보여줍니다.

사전 요구 사항

절차

  1. Service Registry Operator에서 생성한 HTTP 경로 외에 두 번째 경로를 추가합니다. 다음 예제를 참조하십시오.

    kind: Route
    apiVersion: route.openshift.io/v1
    metadata:
      [...]
      labels:
        app: example-apicurioregistry
        [...]
    spec:
      host: example-apicurioregistry-default.apps.example.com
      to:
        kind: Service
        name: example-apicurioregistry-service-9whd7
        weight: 100
      port:
        targetPort: 8080
      tls:
        termination: edge
        insecureEdgeTerminationPolicy: Redirect
      wildcardPolicy: None
    참고

    insecureEdgeTerminationPolicy: Redirect 구성 속성이 설정되어 있는지 확인합니다.

    인증서를 지정하지 않으면 OpenShift에서 기본값을 사용합니다. 또는 다음 명령을 사용하여 사용자 정의 자체 서명 인증서를 생성할 수 있습니다.

    openssl genrsa 2048 > host.key &&
    openssl req -new -x509 -nodes -sha256 -days 365 -key host.key -out host.cert

    그런 다음 OpenShift CLI를 사용하여 경로를 생성합니다.

    oc create route edge \
      --service=example-apicurioregistry-service-9whd7 \
      --cert=host.cert --key=host.key \
      --hostname=example-apicurioregistry-default.apps.example.com \
      --insecure-policy=Redirect \
      -n default

6장. Apicurio Registry 배포 구성 및 관리

이 장에서는 OpenShift에서 Apicurio Registry 배포에 대한 선택적 설정을 구성하고 관리하는 방법을 설명합니다.

6.1. OpenShift에서 Apicurio 레지스트리 상태 점검 구성

OpenShift에서 Apicurio Registry 서버의 상태를 모니터링하도록 활성 상태 및 준비 상태 프로브에 대한 선택적 환경 변수를 구성할 수 있습니다.

  • 활성 상태 프로브 는 애플리케이션을 진행할 수 있는지 테스트합니다. 애플리케이션을 진행할 수 없는 경우 OpenShift는 실패한 포드를 자동으로 다시 시작합니다.
  • 준비 상태 프로브 는 애플리케이션이 요청을 처리할 준비가 되었는지 테스트합니다. 애플리케이션이 준비되지 않은 경우 요청에 의해 압도될 수 있으며 OpenShift는 프로브가 실패한 시간 동안 요청 전송을 중지합니다. 다른 Pod가 정상이면 요청을 계속 수신합니다.
중요

liveness 및 readiness 환경 변수의 기본값은 대부분의 경우에만 설계되며 해당 환경에 필요한 경우에만 변경해야 합니다. 기본값을 변경하면 저장된 하드웨어, 네트워크 및 데이터 양에 따라 달라집니다. 불필요한 오버헤드를 방지하려면 이러한 값을 가능한 한 낮게 유지해야 합니다.

사전 요구 사항

  • 클러스터 관리자 액세스 권한이 있는 OpenShift 클러스터가 있어야 합니다.
  • OpenShift에 Apicurio Registry가 이미 설치되어 있어야 합니다.
  • AMQ Streams 또는 PostgreSQL에 선택한 Apicurio 레지스트리 스토리지를 이미 설치하고 구성해야 합니다.

절차

  1. OpenShift Container Platform 웹 콘솔에서 클러스터 관리자 권한이 있는 계정을 사용하여 로그인합니다.
  2. 설치된 Operators > Red Hat Integration - Service Registry Operator 를 클릭합니다.
  3. ApicurioRegistry 탭에서 배포에 대한 Operator 사용자 정의 리소스를 클릭합니다(예: example-apicurioregistry ).
  4. 기본 개요 페이지에서 Apicurio Registry 배포의 Deployment Name 섹션과 해당 DeploymentConfig 이름을 확인합니다(예: example-apicurioregistry ).
  5. 왼쪽 탐색 메뉴에서 워크로드 > 배포 구성을 클릭하고 DeploymentConfig 이름을 선택합니다.
  6. Environment 탭을 클릭하고 Single values env 섹션에 환경 변수를 입력합니다. 예를 들면 다음과 같습니다.

    • NAME: LIVENESS_STATUS_RESET
    • VALUE: 350
  7. 하단에서 저장 을 클릭합니다.

    또는 OpenShift oc 명령을 사용하여 다음 단계를 수행할 수 있습니다. 자세한 내용은 OpenShift CLI 설명서를 참조하십시오.

6.2. Apicurio 레지스트리 상태 점검의 환경 변수

이 섹션에서는 OpenShift에서 Apicurio 레지스트리 상태 점검에 사용할 수 있는 환경 변수에 대해 설명합니다. 여기에는 OpenShift에서 Apicurio Registry 서버의 상태를 모니터링할 수 있는 liveness 및 readiness 프로브가 포함됩니다. 예제 절차는 6.1절. “OpenShift에서 Apicurio 레지스트리 상태 점검 구성” 에서 참조하십시오.

중요

다음 환경 변수는 참조용으로만 제공됩니다. 기본값은 대부분의 경우에만 설계되었으며 사용자 환경에 필요한 경우에만 변경해야 합니다. 기본값을 변경하면 저장된 하드웨어, 네트워크 및 데이터 양에 따라 달라집니다. 불필요한 오버헤드를 방지하려면 이러한 값을 가능한 한 낮게 유지해야 합니다.

활성 환경 변수

표 6.1. Apicurio Registry liveness 프로브의 환경 변수

이름설명유형Default

LIVENESS_ERROR_THRESHOLD

활성 상태 프로브가 실패하기 전에 발생할 수 있는 활성 문제 또는 오류 수입니다.

정수

1

LIVENESS_COUNTER_RESET

임계값 오류 수가 발생해야 하는 기간입니다. 예를 들어 이 값이 60이고 임계값이 1이면 1분 내에 두 번 오류가 발생한 후 검사가 실패합니다.

60

LIVENESS_STATUS_RESET

활성 프로브가 OK 상태로 재설정될 때까지 더 많은 오류 없이 경과해야 하는 시간(초)입니다.

300

LIVENESS_ERRORS_IGNORED

무시되는 활동 예외의 쉼표로 구분된 목록입니다.

문자열

io.grpc.StatusRuntimeException,org.apache.kafka.streams.errors.InvalidStateStoreException

참고

OpenShift는 활성 상태 점검에 실패하는 포드를 자동으로 재시작하기 때문에 준비 설정과 달리 활성 설정은 OpenShift의 Apicurio Registry 동작에 직접적인 영향을 미치지 않습니다.

준비 상태 환경 변수

표 6.2. Apicurio Registry readiness 프로브의 환경 변수

이름설명유형Default

READINESS_ERROR_THRESHOLD

준비 상태 프로브가 실패하기 전에 발생할 수 있는 준비 상태 문제 또는 오류 수입니다.

정수

1

READINESS_COUNTER_RESET

임계값 오류 수가 발생해야 하는 기간입니다. 예를 들어 이 값이 60이고 임계값이 1이면 1분 내에 두 개의 오류가 발생한 후 검사가 실패합니다.

60

READINESS_STATUS_RESET

활성 프로브가 OK 상태로 재설정될 때까지 더 많은 오류 없이 경과해야 하는 시간(초)입니다. 이 경우 정상 작업으로 돌아갈 때까지 Pod가 준비되지 않은 시간을 나타냅니다.

300

READINESS_TIMEOUT

Readiness는 다음 두 가지 작업의 시간 초과를 추적합니다.

  • 스토리지 요청을 완료하는 데 걸리는 시간
  • HTTP REST API 요청이 응답을 반환하는 데 걸리는 시간

이러한 작업에 구성된 타임아웃보다 시간이 오래 걸리는 경우 이는 준비 상태 문제 또는 오류로 간주됩니다. 이 값은 두 작업의 시간 제한을 제어합니다.

5

6.3. Apicurio 레지스트리 환경 변수 관리

Service Registry Operator는 가장 일반적인 Apicurio 레지스트리 구성을 관리하지만 수동으로 조정할 수 있는 몇 가지 옵션이 있습니다. Apicurio Registry Deployment 리소스에서 환경 변수를 설정하여 업데이트할 수 있습니다. 특정 구성 옵션을 ApicurioRegistry CR에서 사용할 수 없는 경우 환경 변수를 사용하여 조정할 수 있습니다.

절차

OpenShift 웹 콘솔
  1. 설치된 Operator 탭을 선택한 다음 Red Hat Integration - Service Registry Operator 를 선택합니다.
  2. Apicurio Registry 탭에서 Apicurio Registry 배포에 대해 ApicurioRegistry CR을 클릭합니다.
  3. 기본 개요 페이지에서 Apicurio Registry 인스턴스를 배포하기 위해 Operator가 관리하는 배포 의 이름이 포함된 managedResources 섹션을 확인합니다.
  4. 왼쪽 메뉴 워크로드 & gt; 배포에서 해당 배포를 찾습니다.
  5. 올바른 이름으로 배포를 선택하고 환경 탭을 선택합니다.
  6. 환경 변수를 Single values(env) 섹션에 추가하거나 수정할 수 있습니다.
  7. 하단에서 저장 을 클릭합니다.
OpenShift CLI
  1. Apicurio Registry가 설치된 프로젝트를 선택합니다.
  2. oc get apicurioregistry 를 실행하여 ApicurioRegistry CR 목록을 가져옵니다.
  3. 구성하려는 Apicurio Registry 인스턴스를 나타내는 CR에서 oc describe 를 실행합니다.
  4. status 섹션에서 managedResource 를 봅니다.
  5. 해당 배포를 찾은oc edit 를 입력합니다.
  6. spec.template.spec.containers[0].env 섹션에서 환경 변수를 추가하거나 수정합니다.

6.4. Apicurio Registry 웹 콘솔 구성

선택적 환경 변수를 설정하여 배포 환경에 맞게 Apicurio Registry 웹 콘솔을 구성하거나 동작을 사용자 지정할 수 있습니다.

사전 요구 사항

  • Apicurio Registry가 이미 설치되어 있습니다.

웹 콘솔 배포 환경 구성

브라우저에서 Apicurio Registry 웹 콘솔에 액세스하면 일부 초기 구성 설정이 로드됩니다. 다음 구성 설정이 중요합니다.

  • 코어 Apicurio 레지스트리 서버 REST API의 URL
  • Apicurio Registry 웹 콘솔 클라이언트의 URL

일반적으로 Apicurio Registry는 이러한 설정을 자동으로 감지하고 생성하지만 이러한 자동 검색이 실패할 수 있는 일부 배포 환경이 있습니다. 이 경우 환경에 이러한 URL을 명시적으로 설정하도록 환경 변수를 구성할 수 있습니다.

절차

기본 URL을 재정의하려면 다음 환경 변수를 구성합니다.

  • REGISTRY_UI_CONFIG_APIURL: 코어 Apicurio 레지스트리 서버 REST API의 URL을 지정합니다. 예: https://registry.my-domain.com/apis/registry
  • REGISTRY_UI_CONFIG_UIURL: Apicurio Registry 웹 콘솔 클라이언트의 URL을 지정합니다. 예: https://registry.my-domain.com/ui

웹 콘솔을 읽기 전용 모드로 구성

Apicurio Registry 웹 콘솔을 읽기 전용 모드로 선택적 기능으로 구성할 수 있습니다. 이 모드에서는 사용자가 등록된 아티팩트를 변경할 수 있는 Apicurio Registry 웹 콘솔의 모든 기능을 비활성화합니다. 여기에는 다음이 포함됩니다.

  • 아티팩트 생성
  • 새 아티팩트 버전 업로드
  • 아티팩트 메타데이터 업데이트
  • 아티팩트 삭제

절차

다음 환경 변수를 구성합니다.

  • REGISTRY_UI_FEATURES_READONLY: 읽기 전용 모드를 활성화하려면 true 로 설정합니다. 기본값은 false입니다.

6.5. Apicurio 레지스트리 로깅 구성

런타임에 Apicurio 레지스트리 로깅 구성을 설정할 수 있습니다. Apicurio Registry는 세분화된 로깅을 위해 특정 로거에 대한 로그 수준을 설정하는 REST 끝점을 제공합니다. 이 섹션에서는 Apicurio Registry /admin REST API를 사용하여 런타임에 Apicurio 레지스트리 로그 수준을 보고 설정하는 방법을 설명합니다.

사전 요구 사항

  • OpenShift에 Apicurio Registry가 배포된 경우 Apicurio Registry 인스턴스에 액세스할 수 있는 URL을 가져오거나 Apicurio Registry를 가져옵니다. 이 간단한 예제에서는 localhost:8080 의 URL을 사용합니다.

절차

  1. curl 명령을 사용하여 로거 io.apicurio.registry.storage 의 현재 로그 수준을 가져옵니다.

    $ curl -i localhost:8080/apis/registry/v2/admin/loggers/io.apicurio.registry.storage
    HTTP/1.1 200 OK
    [...]
    Content-Type: application/json
    {"name":"io.apicurio.registry.storage","level":"INFO"}
  2. curl 명령을 사용하여 로거 io.apicurio.registry.storage 의 로그 수준을 DEBUG 로 변경합니다.

    $ curl -X PUT -i -H "Content-Type: application/json" --data '{"level":"DEBUG"}' localhost:8080/apis/registry/v2/admin/loggers/io.apicurio.registry.storage
    HTTP/1.1 200 OK
    [...]
    Content-Type: application/json
    {"name":"io.apicurio.registry.storage","level":"DEBUG"}
  3. curl 명령을 사용하여 로거 io.apicurio.registry.storage 의 로그 수준을 기본값으로 되돌립니다.

    $ curl -X DELETE -i localhost:8080/apis/registry/v2/admin/loggers/io.apicurio.registry.storage
    HTTP/1.1 200 OK
    [...]
    Content-Type: application/json
    {"name":"io.apicurio.registry.storage","level":"INFO"}

6.6. Apicurio Registry 이벤트 소싱 구성

레지스트리가 변경될 때 이벤트를 보내도록 Apicurio Registry를 구성할 수 있습니다. 예를 들어 Apicurio Registry는 스키마 및 API 아티팩트가 생성, 업데이트, 삭제되는 경우 이벤트를 트리거할 수 있습니다. 이러한 방식으로 애플리케이션 및 타사 통합에 이벤트를 전송하도록 Apicurio Registry를 구성할 수 있습니다.

이벤트 전송에 사용할 수 있는 다양한 프로토콜이 있습니다. 현재 구현된 프로토콜은 HTTP 및 Apache Kafka입니다. 그러나 프로토콜에 관계없이 이벤트는 CNCF CloudEvents 사양을 사용하여 전송됩니다.

모든 이벤트 유형은 io.apicurio.registry.events.dto.RegistryEventType 에 정의됩니다. 예를 들어 이벤트 유형에는 다음이 포함됩니다.

  • io.apicurio.registry.artifact-created
  • io.apicurio.registry.artifact-updated
  • io.apicurio.registry.artifact-rule-created
  • io.apicurio.registry.global-rule-created

Java 시스템 속성 또는 동등한 환경 변수를 사용하여 Apicurio Registry에서 클라우드 이벤트를 구성할 수 있습니다.

사전 요구 사항

  • Apicurio 레지스트리 클라우드 이벤트를 보낼 애플리케이션이 있어야 합니다. 예를 들어 사용자 지정 애플리케이션 또는 타사 애플리케이션일 수 있습니다.

HTTP를 사용하여 Apicurio Registry 이벤트 소싱 구성

이 섹션의 예제에서는 http://my-app-host:8888/events 에서 실행되는 사용자 정의 애플리케이션을 보여줍니다.

절차

  1. HTTP 프로토콜을 사용하는 경우 다음과 같이 이벤트를 애플리케이션으로 전송하도록 Apicurio Registry 구성을 설정합니다.

    • registry.events.sink.my-custom-consumer=http://my-app-host:8888/events
  2. 필요한 경우 다음과 같이 여러 이벤트 소비자를 구성할 수 있습니다.

    • registry.events.sink.my-custom-consumer=http://my-app-host:8888/events
    • registry.events.sink.other-consumer=http://my-consumer.com/events

Apache Kafka를 사용하여 Apicurio 레지스트리 이벤트 소싱 구성

이 섹션의 예제에서는 my-kafka-host:9092 에서 실행되는 my-registry-events 라는 Kafka 주제를 보여줍니다.

절차

  1. Kafka 프로토콜을 사용하는 경우 Kafka 주제를 다음과 같이 설정합니다.

    • registry.events.kafka.topic=my-registry-events
  2. KAFKA_BOOTSTRAP_SERVERS 환경 변수를 사용하여 Kafka 생산자의 구성을 설정할 수 있습니다.

    • KAFKA_BOOTSTRAP_SERVERS=my-kafka-host:9092

      또는 registry.events.kafka.config 접두사를 사용하여 kafka 생산자의 속성을 설정할 수 있습니다. 예: registry.events.kafka.config.bootstrap.servers=my-kafka-host:9092

  3. 필요한 경우 이벤트를 생성하는 데 사용할 Kafka 주제 파티션을 설정할 수도 있습니다.

    • registry.events.kafka.topic-partition=1

추가 리소스

7장. Service Registry Operator 구성 참조

이 장에서는 Apicurio Registry를 배포하도록 Service Registry Operator를 구성하는 데 사용되는 사용자 정의 리소스에 대한 자세한 정보를 제공합니다.

7.1. Apicurio 레지스트리 사용자 정의 리소스

Service Registry Operator는 OpenShift에서 Apicurio Registry 의 단일 배포를 나타내는 ApicurioRegistry 사용자 정의 리소스(CR) 를 정의합니다.

이러한 리소스 오브젝트는 사용자가 Apicurio Registry를 배포하고 구성하는 방법을 Service Registry Operator에 지시하도록 생성하고 유지 관리합니다.

ApicurioRegistry CR의 예

다음 명령은 ApicurioRegistry 리소스를 표시합니다.

oc get apicurioregistry
oc edit apicurioregistry example-apicurioregistry
apiVersion: registry.apicur.io/v1
kind: ApicurioRegistry
metadata:
  name: example-apicurioregistry
  namespace: demo-kafka
  # ...
spec:
  configuration:
    persistence: kafkasql
    kafkasql:
      bootstrapServers: 'my-cluster-kafka-bootstrap.demo-kafka.svc:9092'
  deployment:
    host: >-
      example-apicurioregistry.demo-kafka.example.com
status:
  conditions:
  - lastTransitionTime: "2021-05-03T10:47:11Z"
    message: ""
    reason: Reconciled
    status: "True"
    type: Ready
  info:
    host: example-apicurioregistry.demo-kafka.example.com
  managedResources:
  - kind: Deployment
    name: example-apicurioregistry-deployment
    namespace: demo-kafka
  - kind: Service
    name: example-apicurioregistry-service
    namespace: demo-kafka
  - kind: Ingress
    name: example-apicurioregistry-ingress
    namespace: demo-kafka
중요

기본적으로 Service Registry Operator는 자체 프로젝트 네임스페이스만 감시합니다. 따라서 Operator를 수동으로 배포하는 경우 동일한 네임스페이스에 ApicurioRegistry CR을 생성해야 합니다. Operator 배포 리소스에서 WATCH_NAMESPACE 환경 변수를 업데이트하여 이 동작을 수정할 수 있습니다.

7.2. Apicurio Registry CR 사양

사양은 Operator에 필요한 상태 또는 구성을 제공하는 데 사용되는 ApicurioRegistry CR의 일부입니다.

ApicurioRegistry CR 사양 콘텐츠

다음 예제 블록에는 가능한 사양 구성 옵션의 전체 트리가 포함되어 있습니다. 일부 필드는 필수 사항이 아니거나 동시에 정의해서는 안 됩니다.

spec:
  configuration:
    persistence: <string>
    sql:
      dataSource:
        url: <string>
        userName: <string>
        password: <string>
    kafkasql:
      bootstrapServers: <string>
      security:
        tls:
          truststoreSecretName: <string>
          keystoreSecretName: <string>
        scram:
          mechanism: <string>
          truststoreSecretName: <string>
          user: <string>
          passwordSecretName: <string>
    ui:
      readOnly: <string>
    logLevel: <string>
    security:
      keycloak:
        url: <string>
        realm: <string>
        apiClientId: <string>
        uiClientId: <string>
  deployment:
    replicas: <int32>
    host: <string>
    affinity: <k8s.io/api/core/v1 Affinity struct>
    tolerations: <k8s.io/api/core/v1 []Toleration slice>

다음 표에서는 각 구성 옵션에 대해 설명합니다.

표 7.1. ApicurioRegistry CR 사양 구성 옵션

구성 옵션type기본값설명

구성

-

-

Apicurio 레지스트리 애플리케이션 구성 섹션

구성/유지 관리

string

필수 항목

스토리지 백엔드. sql 중 하나,kafkasql

configuration/sql

-

-

SQL 스토리지 백엔드 구성

configuration/sql/dataSource

-

-

SQL 스토리지 백엔드에 대한 데이터베이스 연결 구성

configuration/sql/dataSource/url

string

필수 항목

데이터베이스 연결 URL 문자열

configuration/sql/dataSource/userName

string

필수 항목

데이터베이스 연결 사용자

configuration/sql/dataSource/password

string

empty

데이터베이스 연결 암호

configuration/kafkasql

-

-

Kafka 스토리지 백엔드 구성

configuration/kafkasql/bootstrapServers

string

필수 항목

Streams 스토리지 백엔드의 Kafka 부트스트랩 서버 URL

configuration/kafkasql/security/tls

-

-

Kafka 스토리지 백엔드에 대한 TLS 인증 구성 섹션

configuration/kafkasql/security/tls/truststoreSecretName

string

필수 항목

Kafka에 대한 TLS 신뢰 저장소를 포함하는 보안의 이름

configuration/kafkasql/security/tls/keystoreSecretName

string

필수 항목

사용자 TLS 키 저장소를 포함하는 보안의 이름

configuration/kafkasql/security/scram/truststoreSecretName

string

필수 항목

Kafka에 대한 TLS 신뢰 저장소를 포함하는 보안의 이름

configuration/kafkasql/security/scram/user

string

필수 항목

SCRAM 사용자 이름

configuration/kafkasql/security/scram/passwordSecretName

string

필수 항목

SCRAM 사용자 암호를 포함하는 보안의 이름

configuration/kafkasql/security/scram/mechanism

string

SCRAM-SHA-512

SASL 메커니즘

configuration/ui

-

-

Apicurio Registry 웹 콘솔 설정

configuration/ui/readOnly

string

false

Apicurio Registry 웹 콘솔을 읽기 전용 모드로 설정

configuration/logLevel

string

INFO

Apicurio 레지스트리 로그 수준입니다. 정보 중 하나 , DEBUG

configuration/security

-

-

Apicurio Registry 웹 콘솔 및 REST API 보안 설정

configuration/security/keycloak

-

-

Keycloak을 사용한 웹 콘솔 및 REST API 보안 구성

설정/보안/keycloak/url

string

필수 항목

Keycloak URL은 /auth로 끝나야 합니다.

설정/보안/keycloak/realm

string

필수 항목

Keycloak 영역

configuration/security/keycloak/apiClientId

string

registry-client-api

REST API용 Keycloak 클라이언트

configuration/security/keycloak/uiClientId

string

registry-client-ui

웹 콘솔용 Keycloak 클라이언트

Deployment

-

-

Apicurio Registry 배포 설정 섹션

deployment/replicas

양의 정수

1

배포할 Apicurio Registry Pod 수

deployment/host

string

auto-generated

Apicurio Registry 콘솔 및 API를 사용할 수 있는 호스트/URL. 가능한 경우 Service Registry Operator는 클러스터 라우터 설정에 따라 올바른 값을 확인합니다. 값은 한 번만 자동으로 생성되므로 사용자는 나중에 재정의할 수 있습니다.

deployment/affinity

k8s.io/api/core/v1 Affinity struct

empty

Apicurio Registry 배포 선호도 구성

Deployment/tolerations

k8s.io/api/core/v1 []Toleration 슬라이스

empty

Apicurio Registry 배포 허용 오차 구성

참고

옵션이 필수로 표시되면 활성화되는 다른 구성 옵션에 조건부가 될 수 있습니다. 빈 값이 허용되지만 Operator에서 지정된 작업을 수행하지 않습니다.

7.3. Apicurio Registry CR 상태

상태는 현재 배포 및 애플리케이션 상태에 대한 설명이 포함된 Service Registry Operator에서 관리하는 CR의 섹션입니다.

ApicurioRegistry CR 상태 콘텐츠

status 섹션에는 다음 필드가 포함되어 있습니다.

status:
  info:
    host: <string>
  conditions: <list of:>
  - type: <string>
    status: <string, one of: True, False, Unknown>
    reason: <string>
    message: <string>
    lastTransitionTime: <string, RFC-3339 timestamp>
  managedResources: <list of:>
  - kind: <string>
    namespace: <string>
    name: <string>

표 7.2. ApicurioRegistry CR 상태 필드

상태 필드유형설명

info

-

배포된 Apicurio Registry에 대한 정보가 있는 섹션입니다.

info/host

string

Apicurio Registry UI 및 REST API에 액세스할 수 있는 URL입니다.

conditions

-

Apicurio Registry의 상태를 보고하는 조건 목록 또는 해당 배포에 대한 Operator입니다.

conditions/type

string

조건 유형입니다.

conditions/status

string

조건의 상태, True 중 하나,False,알 수 없음.

conditions/reason

string

조건의 마지막 전환 이유를 나타내는 프로그래밍 식별자입니다.

조건/메시지

string

전환에 대한 세부 정보를 나타내는 사람이 읽을 수 있는 메시지입니다.

conditions/lastTransitionTime

string

조건이 한 상태에서 다른 상태로 마지막으로 전환된 시간입니다.

managedResources

-

Service Registry Operator에서 관리하는 OpenShift 리소스 목록

managedResources/kind

string

리소스 종류.

managedResources/namespace

string

리소스 네임스페이스.

managedResources/name

string

리소스 이름입니다.

7.4. Apicurio Registry 관리 리소스

Apicurio Registry를 배포할 때 Service Registry Operator에서 관리하는 리소스는 다음과 같습니다.

  • Deployment
  • Service
  • Ingress (및 경로)
  • PodDisruptionBudget

7.5. Service Registry Operator 라벨

Service Registry Operator에서 관리하는 리소스에는 일반적으로 다음과 같이 레이블이 지정됩니다.

표 7.3. 관리 리소스에 대한 Service Registry Operator 라벨

레이블설명

app

지정된 ApicurioRegistry CR의 이름을 기반으로 리소스가 속하는 Apicurio Registry 배포의 이름입니다.

apicur.io/type

배포 유형: apicurio-registry 또는 operator

apicur.io/name

배포 이름: app 또는 apicurio-registry-operator와 동일한 값

apicur.io/version

Apicurio 레지스트리 또는 Service Registry Operator 버전

app.kubernetes.io/*

애플리케이션 배포에 권장되는 Kubernetes 레이블 세트입니다.

com.companyrht.*'

Red Hat 제품의 미터링 레이블입니다.

부록 A. 서브스크립션 사용

Apicurio Registry는 소프트웨어 서브스크립션을 통해 제공됩니다. 서브스크립션을 관리하려면 Red Hat 고객 포털에서 계정에 액세스하십시오.

귀하의 계정에 액세스

  1. access.redhat.com 으로 이동합니다.
  2. 아직 계정이 없는 경우 계정을 생성합니다.
  3. 계정에 로그인합니다.

서브스크립션 활성화

  1. access.redhat.com 으로 이동합니다.
  2. 내 서브스크립션으로 이동합니다.
  3. 서브스크립션을 활성화하여 16자리 활성화 번호를 입력합니다.

ZIP 및 TAR 파일 다운로드

ZIP 또는 TAR 파일에 액세스하려면 고객 포털을 사용하여 다운로드를 위한 관련 파일을 찾습니다. RPM 패키지를 사용하는 경우에는 이 단계가 필요하지 않습니다.

  1. 브라우저를 열고 access.redhat.com/downloads 에서 Red Hat 고객 포털 제품 다운로드 페이지에 로그인합니다.
  2. 통합 및 자동화 카테고리에서 Red Hat Integration 항목을 찾습니다.
  3. 원하는 Apicurio Registry 제품을 선택합니다. Software Download 페이지가 열립니다.
  4. 구성 요소에 대한 다운로드 링크를 클릭합니다.

패키지용 시스템 등록

Red Hat Enterprise Linux에 RPM 패키지를 설치하려면 시스템을 등록해야 합니다. ZIP 또는 TAR 파일을 사용하는 경우 이 단계는 필요하지 않습니다.

  1. access.redhat.com 으로 이동합니다.
  2. Registration Assistant 로 이동합니다.
  3. OS 버전을 선택하고 다음 페이지로 이동합니다.
  4. 시스템 터미널에서 나열된 명령을 사용하여 등록을 완료합니다.

자세한 내용은 Red Hat 고객 포털에 시스템을 등록하고 가입하는 방법을 참조하십시오.

법적 공지

Copyright © 2023 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.