서버리스

OpenShift Container Platform 4.12

OpenShift 서버리스 설치, 사용법, 릴리스 정보

초록

이 문서에서는 OpenShift Container Platform에서 OpenShift 서버리스를 사용하는 방법에 대한 정보를 제공합니다.

1장. 릴리스 노트

참고

OpenShift Serverless 라이프 사이클 및 지원되는 플랫폼에 대한 자세한 내용은 플랫폼 라이프 사이클 정책을 참조하십시오.

릴리스 노트에는 새로운 기능 및 더 이상 사용되지 않는 기능, 변경 사항 중단 및 알려진 문제에 대한 정보가 포함되어 있습니다. 다음 릴리스 노트는 OpenShift Container Platform의 최신 OpenShift Serverless 릴리스에 적용됩니다.

OpenShift Serverless 기능에 대한 개요는 OpenShift Serverless 정보를 참조하십시오.

참고

OpenShift Serverless는 오픈 소스 Knative 프로젝트를 기반으로 합니다.

최신 Knative 구성 요소 릴리스에 대한 자세한 내용은 Knative 블로그를 참조하십시오.

1.1. API 버전 정보

API 버전은 OpenShift Serverless에서 특정 기능 및 사용자 정의 리소스의 개발 상태에 대한 중요한 측정입니다. 올바른 API 버전을 사용하지 않는 클러스터에서 리소스를 생성하면 배포에 문제가 발생할 수 있습니다.

OpenShift Serverless Operator는 최신 버전을 사용하기 위해 더 이상 사용되지 않는 API를 사용하는 이전 리소스를 자동으로 업그레이드합니다. 예를 들어 v1beta1과 같은 이전 ApiServerSource API 버전을 사용하는 리소스를 클러스터에 생성한 경우 OpenShift Serverless Operator는 사용 가능하고 v1beta1 버전이 더 이상 사용되지 않을 때 API의 v1 버전을 사용하도록 이러한 리소스를 자동으로 업데이트합니다.

더 이상 사용되지 않는 API의 이전 버전은 향후 릴리스에서 제거될 수 있습니다. 더 이상 사용되지 않는 API 버전을 사용해도 리소스가 실패하지 않습니다. 그러나 제거된 API 버전을 사용하려고 하면 리소스가 실패합니다. 문제를 방지하기 위해 최신 버전을 사용하도록 매니페스트가 업데이트되었는지 확인합니다.

1.2. 일반적으로 사용 가능 및 기술 프리뷰 기능

일반적으로 사용 가능한 기능(GA)이 완전히 지원되며 프로덕션용으로 적합합니다.Features that are general Available (GA) are fully supported and are suitable for production use. 기술 프리뷰(TP) 기능은 실험적인 기능이며 프로덕션용이 아닙니다. TP 기능에 대한 자세한 내용은 Red Hat 고객 포털에서 기술 프리뷰 지원 범위를 참조하십시오.

다음 표에서는 GA 및 TP인 OpenShift Serverless 기능에 대한 정보를 제공합니다.

표 1.1. 일반적으로 사용 가능 및 기술 프리뷰 기능 추적

기능1.231.241.251.261.27

kn func

TP

TP

TP

GA

GA

서비스 메시 mTLS

GA

GA

GA

GA

GA

emptyDir volume

GA

GA

GA

GA

GA

HTTPS 리디렉션

GA

GA

GA

GA

GA

Kafka 브로커

TP

TP

GA

GA

GA

Kafka 싱크

TP

TP

GA

GA

GA

Knative 서비스에 대한 init 컨테이너 지원

TP

GA

GA

GA

GA

Knative 서비스에 대한 PVC 지원

TP

TP

TP

GA

GA

내부 트래픽의 경우 TLS

-

-

TP

TP

TP

네임스페이스 범위 브로커

-

-

-

-

TP

1.3. 사용되지 않거나 삭제된 기능

이전 릴리스에서 일반적으로 사용 가능한 (GA) 또는 기술 프리뷰 (TP)인 일부 기능은 더 이상 사용되지 않거나 삭제되었습니다. 더 이상 사용되지 않는 기능은 여전히 OpenShift Serverless에 포함되어 있으며 계속 지원됩니다. 그러나 이 기능은 향후 릴리스에서 제거될 예정이므로 새로운 배포에는 사용하지 않는 것이 좋습니다.

OpenShift Serverless에서 더 이상 사용되지 않고 삭제된 주요 기능의 최신 목록은 다음 표를 참조하십시오.

표 1.2. 사용되지 않거나 삭제된 기능 추적

기능1.201.211.22 ~ 1.261.27

KafkaBinding API

deprecated

deprecated

삭제됨

삭제됨

kn func emit (91+의kn func invoke )

deprecated

삭제됨

삭제됨

삭제됨

Eventing v1alpha1 API 제공 및

-

-

-

deprecated

1.4. Red Hat OpenShift Serverless 1.27 릴리스 노트

OpenShift Serverless 1.27을 사용할 수 있습니다. 이 항목에는 OpenShift Container Platform의 OpenShift Serverless와 관련된 새로운 기능, 변경 사항, 알려진 문제가 포함되어 있습니다.

중요

OpenShift Serverless 1.26은 OpenShift Container Platform 4.12에서 완전히 지원되는 가장 빠른 릴리스입니다. OpenShift Serverless 1.25 이상은 OpenShift Container Platform 4.12에 배포되지 않습니다.

따라서 OpenShift Container Platform을 버전 4.12로 업그레이드하기 전에 먼저 OpenShift Serverless를 버전 1.26 또는 1.27로 업그레이드합니다.

1.4.1. 새로운 기능

  • OpenShift Serverless에서 Knative Serving 1.6을 사용합니다.
  • OpenShift Serverless에서 Knative Eventing 1.6을 사용합니다.
  • OpenShift Serverless에서 Kourier 1.6을 사용합니다.
  • OpenShift Serverless에서 Knative(kn) CLI 1.6을 사용합니다.
  • OpenShift Serverless에서 Knative Kafka 1.6을 사용합니다.
  • kn func CLI 플러그인은 이제 func 1.8.1을 사용합니다.
  • 네임스페이스 범위 브로커가 이제 기술 프리뷰로 제공됩니다. 예를 들어 이러한 브로커를 사용하여 역할 기반 액세스 제어(RBAC) 정책을 구현할 수 있습니다.
  • 이제 KafkaSink 는 기본적으로 CloudEvent 바이너리 콘텐츠 모드를 사용합니다. 바이너리 콘텐츠 모드는 CloudEvent 대신 본문의 헤더를 사용하므로 구조화된 모드보다 효율적입니다. 예를 들어 HTTP 프로토콜의 경우 HTTP 헤더를 사용합니다.
  • OpenShift Container Platform 4.10 이상에서 OpenShift 경로를 사용하여 외부 트래픽에 HTTP/2 프로토콜을 통해 gRPC 프레임워크를 사용할 수 있습니다. 이를 통해 클라이언트와 서버 간 통신의 효율성 및 속도가 향상됩니다.
  • Knative Operator Serving 및 Eventings CRD의 API 버전 v1alpha1 은 1.27에서 더 이상 사용되지 않습니다. 이는 향후 버전에서 제거됩니다. 대신 v1beta1 버전을 사용하는 것이 좋습니다. 이는 Serverless Operator를 업그레이드할 때 CRD가 자동으로 업데이트되므로 기존 설치에는 영향을 미치지 않습니다.
  • 전달 제한 시간 기능은 기본적으로 활성화되어 있습니다. 이를 통해 전송된 각 HTTP 요청에 대한 타임아웃을 지정할 수 있습니다. 이 기능은 기술 프리뷰로 남아 있습니다.

1.4.2. 해결된 문제

  • 이전 버전에서는 Knative 서비스가 Ready 상태가 되지 않아 로드 밸런서가 준비될 때까지 대기 시간을 보고하는 경우가 있었습니다. 이 문제가 해결되었습니다.

1.4.3. 확인된 문제

  • OpenShift Serverless를 Red Hat OpenShift Service Mesh와 통합하면 클러스터에 너무 많은 보안이 있을 때 net-kourier Pod가 시작 시 메모리가 부족합니다.
  • 네임스페이스 범위 브로커는 네임스페이스 범위의 브로커를 삭제한 후에도 사용자 네임스페이스에 ClusterRoleBindings 를 남겨 둘 수 있습니다.

    이 경우 사용자 네임스페이스에서 rbac-proxy-reviews-prom-rb-knative-kafka-broker-data-plane-{{.Namespace}} 라는 ClusterRoleBinding 을 삭제합니다.

  • Ingress에 net-istio 를 사용하고 security.dataPlane.mtls: true 를 사용하여 SMCP를 통해 mTLS를 활성화하는 경우 Service Mesh는 OpenShift Serverless에 대한 DomainMapping 을 허용하지 않는 *.local 호스트에 대한 DestinationRule 을 배포합니다.

    이 문제를 해결하려면 security.dataPlane.mtls: true 를 사용하는 대신 PeerAuthentication 을 배포하여 mTLS를 활성화합니다.

1.5. Red Hat OpenShift Serverless 1.26 릴리스 노트

OpenShift Serverless 1.26이 공개되었습니다. 이 항목에는 OpenShift Container Platform의 OpenShift Serverless와 관련된 새로운 기능, 변경 사항, 알려진 문제가 포함되어 있습니다.

1.5.1. 새로운 기능

  • Quarkus를 사용하는 OpenShift Serverless Functions가 이제 GA입니다.
  • OpenShift Serverless에서 Knative Serving 1.5를 사용합니다.
  • OpenShift Serverless에서 Knative Eventing 1.5를 사용합니다.
  • OpenShift Serverless에서 Kourier 1.5를 사용합니다.
  • OpenShift Serverless에서 Knative(kn) CLI 1.5를 사용합니다.
  • OpenShift Serverless에서 Knative Kafka 1.5를 사용합니다.
  • OpenShift Serverless에서 Knative Operator 1.3을 사용합니다.
  • kn func CLI 플러그인에서 func 1.8.1을 사용합니다.
  • PVC(영구 볼륨 클레임)는 이제 GA입니다. PVC는 Knative 서비스에 영구 데이터 스토리지를 제공합니다.
  • 새로운 트리거 필터 기능을 이제 개발자 프리뷰로 사용할 수 있습니다. 이를 통해 사용자는 필터 표현식 세트를 지정할 수 있으며 각 표현식은 각 이벤트에 대해 true 또는 false로 평가됩니다.

    새 트리거 필터를 활성화하려면 Operator 구성 맵의 KnativeEventing 유형의 섹션에 new-trigger-filters: enabled 항목을 추가합니다.

    apiVersion: operator.knative.dev/v1alpha1
    kind: KnativeEventing
    ...
    ...
    spec:
      config:
        features:
          new-trigger-filters: enabled
    ...
  • Knative Operator 1.3은 operator.knative.dev 용으로 API의 업데이트된 v1beta1 버전을 추가합니다.

    KnativeServingKnativeEventing 사용자 정의 리소스 구성 맵의 v1alpha1 에서 v1beta1 로 업데이트하려면 apiVersion 키를 편집합니다.

    KnativeServing 사용자 정의 리소스 구성 맵의 예

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeServing
    ...

    KnativeEventing 사용자 정의 리소스 구성 맵의 예

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeEventing
    ...

1.5.2. 해결된 문제

  • 이전에는 Kafka 브로커, Kafka 소스 및 Kafka 싱크에서 FIPS(Federal Information Processing Standards) 모드가 비활성화되었습니다. 이 문제가 해결되었으며 이제 FIPS 모드를 사용할 수 있습니다.

1.5.3. 확인된 문제

  • Ingress에 net-istio 를 사용하고 security.dataPlane.mtls: true 를 사용하여 SMCP를 통해 mTLS를 활성화하는 경우 Service Mesh는 OpenShift Serverless에 대한 DomainMapping 을 허용하지 않는 *.local 호스트에 대한 DestinationRule 을 배포합니다.

    이 문제를 해결하려면 security.dataPlane.mtls: true 를 사용하는 대신 PeerAuthentication 을 배포하여 mTLS를 활성화합니다.

1.6. Red Hat OpenShift Serverless 1.25.0 릴리스 노트

OpenShift Serverless 1.25.0이 공개되었습니다. 이 항목에는 OpenShift Container Platform의 OpenShift Serverless와 관련된 새로운 기능, 변경 사항, 알려진 문제가 포함되어 있습니다.

1.6.1. 새로운 기능

  • OpenShift Serverless에서 Knative Serving 1.4를 사용합니다.
  • OpenShift Serverless에서 Knative Eventing 1.4를 사용합니다.
  • OpenShift Serverless에서 Kourier 1.4를 사용합니다.
  • OpenShift Serverless에서 Knative(kn) CLI 1.4를 사용합니다.
  • OpenShift Serverless에서 Knative Kafka 1.4를 사용합니다.
  • kn func CLI 플러그인에서 func 1.7.0을 사용합니다.
  • 함수 생성 및 배포를 위한 IDE(통합 개발 환경) 플러그인을 이제 Visual Studio CodeIntelliJ 에서 사용할 수 있습니다.
  • Knative Kafka 브로커는 이제 GA입니다. Knative Kafka 브로커는 Apache Kafka를 직접 대상으로 하는 Knative 브로커 API의 고성능 구현입니다.

    MT-Channel-Broker를 사용하지 않는 것이 좋지만 Knative Kafka 브로커를 대신 사용하지 않는 것이 좋습니다.

  • Knative Kafka 싱크는 이제 GA입니다. KafkaSinkCloudEvent 를 사용하여 Apache Kafka 주제로 보냅니다. 이벤트는 구조화된 또는 바이너리 콘텐츠 모드로 지정할 수 있습니다.
  • 내부 트래픽에 대한 TLS 활성화가 기술 프리뷰로 제공됩니다.

1.6.2. 해결된 문제

  • 이전 버전에서는 활성 상태 프로브가 실패한 후 컨테이너를 재시작한 경우 Knative Serving에 준비 상태 프로브가 실패한 문제가 있었습니다. 이 문제가 해결되었습니다.

1.6.3. 확인된 문제

  • Kafka 브로커, Kafka 소스 및 Kafka 싱크에 대해 연방 정보 처리 표준(FIPS) 모드가 비활성화되어 있습니다.
  • SinkBinding 오브젝트는 서비스에 대한 사용자 정의 리버전 이름을 지원하지 않습니다.
  • Knative Serving 컨트롤러 Pod는 클러스터의 시크릿을 감시하기 위해 새로운 정보원을 추가합니다. informer에는 캐시에 시크릿이 포함되어 있으므로 컨트롤러 Pod의 메모리 사용량이 증가합니다.

    Pod가 메모리가 부족하면 배포의 메모리 제한을 늘려 문제를 해결할 수 있습니다.

  • Ingress에 net-istio 를 사용하고 security.dataPlane.mtls: true 를 사용하여 SMCP를 통해 mTLS를 활성화하는 경우 Service Mesh는 OpenShift Serverless에 대한 DomainMapping 을 허용하지 않는 *.local 호스트에 대한 DestinationRule 을 배포합니다.

    이 문제를 해결하려면 security.dataPlane.mtls: true 를 사용하는 대신 PeerAuthentication 을 배포하여 mTLS를 활성화합니다.

추가 리소스

1.7. Red Hat OpenShift Serverless 1.24.0 릴리스 정보

OpenShift Serverless 1.24.0을 사용할 수 있습니다. 이 항목에는 OpenShift Container Platform의 OpenShift Serverless와 관련된 새로운 기능, 변경 사항, 알려진 문제가 포함되어 있습니다.

1.7.1. 새로운 기능

  • OpenShift Serverless에서 Knative Serving 1.3을 사용합니다.
  • OpenShift Serverless에서 Knative Eventing 1.3을 사용합니다.
  • OpenShift Serverless에서 Kourier 1.3을 사용합니다.
  • OpenShift Serverless에서 Knative kn CLI 1.3을 사용합니다.
  • OpenShift Serverless에서 Knative Kafka 1.3을 사용합니다.
  • kn func CLI 플러그인에서 func 0.24를 사용합니다.
  • 이제 Knative 서비스에 대한 init 컨테이너 지원을 일반적으로 사용할 수 있습니다(GA).
  • OpenShift Serverless 논리를 개발자 프리뷰로 사용할 수 있습니다. 서버리스 애플리케이션을 관리하기 위한 선언적 워크플로 모델을 정의할 수 있습니다.
  • 이제 OpenShift Serverless에서 비용 관리 서비스를 사용할 수 있습니다.

1.7.2. 해결된 문제

  • OpenShift Serverless를 Red Hat OpenShift Service Mesh와 통합하면 클러스터에 너무 많은 시크릿이 있을 때 net-istio-controller pod가 시작 시 메모리 부족으로 실행됩니다.

    이제 net-istio-controllernetworking.internal.knative.dev/certificate-uid 레이블이 있는 보안만 고려하도록 하여 필요한 메모리 양을 줄일 수 있습니다.

  • OpenShift Serverless Functions Technology Preview에서는 이제 기본적으로 Cloud Native Buildpacks 를 사용하여 컨테이너 이미지를 빌드합니다.

1.7.3. 확인된 문제

  • Kafka 브로커, Kafka 소스 및 Kafka 싱크에 대해 연방 정보 처리 표준(FIPS) 모드가 비활성화되어 있습니다.
  • OpenShift Serverless 1.23에서 KafkaBinding을 지원하고 kafka-binding Webhook가 제거되었습니다. 그러나 기존 kafkabindings.webhook.kafka.sources.knative.dev MutatingWebhookConfiguration 은 더 이상 존재하지 않는 kafka-source-webhook 서비스를 가리키는 남아 있을 수 있습니다.

    클러스터의 KafkaBindings의 특정 사양에 대해 kafkabindings.webhook.kafka.sources.knative.dev MutatingWebhookConfiguration 은 생성 및 업데이트 이벤트를(예: Deployments, Knative 서비스 또는 Jobs)에 전달하도록 구성할 수 있습니다. 그러면 Webhook를 통해 오류가 발생합니다.

    이 문제를 해결하려면 OpenShift Serverless 1.23으로 업그레이드한 후 클러스터에서 kafkabindings.webhook.kafka.sources.knative.dev MutatingWebhookConfiguration 을 수동으로 삭제합니다.

    $ oc delete mutatingwebhookconfiguration kafkabindings.webhook.kafka.sources.knative.dev
  • Ingress에 net-istio 를 사용하고 security.dataPlane.mtls: true 를 사용하여 SMCP를 통해 mTLS를 활성화하는 경우 Service Mesh는 OpenShift Serverless에 대한 DomainMapping 을 허용하지 않는 *.local 호스트에 대한 DestinationRule 을 배포합니다.

    이 문제를 해결하려면 security.dataPlane.mtls: true 를 사용하는 대신 PeerAuthentication 을 배포하여 mTLS를 활성화합니다.

1.8. Red Hat OpenShift Serverless 1.23.0 릴리스 정보

OpenShift Serverless 1.23.0을 사용할 수 있습니다. 이 항목에는 OpenShift Container Platform의 OpenShift Serverless와 관련된 새로운 기능, 변경 사항, 알려진 문제가 포함되어 있습니다.

1.8.1. 새로운 기능

  • OpenShift Serverless에서 Knative Serving 1.2를 사용합니다.
  • OpenShift Serverless에서 Knative Eventing 1.2를 사용합니다.
  • OpenShift Serverless에서 Kourier 1.2를 사용합니다.
  • OpenShift Serverless에서 Knative(kn) CLI 1.2를 사용합니다.
  • OpenShift Serverless에서 Knative Kafka 1.2를 사용합니다.
  • kn func CLI 플러그인에서 func 0.24를 사용합니다.
  • Kafka 브로커와 함께 kafka.eventing.knative.dev/external.topic 주석을 사용할 수 있습니다. 이 주석을 사용하면 브로커가 자체 내부 주제를 생성하는 대신 외부로 관리되는 기존 주제를 사용할 수 있습니다.
  • kafka-ch-controllerkafka-webhook Kafka 구성 요소가 더 이상 존재하지 않습니다. 이러한 구성 요소는 kafka-webhook-eventing 구성 요소로 교체되었습니다.
  • OpenShift Serverless Functions Technology Preview에서는 기본적으로 S2I(Source-to-Image)를 사용하여 컨테이너 이미지를 빌드합니다.

1.8.2. 확인된 문제

  • Kafka 브로커, Kafka 소스 및 Kafka 싱크에 대해 연방 정보 처리 표준(FIPS) 모드가 비활성화되어 있습니다.
  • Kafka 브로커를 포함하는 네임스페이스를 삭제하는 경우 브로커의 auth.secret.ref.name 보안이 브로커 전에 삭제되면 네임스페이스 종료자가 제거되지 않을 수 있습니다.
  • 많은 Knative 서비스로 OpenShift Serverless를 실행하면 Knative 활성화기 Pod가 600MB의 기본 메모리 제한에 근접하게 실행될 수 있습니다. 메모리 사용량이 이 제한에 도달하면 이러한 Pod를 재시작할 수 있습니다. activator 배포에 대한 요청 및 제한은 KnativeServing 사용자 정의 리소스를 수정하여 구성할 수 있습니다.

    apiVersion: operator.knative.dev/v1alpha1
    kind: KnativeServing
    metadata:
      name: knative-serving
      namespace: knative-serving
    spec:
      deployments:
      - name: activator
        resources:
        - container: activator
          requests:
            cpu: 300m
            memory: 60Mi
          limits:
            cpu: 1000m
            memory: 1000Mi
  • 함수의 로컬 빌드 전략으로 Cloud Native Buildpacks 를 사용하는 경우 kn func 는 podman을 자동으로 시작하거나 원격 데몬에 SSH 터널을 사용할 수 없습니다. 이러한 문제의 해결 방법은 함수를 배포하기 전에 로컬 개발 컴퓨터에서 Docker 또는 podman 데몬을 이미 실행하는 것입니다.
  • 현재 Quarkus 및 Golang 런타임의 경우 온프레미스 함수 빌드가 실패합니다. Node, Typescript, Python, Springboot 런타임에서 올바르게 작동합니다.
  • Ingress에 net-istio 를 사용하고 security.dataPlane.mtls: true 를 사용하여 SMCP를 통해 mTLS를 활성화하는 경우 Service Mesh는 OpenShift Serverless에 대한 DomainMapping 을 허용하지 않는 *.local 호스트에 대한 DestinationRule 을 배포합니다.

    이 문제를 해결하려면 security.dataPlane.mtls: true 를 사용하는 대신 PeerAuthentication 을 배포하여 mTLS를 활성화합니다.

추가 리소스

1.9. Red Hat OpenShift Serverless 1.22.0 릴리스 정보

OpenShift Serverless 1.22.0을 사용할 수 있습니다. 이 항목에는 OpenShift Container Platform의 OpenShift Serverless와 관련된 새로운 기능, 변경 사항, 알려진 문제가 포함되어 있습니다.

1.9.1. 새로운 기능

  • OpenShift Serverless에서 Knative Serving 1.1을 사용합니다.
  • OpenShift Serverless에서 Knative Eventing 1.1을 사용합니다.
  • OpenShift Serverless에서 Kourier 1.1을 사용합니다.
  • OpenShift Serverless에서 Knative(kn) CLI 1.1을 사용합니다.
  • OpenShift Serverless에서 Knative Kafka 1.1을 사용합니다.
  • kn func CLI 플러그인에서 func 0.23를 사용합니다.
  • Knative 서비스에 대한 init 컨테이너 지원이 기술 프리뷰로 제공됩니다.
  • Knative 서비스에 대한 PVC(영구 볼륨 클레임) 지원이 기술 프리뷰로 제공됩니다.
  • knative-serving,knative-serving-ingress,knative-eventingknative-kafka 시스템 네임스페이스에는 기본적으로 knative.openshift.io/part-of: "openshift-serverless" 라벨이 있습니다.
  • Knative Eventing - Kafka Broker/Trigger 대시보드가 추가되어 Kafka 브로커를 시각화하고 웹 콘솔에서 메트릭을 트리거할 수 있습니다.
  • Knative Eventing - KafkaSink 대시보드가 추가되어 웹 콘솔에서 KafkaSink 지표를 시각화할 수 있습니다.
  • Knative Eventing - Broker/Trigger 대시보드가 Knative Eventing - 채널 기반 브로커/Trigger 라고도 합니다.
  • knative.openshift.io/part-of: "openshift-serverless" 레이블에서 knative.openshift.io/system-namespace 레이블을 대체했습니다.
  • Knative Serving YAML 구성 파일의 이름 지정 스타일은 camel case(예: 이름)에서 하이픈 스타일(예:example-name)으로 변경되었습니다. 이 릴리스부터 Knative Serving YAML 구성 파일을 생성하거나 편집할 때 하이픈 스타일 표기법을 사용하십시오.

1.9.2. 확인된 문제

  • Kafka 브로커, Kafka 소스 및 Kafka 싱크에 대해 연방 정보 처리 표준(FIPS) 모드가 비활성화되어 있습니다.

1.10. Red Hat OpenShift Serverless 1.21.0 릴리스 정보

OpenShift Serverless 1.21.0을 사용할 수 있습니다. 이 항목에는 OpenShift Container Platform의 OpenShift Serverless와 관련된 새로운 기능, 변경 사항, 알려진 문제가 포함되어 있습니다.

1.10.1. 새로운 기능

  • OpenShift Serverless에서 Knative Serving 1.0 사용
  • OpenShift Serverless에서 Knative Eventing 1.0을 사용합니다.
  • OpenShift Serverless에서 Kourier 1.0을 사용합니다.
  • OpenShift Serverless에서 Knative(kn) CLI 1.0을 사용합니다.
  • OpenShift Serverless에서 Knative Kafka 1.0을 사용합니다.
  • kn func CLI 플러그인에서 func 0.21을 사용합니다.
  • Kafka 싱크를 기술 프리뷰로 사용할 수 있습니다.
  • Knative 오픈 소스 프로젝트는 kebab-cased 키를 일관되게 사용하기 위해 제공된 구성 키를 사용 중단하기 시작했습니다. 결과적으로 OpenShift Serverless 1.18.0 릴리스 노트에서 이전에 언급된 defaultExternalScheme 키가 더 이상 사용되지 않으며 default-external-scheme 키로 대체됩니다. 키에 대한 사용 지침은 동일하게 유지됩니다.

1.10.2. 해결된 문제

  • OpenShift Serverless 1.20.0에는 kn event send 를 사용하여 이벤트를 서비스로 보내는 데 영향을 미치는 이벤트 전달 문제가 있었습니다. 이제 이 문제가 해결되었습니다.
  • OpenShift Serverless 1.20.0(func 0.20)에서 http 템플릿으로 생성된 TypeScript 함수가 클러스터에 배포되지 않았습니다. 이제 이 문제가 해결되었습니다.
  • OpenShift Serverless 1.20.0(func 0.20)에서 gcr.io 레지스트리를 사용하여 함수를 배포하는 데 오류와 함께 실패했습니다. 이제 이 문제가 해결되었습니다.
  • OpenShift Serverless 1.20.0(func 0.20)에서 kn func create 명령을 사용하여 Springboot 함수 프로젝트 디렉터리를 생성한 다음 kn func build 명령을 실행해도 오류 메시지와 함께 kn func build 명령이 실패했습니다. 이제 이 문제가 해결되었습니다.
  • OpenShift Serverless 1.19.0(func 0.19)에서는 일부 런타임에서 podman을 사용하여 함수를 빌드할 수 없었습니다. 이제 이 문제가 해결되었습니다.

1.10.3. 확인된 문제

  • 현재 도메인 매핑 컨트롤러는 현재 지원되지 않는 경로가 포함된 브로커의 URI를 처리할 수 없습니다.

    즉, DomainMapping CR(사용자 정의 리소스)을 사용하여 사용자 정의 도메인을 브로커에 매핑하려면 브로커의 수신 서비스로 DomainMapping CR을 구성하고 브로커의 정확한 경로를 사용자 정의 도메인에 추가해야 합니다.

    DomainMapping CR의 예

    apiVersion: serving.knative.dev/v1alpha1
    kind: DomainMapping
    metadata:
      name: <domain-name>
      namespace: knative-eventing
    spec:
      ref:
        name: broker-ingress
        kind: Service
        apiVersion: v1

    브로커의 URI는 < domain-name>/<broker-namespace>/<broker-name>입니다.

1.11. Red Hat OpenShift Serverless 1.20.0 릴리스 노트

OpenShift Serverless 1.20.0을 사용할 수 있습니다. 이 항목에는 OpenShift Container Platform의 OpenShift Serverless와 관련된 새로운 기능, 변경 사항, 알려진 문제가 포함되어 있습니다.

1.11.1. 새로운 기능

  • OpenShift Serverless에서 Knative Serving 0.26을 사용합니다.
  • OpenShift Serverless에서 Knative Eventing 0.26을 사용합니다.
  • OpenShift Serverless에서 Kourier 0.26을 사용합니다.
  • OpenShift Serverless에서 Knative(kn) CLI 0.26을 사용합니다.
  • OpenShift Serverless에서 Knative Kafka 0.26을 사용합니다.
  • kn func CLI 플러그인에서 func 0.20을 사용합니다.
  • Kafka 브로커를 기술 프리뷰로 사용할 수 있습니다.

    중요

    현재 기술 프리뷰에 있는 Kafka 브로커는 FIPS에서 지원되지 않습니다.

  • kn 이벤트 플러그인을 기술 프리뷰로 사용할 수 있습니다.
  • kn service create 명령의 --min-scale--max-scale 플래그는 더 이상 사용되지 않습니다. 대신 --scale-min--scale-max 플래그를 사용합니다.

1.11.2. 확인된 문제

  • OpenShift Serverless는 HTTPS를 사용하는 기본 주소로 Knative 서비스를 배포합니다. 클러스터 내부의 리소스로 이벤트를 보낼 때 발신자는 클러스터 CA(인증 기관)를 구성하지 않습니다. 이로 인해 클러스터가 전역적으로 허용되는 인증서를 사용하지 않는 한 이벤트 전달이 실패합니다.

    예를 들어 공개적으로 액세스 가능한 주소로 이벤트 전달이 작동합니다.

    $ kn event send --to-url https://ce-api.foo.example.com/

    반면 서비스에서 사용자 정의 CA에서 발급한 HTTPS 인증서가 있는 공용 주소를 사용하는 경우 이 전달이 실패합니다.

    $ kn event send --to Service:serving.knative.dev/v1:event-display

    브로커 또는 채널과 같은 다른 주소 지정 가능 개체에 이벤트를 보내는 것은 이 문제의 영향을 받지 않으며 예상대로 작동합니다.

  • Kafka 브로커는 현재 연방 정보 처리 표준(FIPS) 모드가 활성화된 클러스터에서 작동하지 않습니다.
  • kn func create 명령을 사용하여 Springboot 함수 프로젝트 디렉터리를 생성하는 경우 다음 오류 메시지와 함께 kn func build 명령을 실행하면 실패합니다.

    [analyzer] no stack metadata found at path ''
    [analyzer] ERROR: failed to : set API for buildpack 'paketo-buildpacks/ca-certificates@3.0.2': buildpack API version '0.7' is incompatible with the lifecycle

    이 문제를 해결하려면 함수 구성 파일 func.yaml 에서 builder 속성을 gcr.io/paketo-buildpacks/builder:base 로 변경할 수 있습니다.

  • gcr.io 레지스트리를 사용하여 함수를 배포하면 다음 오류 메시지와 함께 실패합니다.

    Error: failed to get credentials: failed to verify credentials: status code: 404

    이 문제를 해결하려면 quay.io 또는 docker.io 와 같은 gcr.io 와 다른 레지스트리를 사용하십시오.

  • http 템플릿으로 생성된 TypeScript 함수는 클러스터에 배포되지 않습니다.

    이 문제를 해결하려면 func.yaml 파일에서 다음 섹션을 교체합니다.

    buildEnvs: []

    이 경우:

    buildEnvs:
    - name: BP_NODE_RUN_SCRIPTS
      value: build
  • func 버전 0.20에서 일부 런타임은 podman을 사용하여 함수를 빌드할 수 없습니다. 다음과 유사한 오류 메시지가 표시될 수 있습니다.

    ERROR: failed to image: error during connect: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.40/info": EOF
    • 이 문제에 대한 다음 해결방법이 있습니다.

      1. 서비스 ExecStart 정의에 --time=0 을 추가하여 podman 서비스를 업데이트합니다.

        서비스 구성 예

        ExecStart=/usr/bin/podman $LOGGING system service --time=0

      2. 다음 명령을 실행하여 podman 서비스를 다시 시작합니다.

        $ systemctl --user daemon-reload
        $ systemctl restart --user podman.socket
    • 또는 TCP를 사용하여 podman API를 노출할 수도 있습니다.

      $ podman system service --time=0 tcp:127.0.0.1:5534 &
      export DOCKER_HOST=tcp://127.0.0.1:5534

1.12. Red Hat OpenShift Serverless 1.19.0 릴리스 노트

OpenShift Serverless 1.19.0을 사용할 수 있습니다. 이 항목에는 OpenShift Container Platform의 OpenShift Serverless와 관련된 새로운 기능, 변경 사항, 알려진 문제가 포함되어 있습니다.

1.12.1. 새로운 기능

  • OpenShift Serverless에서 Knative Serving 0.25를 사용합니다.
  • OpenShift Serverless에서 Knative Eventing 0.25를 사용합니다.
  • OpenShift Serverless에서 Kourier 0.25를 사용합니다.
  • OpenShift Serverless에서 Knative(kn) CLI 0.25를 사용합니다.
  • OpenShift Serverless에서 Knative Kafka 0.25를 사용합니다.
  • kn func CLI 플러그인에서 func 0.19를 사용합니다.
  • KafkaBinding API는 OpenShift Serverless 1.19.0에서 더 이상 사용되지 않으며 향후 릴리스에서 제거됩니다.
  • 이제 HTTPS 리디렉션이 지원되며 클러스터 또는 각 Knative 서비스에 대해 전역적으로 구성할 수 있습니다.

1.12.2. 해결된 문제

  • 이전 릴리스에서 Kafka 채널 디스패처는 응답하기 전에 로컬 커밋이 성공할 때만 대기했습니다. 이로 인해 Apache Kafka 노드 실패 시 이벤트가 손실되었을 수 있습니다. 이제 Kafka 채널 디스패처가 응답하기 전에 모든 비동기 복제본이 커밋될 때까지 대기합니다.

1.12.3. 확인된 문제

  • func 버전 0.19에서는 podman을 사용하여 일부 런타임에서 함수를 빌드할 수 없습니다. 다음과 유사한 오류 메시지가 표시될 수 있습니다.

    ERROR: failed to image: error during connect: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.40/info": EOF
    • 이 문제에 대한 다음 해결방법이 있습니다.

      1. 서비스 ExecStart 정의에 --time=0 을 추가하여 podman 서비스를 업데이트합니다.

        서비스 구성 예

        ExecStart=/usr/bin/podman $LOGGING system service --time=0

      2. 다음 명령을 실행하여 podman 서비스를 다시 시작합니다.

        $ systemctl --user daemon-reload
        $ systemctl restart --user podman.socket
    • 또는 TCP를 사용하여 podman API를 노출할 수도 있습니다.

      $ podman system service --time=0 tcp:127.0.0.1:5534 &
      export DOCKER_HOST=tcp://127.0.0.1:5534

1.13. Red Hat OpenShift Serverless 1.18.0 릴리스 정보

OpenShift Serverless 1.18.0을 사용할 수 있습니다. 이 항목에는 OpenShift Container Platform의 OpenShift Serverless와 관련된 새로운 기능, 변경 사항, 알려진 문제가 포함되어 있습니다.

1.13.1. 새로운 기능

  • OpenShift Serverless에서 Knative Serving 0.24.0을 사용합니다.
  • OpenShift Serverless에서 Knative Eventing 0.24.0을 사용합니다.
  • OpenShift Serverless에서 Kourier 0.24.0을 사용합니다.
  • OpenShift Serverless에서 Knative(kn) CLI 0.24.0을 사용합니다.
  • OpenShift Serverless에서 Knative Kafka 0.24.7을 사용합니다.
  • kn func CLI 플러그인에서 func 0.18.0을 사용합니다.
  • 향후 OpenShift Serverless 1.19.0 릴리스에서는 보안을 강화하기 위해 외부 경로의 URL 체계가 기본적으로 HTTPS로 설정됩니다.

    이 변경 사항을 워크로드에 적용하지 않으려면 KnativeServing 사용자 정의 리소스(CR)에 다음 YAML을 추가하여 1.19.0로 업그레이드하기 전에 기본 설정을 덮어쓸 수 있습니다.

    ...
    spec:
      config:
        network:
          defaultExternalScheme: "http"
    ...

    1.18.0에 변경 사항을 적용하려면 다음 YAML을 추가합니다.

    ...
    spec:
      config:
        network:
          defaultExternalScheme: "https"
    ...
  • 향후 OpenShift Serverless 1.19.0 릴리스에서 Kourier 게이트웨이가 노출되는 기본 서비스 유형은 ClusterIP 이며 LoadBalancer 가 아닙니다.

    이 변경 사항을 워크로드에 적용하지 않으려면 KnativeServing 사용자 정의 리소스(CR)에 다음 YAML을 추가하여 1.19.0로 업그레이드하기 전에 기본 설정을 덮어쓸 수 있습니다.

    ...
    spec:
      ingress:
        kourier:
          service-type: LoadBalancer
    ...
  • OpenShift Serverless에서 emptyDir 볼륨을 사용할 수 있습니다. 자세한 내용은 Knative Serving에 대한 OpenShift Serverless 문서를 참조하십시오.
  • kn func 를 사용하여 함수를 생성할 때 rust 템플릿을 사용할 수 있습니다.

1.13.2. 해결된 문제

  • Camel-K의 이전 1.4 버전은 OpenShift Serverless 1.17.0과 호환되지 않았습니다. Camel-K의 문제가 해결되었으며 Camel-K 버전 1.4.1은 OpenShift Serverless 1.17.0과 함께 사용할 수 있습니다.
  • 이전 버전에서는 Kafka 채널 또는 새 Kafka 소스에 대한 새 서브스크립션을 생성한 경우 새로 생성된 서브스크립션 또는 싱크에서 준비 상태를 보고한 후 Kafka 데이터 플레인에서 메시지를 디스패치할 수 있었습니다.

    그 결과 데이터 플레인에서 준비 상태를 보고하지 않은 시간 동안 전송된 메시지가 구독자 또는 싱크로 전달되지 않았을 수 있었습니다.

    OpenShift Serverless 1.18.0에서는 문제가 해결되어 초기 메시지가 더 이상 손실되지 않습니다. 이 문제에 대한 자세한 내용은 지식베이스 문서 #6343981 을 참조하십시오.

1.13.3. 확인된 문제

  • 이전 버전의 Knative kn CLI에서는 이전 버전의 Knative Serving 및 Knative Eventing API를 사용할 수 있습니다. 예를 들어 kn CLI의 버전 0.23.2에서는 v1alpha1 API 버전을 사용합니다.

    반면 최신 OpenShift Serverless 릴리스는 더 이상 이전 API 버전을 지원하지 않을 수 있습니다. 예를 들어 OpenShift Serverless 1.18.0은 kafkasources.sources.knative.dev API의 버전 v1alpha1 을 지원하지 않습니다.

    결과적으로 이전 버전의 Knative kn CLI를 최신 OpenShift Serverless와 함께 사용하면 kn 이 오래된 API를 찾을 수 없기 때문에 오류가 발생할 수 있습니다. 예를 들어 kn CLI의 버전 0.23.2는 OpenShift Serverless 1.18.0에서 작동하지 않습니다.

    문제를 방지하려면 OpenShift Serverless 릴리스에 사용 가능한 최신 kn CLI 버전을 사용하십시오. OpenShift Serverless 1.18.0의 경우 Knative kn CLI 0.24.0을 사용합니다.

2장. 서버리스 정보

2.1. OpenShift Serverless 개요

OpenShift Serverless에서는 개발자가 OpenShift Container Platform에서 서버리스 애플리케이션을 생성하고 배포할 수 있는 Kubernetes 기본 구성 요소를 제공합니다. OpenShift Serverless는 엔터프라이즈급 서버리스 플랫폼을 활성화하여 하이브리드 및 멀티 클라우드 환경에 대한 이식성 및 일관성을 제공하는 오픈 소스 Knative 프로젝트를 기반으로 합니다.

참고

OpenShift Serverless는 OpenShift Container Platform과 다른 간격으로 릴리스되기 때문에 OpenShift Serverless 문서는 마이너 버전의 제품 버전에 대한 별도의 문서 세트를 유지 관리하지 않습니다. 현재 문서 세트는 특정 주제 또는 특정 기능에 대해 버전별 제한이 호출되지 않는 한 현재 지원되는 모든 OpenShift Serverless 버전에 적용됩니다.

OpenShift Serverless 라이프 사이클 및 지원되는 플랫폼에 대한 자세한 내용은 플랫폼 라이프 사이클 정책을 참조하십시오.

2.1.1. 추가 리소스

2.2. Knative Serving

Knative Serving은 클라우드 네이티브 애플리케이션을 생성, 배포, 관리하려는 개발자를 지원합니다. OpenShift Container Platform 클러스터에서 서버리스 워크로드의 동작을 정의하고 제어하는 Kubernetes CRD(사용자 정의 리소스 정의)로 오브젝트 세트를 제공합니다.

개발자는 이러한 CRD를 사용하여 복잡한 사용 사례를 다룰 때 구성 요소로 사용할 수 있는 CR(사용자 정의 리소스) 인스턴스를 생성합니다. 예를 들면 다음과 같습니다.

  • 신속한 서버리스 컨테이너 배포.
  • Pod 자동 스케일링.

2.2.1. Knative Serving 리소스

서비스
service.serving.knative.dev CRD를 사용하면 워크로드의 라이프사이클을 자동으로 관리하여 네트워크를 통해 애플리케이션을 배포하고 연결할 수 있습니다. 이 CRD는 사용자 생성 서비스 또는 사용자 정의 리소스가 변경될 때마다 경로, 구성, 새 버전을 생성합니다. Knative의 개발자 상호 작용은 대부분 서비스 수정을 통해 수행됩니다.
버전
revision.serving.knative.dev CRD는 워크로드에 수행된 각 수정의 코드 및 구성에 대한 시점 스냅샷입니다. 버전은 변경할 수 없는 오브젝트이며 필요한 기간에 유지할 수 있습니다.
Route
route.serving.knative.dev CRD는 네트워크 끝점을 하나 이상의 버전에 매핑합니다. 부분 트래픽 및 이름이 지정된 경로를 포함하여 다양한 방법으로 트래픽을 관리할 수 있습니다.
설정
configuration.serving.knative.dev CRD는 배포에 필요한 상태를 유지 관리합니다. 코드와 구성을 명확하게 분리합니다. 구성을 수정하면 새 버전이 생성됩니다.

2.3. Knative Eventing

OpenShift Container Platform에서 Knative Eventing을 사용하면 개발자가 서버리스 애플리케이션에 이벤트 중심 아키텍처를 사용할 수 있습니다. 이벤트 중심 아키텍처는 이벤트 생산자와 이벤트 소비자 간 분리된 관계에 대한 개념을 기반으로 합니다.

이벤트 프로듀서는 이벤트를 생성하고 이벤트 싱크 또는 소비자를 통해 이벤트를 수신합니다. Knative Eventing은 표준 HTTP POST 요청을 사용하여 이벤트 프로듀서와 싱크 사이에서 이벤트를 전송하고 수신합니다. 이러한 이벤트는 이벤트를 모든 프로그래밍 언어로 생성, 구문 분석, 전송, 수신할 수 있도록 CloudEvents 사양을 준수합니다.

Knative Eventing에서는 다음 유스 케이스를 지원합니다.

소비자를 생성하지 않고 이벤트 게시
이벤트를 HTTP POST에 브로커로 보내고 바인딩을 사용하여 이벤트를 생성하는 애플리케이션에서 대상 구성을 분리할 수 있습니다.
게시자를 생성하지 않고 이벤트 사용
트리거를 사용하면 이벤트 특성을 기반으로 브로커의 이벤트를 사용할 수 있습니다. 애플리케이션은 이벤트를 HTTP POST로 수신합니다.

Knative Eventing에서는 다양한 싱크 유형으로 전달할 수 있도록 다음과 같이 여러 Kubernetes 리소스에서 구현할 수 있는 일반 인터페이스를 정의합니다.

주소 지정 가능 리소스
HTTP를 통해 전달되는 이벤트를 이벤트의 status.address.url 필드에 정의된 주소로 수신 및 승인할 수 있습니다. Kubernetes Service 리소스도 주소 지정 가능 인터페이스의 조건을 충족합니다.
호출 가능한 리소스
HTTP를 통해 전달되는 이벤트를 수신하고 변환하여 HTTP 응답 페이로드에서 0 또는 1개의 새 이벤트를 반환합니다. 반환된 이벤트는 외부 이벤트 소스의 이벤트를 처리하는 것과 동일한 방식으로 추가로 처리할 수 있습니다.

2.3.1. Knative Kafka 사용

Knative Kafka는 OpenShift Serverless에서 지원되는 Apache Kafka 메시지 스트리밍 플랫폼을 사용할 수 있는 통합 옵션을 제공합니다. Kafka는 이벤트 소스, 채널, 브로커 및 이벤트 싱크 기능에 대한 옵션을 제공합니다.

참고

Knative Kafka는 현재 IBM zSystems 및 IBM Power에서 지원되지 않습니다.

Knative Kafka는 다음과 같은 추가 옵션을 제공합니다.

  • Kafka 소스
  • Kafka 채널
  • Kafka 브로커
  • Kafka 싱크

2.3.2. 추가 리소스

2.4. OpenShift Serverless Functions 정보

OpenShift Serverless Functions를 사용하면 개발자가 상태 비저장 이벤트 중심 함수를 OpenShift Container Platform에서 Knative 서비스로 생성하고 배포할 수 있습니다. kn func CLI는 Knative kn CLI의 플러그인으로 제공됩니다. kn func CLI를 사용하여 컨테이너 이미지를 클러스터에서 Knative 서비스로 생성, 빌드, 배포할 수 있습니다.

2.4.1. 포함된 런타임

OpenShift Serverless Functions는 다음 런타임에 대한 기본 기능을 생성하는 데 사용할 수 있는 템플릿을 제공합니다.

2.4.2. 다음 단계

3장. 서버리스 설치

3.1. OpenShift Serverless 설치 준비

OpenShift Serverless를 설치하기 전에 지원되는 구성 및 사전 요구 사항에 대한 다음 정보를 읽으십시오.

  • OpenShift Serverless는 제한된 네트워크 환경에서 설치할 수 있습니다.
  • OpenShift Serverless는 현재 단일 클러스터의 다중 테넌트 구성에서 사용할 수 없습니다.

3.1.1. 지원되는 구성

OpenShift Serverless에 지원되는 일련의 기능, 구성, 통합과 현재 버전 및 이전 버전은 지원되는 구성 페이지에서 확인할 수 있습니다.

3.1.2. 확장 및 성능

OpenShift Serverless는 3개의 주요 노드 및 3개의 작업자 노드 구성, 각각 64개의 CPU, 457GB 메모리, 각각 394GB의 스토리지를 사용하여 테스트되었습니다.

이 구성을 사용하여 생성할 수 있는 최대 Knative 서비스 수는 3000개입니다. 1개의 Knative 서비스에서 3개의 Kubernetes 서비스를 생성하기 때문에 OpenShift Container Platform Kubernetes 서비스 제한에 10,000 개에 해당합니다.

제로 응답 시간에서 평균 규모는 약 3.4초이며, 간단한 Quarkus 애플리케이션의 경우 최대 응답 시간인 8초, 4.5초의 99.9번째 백분위수입니다. 이러한 시간은 애플리케이션 및 애플리케이션 런타임에 따라 다를 수 있습니다.

3.1.3. 클러스터 크기 요구사항 정의

OpenShift Serverless를 설치하고 사용하려면 OpenShift Container Platform 클러스터의 크기를 올바르게 조정해야 합니다.

참고

다음 요구 사항은 OpenShift Container Platform 클러스터의 작업자 머신 풀에만 관련이 있습니다. 컨트롤 플레인 노드는 일반 스케줄링에 사용되지 않으며 요구 사항에서 생략됩니다.

OpenShift Serverless를 사용하기 위한 최소 요구 사항은 CPU 10개와 40GB 메모리가 있는 클러스터입니다. 기본적으로 각 Pod는 ~400m의 CPU를 요청하므로 최소 요구 사항은 이 값을 기반으로 합니다.

OpenShift Serverless를 실행하는 총 크기 요구 사항은 설치된 구성 요소와 배포된 애플리케이션에 따라 달라질 수 있으며 배포에 따라 다를 수 있습니다.

3.1.4. 컴퓨팅 머신 세트를 사용하여 클러스터 스케일링

OpenShift Container Platform MachineSet API를 사용하여 클러스터를 원하는 크기로 수동으로 확장할 수 있습니다. 최소 요구 사항은 일반적으로 기본 컴퓨팅 머신 세트 중 하나를 두 개의 추가 머신으로 확장해야 함을 의미합니다. 컴퓨팅 머신 세트 수동 스케일링을 참조하십시오.

3.1.4.1. 고급 사용 사례에 대한 추가 요구 사항

OpenShift Container Platform에서 로깅 또는 미터링과 같은 고급 사용 사례의 경우 더 많은 리소스를 배포해야 합니다. 이러한 사용 사례에 권장되는 요구 사항은 CPU 24개 및 메모리 96GB입니다.

클러스터에 HA(고가용성)를 활성화하면 Knative Serving 컨트롤 플레인을 복제할 때마다 0.5 ~ 1.5코어 및 200MB ~ 2GB의 메모리가 필요합니다. HA는 기본적으로 일부 Knative Serving 구성 요소에 사용됩니다. "고가용성 복제본 구성"에 대한 문서에 따라 HA를 비활성화할 수 있습니다.

3.1.5. 추가 리소스

3.2. OpenShift Serverless Operator 설치

OpenShift Serverless Operator를 설치하면 OpenShift Container Platform 클러스터에 Knative Serving, Knative Eventing, Knative Kafka를 설치하고 사용할 수 있습니다. OpenShift Serverless Operator는 클러스터의 Knative CRD(사용자 정의 리소스 정의)를 관리하고 각 구성 요소의 개별 구성 맵을 직접 수정하지 않고도 구성할 수 있습니다.

3.2.1. 웹 콘솔에서 OpenShift Serverless Operator 설치

OpenShift Container Platform 웹 콘솔을 사용하여 OperatorHub에서 OpenShift Serverless Operator를 설치할 수 있습니다. 이 Operator를 설치하면 Knative 구성 요소를 설치하고 사용할 수 있습니다.

사전 요구 사항

  • 클러스터 관리자 액세스 권한이 있는 OpenShift Container Platform 계정에 액세스할 수 있습니다.
  • 클러스터에 Marketplace 기능이 활성화되었거나 Red Hat Operator 카탈로그 소스가 수동으로 구성되어 있습니다.
  • OpenShift Container Platform 웹 콘솔에 로그인했습니다.

절차

  1. OpenShift Container Platform 웹 콘솔에서 OperatorOperatorHub 페이지로 이동합니다.
  2. 스크롤하거나 키워드로 필터링 상자에 키워드 서버리스를 입력하여 OpenShift Serverless Operator를 찾습니다.
  3. Operator에 대한 정보를 검토하고 설치를 클릭합니다.
  4. Operator 설치 페이지에서 다음을 수행합니다.

    1. 설치 모드클러스터의 모든 네임스페이스(기본값)입니다. 이 모드에서는 클러스터의 모든 네임스페이스를 감시하고 사용할 수 있도록 기본 openshift-serverless 네임스페이스에 Operator를 설치합니다.
    2. 설치된 네임스페이스openshift-serverless 입니다.
    3. stable 채널을 업데이트 채널로 선택합니다. stable 채널을 사용하면 안정적인 최신 릴리스의 OpenShift Pipelines Operator를 설치할 수 있습니다.
    4. 자동 또는 수동 승인 전략을 선택합니다.
  5. 이 OpenShift Container Platform 클러스터에서 선택한 네임스페이스에서 Operator를 사용할 수 있도록 하려면 설치를 클릭합니다.
  6. 카탈로그Operator 관리 페이지에서 OpenShift Serverless Operator 서브스크립션 설치 및 업그레이드 진행 상황을 모니터링할 수 있습니다.

    1. 수동 승인 전략을 선택한 경우 설치 계획을 검토하고 승인할 때까지 서브스크립션의 업그레이드 상태가 업그레이드 중으로 유지됩니다. 설치 계획 페이지에서 승인한 후 subscription 업그레이드 상태가 최신으로 이동합니다.
    2. 자동 승인 전략을 선택한 경우 업그레이드 상태가 개입 없이 최신 상태로 확인되어야 합니다.

검증

서브스크립션의 업그레이드 상태가 최신인 경우 카탈로그설치된 Operator를 선택하여 OpenShift Serverless Operator가 표시되고 관련 네임스페이스에서 상태가 최종적으로 InstallSucceeded로 표시되는지 확인합니다.

그러지 않은 경우 다음을 수행합니다.

  1. 카탈로그Operator 관리 페이지로 전환한 후 Operator 서브스크립션설치 계획 탭의 상태에 장애나 오류가 있는지 검사합니다.
  2. 워크로드Pod 페이지의 openshift-serverless 프로젝트에서 문제를 보고하는 Pod의 로그를 확인하여 추가로 문제를 해결합니다.
중요

OpenShift Serverless에서 Red Hat OpenShift distributed tracing을 사용하려면 Knative Serving 또는 Knative Eventing을 설치하기 전에 Red Hat OpenShift distributed tracing을 설치하고 구성해야 합니다.

3.2.2. CLI에서 OpenShift Serverless Operator 설치

CLI를 사용하여 OperatorHub에서 OpenShift Serverless Operator를 설치할 수 있습니다. 이 Operator를 설치하면 Knative 구성 요소를 설치하고 사용할 수 있습니다.

사전 요구 사항

  • 클러스터 관리자 액세스 권한이 있는 OpenShift Container Platform 계정에 액세스할 수 있습니다.
  • 클러스터에 Marketplace 기능이 활성화되었거나 Red Hat Operator 카탈로그 소스가 수동으로 구성되어 있습니다.
  • OpenShift Container Platform 클러스터에 로그인했습니다.

절차

  1. Namespace,OperatorGroup, Subscription 오브젝트가 포함된 YAML 파일을 생성하여 OpenShift Serverless Operator에 네임스페이스를 서브스크립션합니다. 예를 들어 다음 콘텐츠를 사용하여 서버리스-subscription.yaml 파일을 생성합니다.

    서브스크립션 예

    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: openshift-serverless
    ---
    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: serverless-operators
      namespace: openshift-serverless
    spec: {}
    ---
    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: serverless-operator
      namespace: openshift-serverless
    spec:
      channel: stable 1
      name: serverless-operator 2
      source: redhat-operators 3
      sourceNamespace: openshift-marketplace 4

    1
    Operator의 채널 이름입니다. stable 채널을 사용하면 OpenShift Serverless Operator의 최신 안정적인 버전을 설치할 수 있습니다.
    2
    등록할 Operator의 이름입니다. OpenShift Serverless Operator의 경우 항상 서버리스 운영자 입니다.
    3
    Operator를 제공하는 CatalogSource의 이름입니다. 기본 OperatorHub 카탈로그 소스에 redhat-operators 를 사용합니다.
    4
    CatalogSource의 네임스페이스입니다. 기본 OperatorHub 카탈로그 소스에는 openshift-marketplace를 사용합니다.
  2. Subscription 오브젝트를 생성합니다.

    $ oc apply -f serverless-subscription.yaml

검증

CSV(클러스터 서비스 버전)가 Succeeded 단계에 도달했는지 확인합니다.

명령 예

$ oc get csv

출력 예

NAME                          DISPLAY                        VERSION   REPLACES                      PHASE
serverless-operator.v1.25.0   Red Hat OpenShift Serverless   1.25.0    serverless-operator.v1.24.0   Succeeded

중요

OpenShift Serverless에서 Red Hat OpenShift distributed tracing을 사용하려면 Knative Serving 또는 Knative Eventing을 설치하기 전에 Red Hat OpenShift distributed tracing을 설치하고 구성해야 합니다.

3.2.3. 다음 단계

3.3. Knative CLI 설치

Knative(kn) CLI에는 자체 로그인 메커니즘이 없습니다. 클러스터에 로그인하려면 OpenShift CLI(oc)를 설치하고 oc login 명령을 사용해야 합니다. CLI의 설치 옵션은 운영 체제에 따라 다를 수 있습니다.

운영 체제에 대한 OpenShift CLI(oc)를 설치하고 oc 로 로그인하는 방법에 대한 자세한 내용은 OpenShift CLI 시작하기 설명서를 참조하십시오.

OpenShift Serverless는 Knative(kn) CLI를 사용하여 설치할 수 없습니다. 클러스터 관리자는 OpenShift Serverless Operator 설치 설명서에 설명된 대로 OpenShift Serverless Operator 를 설치하고 Knative 구성 요소를 설정해야 합니다.

중요

최신 OpenShift Serverless 릴리스에서 이전 버전의 Knative(kn) CLI를 사용하려는 경우 API를 찾을 수 없으며 오류가 발생합니다.

예를 들어 Knative Serving 및 Knative Eventing API의 1.3 버전을 사용하는 1.24.0 OpenShift Serverless 릴리스에서 버전 1.2를 사용하는 Knative(kn) CLI의 1.23.0 릴리스를 사용하는 경우 이전 1.2 API 버전을 계속 찾기 때문에 CLI가 작동하지 않습니다.

문제를 방지하려면 OpenShift Serverless 릴리스에 최신 Knative(kn) CLI 버전을 사용하고 있는지 확인합니다.

3.3.1. OpenShift Container Platform 웹 콘솔을 통한 Knative CLI 설치

OpenShift Container Platform 웹 콘솔을 사용하면 간소화되고 직관적인 사용자 인터페이스를 제공하여 Knative(kn) CLI를 설치할 수 있습니다. OpenShift Serverless Operator가 설치되면 OpenShift Container Platform 웹 콘솔의 명령줄 툴 페이지에 Linux (amd64, s390x, ppc64le), macOS 또는 Windows에 대한 Knative (kn) CLI를 다운로드할 수 있는 링크가 표시됩니다.

사전 요구 사항

  • OpenShift Container Platform 웹 콘솔에 로그인했습니다.
  • OpenShift Serverless Operator 및 Knative Serving이 OpenShift Container Platform 클러스터에 설치되어 있습니다.

    중요

    libc를 사용할 수 없는 경우 CLI 명령을 실행할 때 다음과 같은 오류가 표시될 수 있습니다.

    $ kn: No such file or directory
  • 이 절차에 대한 확인 단계를 사용하려면 OpenShift (oc) CLI를 설치해야 합니다.

절차

  1. 명령줄 툴 페이지에서 Knative(kn) CLI를 다운로드합니다. 웹 콘솔의 오른쪽 상단에 있는 question circle 아이콘을 클릭하고 목록에서 명령줄 툴 을 선택하여 명령줄 툴 에 액세스할 수 있습니다.
  2. 아카이브의 압축을 풉니다.

    $ tar -xf <file>
  3. kn 바이너리를 PATH의 디렉터리로 이동합니다.
  4. PATH를 확인하려면 다음을 실행합니다.

    $ echo $PATH

검증

  • 다음 명령을 실행하여 올바른 Knative CLI 리소스 및 경로가 생성되었는지 확인합니다.

    $ oc get ConsoleCLIDownload

    출력 예

    NAME                  DISPLAY NAME                                             AGE
    kn                    kn - OpenShift Serverless Command Line Interface (CLI)   2022-09-20T08:41:18Z
    oc-cli-downloads      oc - OpenShift Command Line Interface (CLI)              2022-09-20T08:00:20Z

    $ oc get route -n openshift-serverless

    출력 예

    NAME   HOST/PORT                                  PATH   SERVICES                      PORT       TERMINATION     WILDCARD
    kn     kn-openshift-serverless.apps.example.com          knative-openshift-metrics-3   http-cli   edge/Redirect   None

3.3.2. RPM 패키지 관리자를 사용하여 Linux용 Knative CLI 설치

RHEL(Red Hat Enterprise Linux)의 경우 yum 또는 dnf 와 같은 패키지 관리자를 사용하여 Knative(kn) CLI를 RPM으로 설치할 수 있습니다. 이를 통해 Knative CLI 버전을 시스템에서 자동으로 관리할 수 있습니다. 예를 들어 dnf 업그레이드와 같은 명령을 사용하면 새 버전을 사용할 수 있는 경우 kn 을 포함한 모든 패키지가 업그레이드됩니다.

사전 요구 사항

  • Red Hat 계정에 활성 OpenShift Container Platform 서브스크립션이 있어야 합니다.

절차

  1. Red Hat Subscription Manager에 등록합니다.

    # subscription-manager register
  2. 최신 서브스크립션 데이터를 가져옵니다.

    # subscription-manager refresh
  3. 등록된 시스템에 서브스크립션을 연결합니다.

    # subscription-manager attach --pool=<pool_id> 1
    1
    활성 OpenShift Container Platform 서브스크립션의 풀 ID
  4. Knative(kn) CLI에 필요한 리포지토리를 활성화합니다.

    • Linux (x86_64, amd64)

      # subscription-manager repos --enable="openshift-serverless-1-for-rhel-8-x86_64-rpms"
    • Linux on IBM zSystems and IBM® LinuxONE(s390x)

      # subscription-manager repos --enable="openshift-serverless-1-for-rhel-8-s390x-rpms"
    • Linux on IBM Power(ppc64le)

      # subscription-manager repos --enable="openshift-serverless-1-for-rhel-8-ppc64le-rpms"
  5. 패키지 관리자를 사용하여 Knative(kn) CLI를 RPM으로 설치합니다.

    yum 명령 예

    # yum install openshift-serverless-clients

3.3.3. Linux의 Knative CLI 설치

RPM 또는 다른 패키지 관리자가 설치되어 있지 않은 Linux 배포를 사용하는 경우 Knative(kn) CLI를 바이너리 파일로 설치할 수 있습니다. 이렇게 하려면 tar.gz 아카이브를 다운로드하여 압축 해제하고 PATH 의 디렉터리에 바이너리를 추가해야 합니다.

사전 요구 사항

  • RHEL 또는 Fedora를 사용하지 않는 경우 libc 가 라이브러리 경로의 디렉터리에 설치되어 있는지 확인합니다.

    중요

    libc를 사용할 수 없는 경우 CLI 명령을 실행할 때 다음과 같은 오류가 표시될 수 있습니다.

    $ kn: No such file or directory

절차

  1. 관련 Knative (kn) CLI tar.gz 아카이브를 다운로드합니다.

    Serverless 클라이언트 다운로드 미러에서 해당 버전의 해당 디렉터리로 이동하여 kn 버전을 다운로드할 수도 있습니다.

  2. 아카이브의 압축을 풉니다.

    $ tar -xf <filename>
  3. kn 바이너리를 PATH의 디렉터리로 이동합니다.
  4. PATH를 확인하려면 다음을 실행합니다.

    $ echo $PATH

3.3.4. macOS용 Knative CLI 설치

macOS를 사용하는 경우 Knative(kn) CLI를 바이너리 파일로 설치할 수 있습니다. 이렇게 하려면 tar.gz 아카이브를 다운로드하여 압축 해제하고 PATH 의 디렉터리에 바이너리를 추가해야 합니다.

절차

  1. Knative(kn) CLI tar.gz 아카이브를 다운로드합니다.

    Serverless 클라이언트 다운로드 미러에서 해당 버전의 해당 디렉터리로 이동하여 kn 버전을 다운로드할 수도 있습니다.

  2. 아카이브의 압축을 풀고 압축을 풉니다.
  3. kn 바이너리를 PATH의 디렉터리로 이동합니다.
  4. PATH를 확인하려면 터미널 창을 열고 다음을 실행합니다.

    $ echo $PATH

3.3.5. Windows용 Knative CLI 설치

Windows를 사용하는 경우 Knative(kn) CLI를 바이너리 파일로 설치할 수 있습니다. 이렇게 하려면 ZIP 아카이브를 다운로드하여 압축 해제하고 PATH 의 디렉터리에 바이너리를 추가해야 합니다.

절차

  1. Knative(kn) CLI ZIP 아카이브를 다운로드합니다.

    Serverless 클라이언트 다운로드 미러에서 해당 버전의 해당 디렉터리로 이동하여 kn 버전을 다운로드할 수도 있습니다.

  2. ZIP 프로그램으로 아카이브의 압축을 풉니다.
  3. kn 바이너리를 PATH의 디렉터리로 이동합니다.
  4. PATH를 확인하려면 명령 프롬프트를 열고 다음 명령을 실행합니다.

    C:\> path

3.4. Knative Serving 설치

Knative Serving을 설치하면 클러스터에서 Knative 서비스 및 함수를 생성할 수 있습니다. 또한 애플리케이션의 자동 스케일링 및 네트워킹 옵션과 같은 추가 기능을 사용할 수 있습니다.

OpenShift Serverless Operator를 설치한 후 기본 설정을 사용하여 Knative Serving을 설치하거나 KnativeServing 사용자 정의 리소스(CR)에서 고급 설정을 구성할 수 있습니다. KnativeServing CR의 구성 옵션에 대한 자세한 내용은 글로벌 구성을 참조하십시오.

중요

OpenShift Serverless에서 Red Hat OpenShift distributed tracing을 사용하려면 Knative Serving을 설치하기 전에 Red Hat OpenShift distributed tracing을 설치하고 구성해야 합니다.

3.4.1. 웹 콘솔을 사용하여 Knative Serving 설치

OpenShift Serverless Operator를 설치한 후 OpenShift Container Platform 웹 콘솔을 사용하여 Knative Serving을 설치합니다. 기본 설정을 사용하여 Knative Serving을 설치하거나 KnativeServing 사용자 정의 리소스(CR)에서 고급 설정을 구성할 수 있습니다.

사전 요구 사항

  • 클러스터 관리자 액세스 권한이 있는 OpenShift Container Platform 계정에 액세스할 수 있습니다.
  • OpenShift Container Platform 웹 콘솔에 로그인했습니다.
  • OpenShift Serverless Operator를 설치했습니다.

절차

  1. OpenShift Container Platform 웹 콘솔의 관리자 화면에서 Operator설치된 Operator로 이동합니다.
  2. 페이지 상단에 있는 프로젝트 드롭다운이 Project: knative-serving으로 설정되어 있는지 확인합니다.
  3. OpenShift Serverless Operator의 제공되는 API 목록에서 Knative Serving을 클릭하여 Knative Serving 탭으로 이동합니다.
  4. Knative Serving 생성을 클릭합니다.
  5. Knative Serving 생성 페이지에서 생성을 클릭하면 기본 설정을 사용하여 Knative Serving을 설치할 수 있습니다.

    제공된 양식을 사용하여 KnativeServing 오브젝트를 편집하거나 YAML을 편집하여 Knative Serving 설치에 대한 설정을 수정할 수도 있습니다.

    • 해당 양식은 KnativeServing 오브젝트 생성을 완전히 제어할 필요가 없는 단순한 구성에 사용하는 것이 좋습니다.
    • KnativeServing 오브젝트 생성을 완전히 제어해야 하는 복잡한 구성의 경우 YAML을 편집하는 것이 좋습니다. Knative Serving 생성 페이지의 오른쪽 상단에 있는 YAML 편집 링크를 클릭하여 YAML에 액세스할 수 있습니다.

      양식을 작성하거나 YAML을 수정한 후 생성을 클릭합니다.

      참고

      KnativeServing 사용자 정의 리소스 정의의 구성 옵션에 대한 자세한 내용은 고급 설치 구성 옵션 설명서를 참조하십시오.

  6. Knative Serving 설치가 완료되면 KnativeServing 오브젝트가 생성되고 Knative Serving 탭으로 자동으로 이동합니다. 리소스 목록에 knative-serving 사용자 정의 리소스가 표시됩니다.

검증

  1. Knative Serving 탭에서 knative-serving 사용자 정의 리소스를 클릭합니다.
  2. 그러면 Knative Serving 개요 페이지로 자동으로 이동합니다.

    설치된 Operator 페이지
  3. 조건 목록을 보려면 아래로 스크롤합니다.
  4. 예제 이미지에 표시된 대로 상태가 True인 조건 목록이 표시되어야 합니다.

    조건
    참고

    Knative Serving 리소스를 생성하는 데 몇 초가 걸릴 수 있습니다. 리소스 탭에서 해당 상태를 확인할 수 있습니다.

  5. 조건이 알 수 없음 또는 False 상태인 경우 몇 분 정도 기다렸다가 리소스가 생성된 것을 확인한 후 다시 확인하십시오.

3.4.2. YAML을 사용하여 Knative Serving 설치

OpenShift Serverless Operator를 설치한 후 기본 설정을 사용하여 Knative Serving을 설치하거나 KnativeServing 사용자 정의 리소스(CR)에서 고급 설정을 구성할 수 있습니다. 다음 절차에 따라 YAML 파일 및 oc CLI를 사용하여 Knative Serving을 설치할 수 있습니다.

사전 요구 사항

  • 클러스터 관리자 액세스 권한이 있는 OpenShift Container Platform 계정에 액세스할 수 있습니다.
  • OpenShift Serverless Operator를 설치했습니다.
  • OpenShift CLI(oc)를 설치합니다.

절차

  1. serving.yaml이라는 파일을 생성하고 다음 예제 YAML을 이 파일에 복사합니다.

    apiVersion: operator.knative.dev/v1alpha1
    kind: KnativeServing
    metadata:
        name: knative-serving
        namespace: knative-serving
  2. serving.yaml 파일을 적용합니다.

    $ oc apply -f serving.yaml

검증

  1. 설치가 완료되었는지 확인하려면 다음 명령을 입력합니다.

    $ oc get knativeserving.operator.knative.dev/knative-serving -n knative-serving --template='{{range .status.conditions}}{{printf "%s=%s\n" .type .status}}{{end}}'

    출력 예

    DependenciesInstalled=True
    DeploymentsAvailable=True
    InstallSucceeded=True
    Ready=True

    참고

    Knative Serving 리소스를 생성하는 데 몇 초가 걸릴 수 있습니다.

    조건이 알 수 없음 또는 False 상태인 경우 몇 분 정도 기다렸다가 리소스가 생성된 것을 확인한 후 다시 확인하십시오.

  2. Knative Serving 리소스가 생성되었는지 확인합니다.

    $ oc get pods -n knative-serving

    출력 예

    NAME                                                        READY   STATUS      RESTARTS   AGE
    activator-67ddf8c9d7-p7rm5                                  2/2     Running     0          4m
    activator-67ddf8c9d7-q84fz                                  2/2     Running     0          4m
    autoscaler-5d87bc6dbf-6nqc6                                 2/2     Running     0          3m59s
    autoscaler-5d87bc6dbf-h64rl                                 2/2     Running     0          3m59s
    autoscaler-hpa-77f85f5cc4-lrts7                             2/2     Running     0          3m57s
    autoscaler-hpa-77f85f5cc4-zx7hl                             2/2     Running     0          3m56s
    controller-5cfc7cb8db-nlccl                                 2/2     Running     0          3m50s
    controller-5cfc7cb8db-rmv7r                                 2/2     Running     0          3m18s
    domain-mapping-86d84bb6b4-r746m                             2/2     Running     0          3m58s
    domain-mapping-86d84bb6b4-v7nh8                             2/2     Running     0          3m58s
    domainmapping-webhook-769d679d45-bkcnj                      2/2     Running     0          3m58s
    domainmapping-webhook-769d679d45-fff68                      2/2     Running     0          3m58s
    storage-version-migration-serving-serving-0.26.0--1-6qlkb   0/1     Completed   0          3m56s
    webhook-5fb774f8d8-6bqrt                                    2/2     Running     0          3m57s
    webhook-5fb774f8d8-b8lt5                                    2/2     Running     0          3m57s

  3. 필요한 네트워킹 구성 요소가 자동으로 생성된 knative-serving-ingress 네임스페이스에 설치되어 있는지 확인합니다.

    $ oc get pods -n knative-serving-ingress

    출력 예

    NAME                                      READY   STATUS    RESTARTS   AGE
    net-kourier-controller-7d4b6c5d95-62mkf   1/1     Running   0          76s
    net-kourier-controller-7d4b6c5d95-qmgm2   1/1     Running   0          76s
    3scale-kourier-gateway-6688b49568-987qz   1/1     Running   0          75s
    3scale-kourier-gateway-6688b49568-b5tnp   1/1     Running   0          75s

3.4.3. 다음 단계

3.5. Knative Eventing 설치

클러스터에서 이벤트 중심 아키텍처를 사용하려면 Knative Eventing을 설치합니다. 이벤트 소스, 브로커 및 채널과 같은 Knative 구성 요소를 생성한 다음 이를 사용하여 애플리케이션 또는 외부 시스템에 이벤트를 전송할 수 있습니다.

OpenShift Serverless Operator를 설치한 후 기본 설정을 사용하여 Knative Eventing을 설치하거나 KnativeEventing 사용자 정의 리소스(CR)에서 고급 설정을 구성할 수 있습니다. KnativeEventing CR의 구성 옵션에 대한 자세한 내용은 글로벌 구성을 참조하십시오.

중요

OpenShift Serverless에서 Red Hat OpenShift 분산 추적을 사용하려면 Knative Eventing을 설치하기 전에 Red Hat OpenShift distributed tracing을 설치하고 구성해야 합니다.

3.5.1. 웹 콘솔을 사용하여 Knative Eventing 설치

OpenShift Serverless Operator를 설치한 후 OpenShift Container Platform 웹 콘솔을 사용하여 Knative Eventing을 설치합니다. 기본 설정을 사용하여 Knative Eventing을 설치하거나 KnativeEventing 사용자 정의 리소스(CR)에서 고급 설정을 구성할 수 있습니다.

사전 요구 사항

  • 클러스터 관리자 액세스 권한이 있는 OpenShift Container Platform 계정에 액세스할 수 있습니다.
  • OpenShift Container Platform 웹 콘솔에 로그인했습니다.
  • OpenShift Serverless Operator를 설치했습니다.

절차

  1. OpenShift Container Platform 웹 콘솔의 관리자 화면에서 Operator설치된 Operator로 이동합니다.
  2. 페이지 상단에 있는 프로젝트 드롭다운이 Project: knative-eventing으로 설정되어 있는지 확인합니다.
  3. OpenShift Serverless Operator의 제공되는 API 목록에서 Knative Eventing을 클릭하여 Knative Eventing 탭으로 이동합니다.
  4. Knative Eventing 생성을 클릭합니다.
  5. Knative Eventing 생성 페이지에서 제공된 기본 양식을 사용하거나 YAML을 편집하여 KnativeEventing 오브젝트를 구성하도록 선택할 수 있습니다.

    • 해당 양식은 KnativeEventing 오브젝트 생성을 완전히 제어할 필요가 없는 단순한 구성에 사용하는 것이 좋습니다.

      선택 사항입니다. 양식을 사용하여 KnativeEventing 오브젝트를 구성하는 경우 Knative Eventing 배포에 구현하려는 변경을 수행합니다.

  6. 생성을 클릭합니다.

    • KnativeEventing 오브젝트 생성을 완전히 제어해야 하는 복잡한 구성의 경우 YAML을 편집하는 것이 좋습니다. Knative Eventing 생성 페이지의 오른쪽 상단에 있는 YAML 편집 링크를 클릭하여 YAML에 액세스할 수 있습니다.

      선택 사항입니다. YAML을 편집하여 KnativeEventing 오브젝트를 구성하는 경우 YAML에 Knative Eventing 배포에 구현하려는 변경을 수행합니다.

  7. 생성을 클릭합니다.
  8. Knative Eventing을 설치하면 KnativeEventing 오브젝트가 생성되고 Knative Eventing 탭으로 자동으로 이동합니다. 리소스 목록에 knative-eventing 사용자 정의 리소스가 표시됩니다.

검증

  1. Knative Eventing 탭에서 knative-eventing 사용자 정의 리소스를 클릭합니다.
  2. 그러면 Knative Eventing 개요 페이지로 자동으로 이동합니다.

    Knative Eventing 개요 페이지
  3. 조건 목록을 보려면 아래로 스크롤합니다.
  4. 예제 이미지에 표시된 대로 상태가 True인 조건 목록이 표시되어야 합니다.

    조건
    참고

    Knative Eventing 리소스를 생성하는 데 몇 초가 걸릴 수 있습니다. 리소스 탭에서 해당 상태를 확인할 수 있습니다.

  5. 조건이 알 수 없음 또는 False 상태인 경우 몇 분 정도 기다렸다가 리소스가 생성된 것을 확인한 후 다시 확인하십시오.

3.5.2. YAML을 사용하여 Knative Eventing 설치

OpenShift Serverless Operator를 설치한 후 기본 설정을 사용하여 Knative Eventing을 설치하거나 KnativeEventing 사용자 정의 리소스(CR)에서 고급 설정을 구성할 수 있습니다. 다음 절차에 따라 YAML 파일 및 oc CLI를 사용하여 Knative Eventing을 설치할 수 있습니다.

사전 요구 사항

  • 클러스터 관리자 액세스 권한이 있는 OpenShift Container Platform 계정에 액세스할 수 있습니다.
  • OpenShift Serverless Operator를 설치했습니다.
  • OpenShift CLI(oc)를 설치합니다.

프로세스

  1. eventing.yaml이라는 파일을 생성합니다.
  2. 다음 샘플 YAML을 eventing.yaml에 복사합니다.

    apiVersion: operator.knative.dev/v1alpha1
    kind: KnativeEventing
    metadata:
        name: knative-eventing
        namespace: knative-eventing
  3. 선택 사항입니다. Knative Eventing 배포를 위해 구현하려는 YAML을 변경합니다.
  4. 다음을 입력하여 eventing.yaml 파일을 적용합니다.

    $ oc apply -f eventing.yaml

검증

  1. 다음 명령을 입력하고 출력을 관찰하여 설치가 완료되었는지 확인합니다.

    $ oc get knativeeventing.operator.knative.dev/knative-eventing \
      -n knative-eventing \
      --template='{{range .status.conditions}}{{printf "%s=%s\n" .type .status}}{{end}}'

    출력 예

    InstallSucceeded=True
    Ready=True

    참고

    Knative Eventing 리소스를 생성하는 데 몇 초가 걸릴 수 있습니다.

  2. 조건이 알 수 없음 또는 False 상태인 경우 몇 분 정도 기다렸다가 리소스가 생성된 것을 확인한 후 다시 확인하십시오.
  3. 다음을 입력하여 Knative Eventing 리소스가 생성되었는지 확인합니다.

    $ oc get pods -n knative-eventing

    출력 예

    NAME                                   READY   STATUS    RESTARTS   AGE
    broker-controller-58765d9d49-g9zp6     1/1     Running   0          7m21s
    eventing-controller-65fdd66b54-jw7bh   1/1     Running   0          7m31s
    eventing-webhook-57fd74b5bd-kvhlz      1/1     Running   0          7m31s
    imc-controller-5b75d458fc-ptvm2        1/1     Running   0          7m19s
    imc-dispatcher-64f6d5fccb-kkc4c        1/1     Running   0          7m18s

3.5.3. Knative Kafka 설치

Knative Kafka는 OpenShift Serverless에서 지원되는 Apache Kafka 메시지 스트리밍 플랫폼을 사용할 수 있는 통합 옵션을 제공합니다. Knative Kafka 기능은 KnativeKafka 사용자 정의 리소스를 설치한 경우 OpenShift Serverless 설치에서 사용할 수 있습니다.

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Eventing을 클러스터에 설치했습니다.
  • Red Hat AMQ Streams 클러스터에 액세스할 수 있습니다.
  • 확인 단계를 사용하려면 OpenShift CLI(oc)를 설치합니다.
  • OpenShift Container Platform에 대한 클러스터 관리자 권한이 있습니다.
  • OpenShift Container Platform 웹 콘솔에 로그인되어 있습니다.

절차

  1. 관리자 화면에서 Operator설치된 Operator로 이동합니다.
  2. 페이지 상단에 있는 프로젝트 드롭다운이 Project: knative-eventing으로 설정되어 있는지 확인합니다.
  3. OpenShift Serverless Operator의 Provided APIs 목록에서 Knative Kafka를 검색하여 Create Instance를 클릭합니다.
  4. Knative Kafka 생성 페이지에서 KnativeKafka 오브젝트를 구성합니다.

    중요

    클러스터에서 Kafka 채널, 소스, 브로커 또는 싱크를 사용하려면 사용할 옵션에 대해 활성화된 스위치를 true 로 전환해야 합니다. 이러한 스위치는 기본적으로 false로 설정됩니다. 또한 Kafka 채널, 브로커 또는 싱크를 사용하려면 부트스트랩 서버를 지정해야 합니다.

    KnativeKafka 사용자 정의 리소스의 예

    apiVersion: operator.serverless.openshift.io/v1alpha1
    kind: KnativeKafka
    metadata:
        name: knative-kafka
        namespace: knative-eventing
    spec:
        channel:
            enabled: true 1
            bootstrapServers: <bootstrap_servers> 2
        source:
            enabled: true 3
        broker:
            enabled: true 4
            defaultConfig:
                bootstrapServers: <bootstrap_servers> 5
                numPartitions: <num_partitions> 6
                replicationFactor: <replication_factor> 7
        sink:
            enabled: true 8

    1
    개발자가 클러스터에서 KafkaChannel 채널 유형을 사용할 수 있습니다.
    2
    AMQ Streams 클러스터에 있는 쉼표로 구분된 부트스트랩 서버 목록입니다.
    3
    개발자가 클러스터에서 KafkaSource 이벤트 소스 유형을 사용할 수 있습니다.
    4
    개발자가 클러스터에서 Knative Kafka 브로커 구현을 사용할 수 있습니다.
    5
    Red Hat AMQ Streams 클러스터에서 쉼표로 구분된 부트스트랩 서버 목록입니다.
    6
    Broker 오브젝트에서 지원하는 Kafka 항목의 파티션 수를 정의합니다. 기본값은 10입니다.
    7
    Broker 오브젝트에서 지원하는 Kafka 항목의 복제 요소를 정의합니다. 기본값은 3 입니다.
    8
    개발자가 클러스터에서 Kafka 싱크를 사용할 수 있습니다.
    참고

    replicationfactor 값은 Red Hat AMQ Streams 클러스터의 노드 수보다 작거나 같아야 합니다.

    1. 해당 양식은 KnativeKafka 오브젝트 생성을 완전히 제어할 필요가 없는 단순한 구성에 사용하는 것이 좋습니다.
    2. KnativeKafka 오브젝트 생성을 완전히 제어해야 하는 복잡한 구성의 경우 YAML을 편집하는 것이 좋습니다. Knative Kafka 생성 페이지의 오른쪽 상단에 있는 YAML 편집 링크를 클릭하여 YAML에 액세스할 수 있습니다.
  5. Kafka에 대한 선택적 구성을 완료한 후 생성을 클릭합니다. 그러면 리소스 목록에 knative-kafka가 있는 Knative Kafka 탭으로 자동으로 이동합니다.

검증

  1. Knative Kafka 탭에서 knative-kafka 리소스를 클릭합니다. 그러면 자동으로 Knative Kafka 개요 페이지로 이동합니다.
  2. 리소스에 대한 조건 목록을 확인하고 상태가 True인지 확인합니다.

    조건을 보여주는 Kafka Knative 개요 페이지

    조건 상태가 알 수 없음 또는 False인 경우 몇 분 정도 기다린 후 페이지를 새로 고칩니다.

  3. Knative Kafka 리소스가 생성되었는지 확인합니다.

    $ oc get pods -n knative-eventing

    출력 예

    NAME                                        READY   STATUS    RESTARTS   AGE
    kafka-broker-dispatcher-7769fbbcbb-xgffn    2/2     Running   0          44s
    kafka-broker-receiver-5fb56f7656-fhq8d      2/2     Running   0          44s
    kafka-channel-dispatcher-84fd6cb7f9-k2tjv   2/2     Running   0          44s
    kafka-channel-receiver-9b7f795d5-c76xr      2/2     Running   0          44s
    kafka-controller-6f95659bf6-trd6r           2/2     Running   0          44s
    kafka-source-dispatcher-6bf98bdfff-8bcsn    2/2     Running   0          44s
    kafka-webhook-eventing-68dc95d54b-825xs     2/2     Running   0          44s

3.5.4. 다음 단계

3.6. OpenShift Serverless Functions 구성

애플리케이션 코드 배포 프로세스를 개선하기 위해 OpenShift Serverless를 사용하여 이벤트 중심 기능을 OpenShift Container Platform에서 Knative 서비스로 배포할 수 있습니다. 함수를 개발하려면 설정 단계를 완료해야 합니다.

3.6.1. 사전 요구 사항

클러스터에서 OpenShift Serverless Functions을 사용하려면 다음 단계를 완료해야 합니다.

  • OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.

    참고

    함수는 Knative 서비스로 배포됩니다. 함수와 함께 이벤트 중심 아키텍처를 사용하려면 Knative Eventing도 설치해야 합니다.

  • oc CLI 가 설치되어 있어야 합니다.
  • Knative(kn) CLI 가 설치되어 있습니다. Knative CLI를 설치하면 함수를 생성하고 관리하는 데 사용할 수 있는 kn func 명령을 사용할 수 있습니다.
  • Docker Container Engine 또는 Podman 버전 3.4.7 이상이 설치되어 있습니다.
  • OpenShift Container Registry와 같이 사용 가능한 이미지 레지스트리에 액세스할 수 있습니다.
  • Quay.io 를 이미지 레지스트리로 사용하는 경우 리포지토리가 비공개가 아니거나 Pod가 다른 보안 레지스트리의 이미지를 참조하도록 허용하는 OpenShift Container Platform 문서를 따르는지 확인해야 합니다.
  • OpenShift Container Registry를 사용하는 경우 클러스터 관리자가 레지스트리를 공개해야 합니다.

3.6.2. Podman 설정

고급 컨테이너 관리 기능을 사용하려면 OpenShift Serverless Functions와 함께 Podman을 사용할 수 있습니다. 이를 위해 Podman 서비스를 시작하고 Knative(kn) CLI를 구성하여 연결합니다.

절차

  1. ${XDG_RUNTIME_DIR}/podman/podman.sock:의 UNIX 소켓에서 Docker API를 제공하는 Podman 서비스를 시작합니다.

    $ systemctl start --user podman.socket
    참고

    대부분의 시스템에서 이 소켓은 /run/user/$(id -u)/podman/podman.sock에 있습니다.

  2. 기능을 구축하는 데 사용되는 환경 변수를 설정합니다.

    $ export DOCKER_HOST="unix://${XDG_RUNTIME_DIR}/podman/podman.sock"
  3. 자세한 출력을 보려면 -v 플래그를 사용하여 함수 프로젝트 디렉터리 내에서 build 명령을 실행합니다. 로컬 UNIX 소켓에 대한 연결이 표시됩니다.

    $ kn func build -v

3.6.3. macOS에서 Podman 설정

고급 컨테이너 관리 기능을 사용하려면 OpenShift Serverless Functions와 함께 Podman을 사용할 수 있습니다. macOS에서 이 작업을 수행하려면 Podman 머신을 시작하고 Knative(kn) CLI를 구성하여 연결합니다.

절차

  1. Podman 시스템을 생성합니다.

    $ podman machine init --memory=8192 --cpus=2 --disk-size=20
  2. UNIX 소켓에서 Docker API를 제공하는 Podman 시스템을 시작합니다.

    $ podman machine start
    Starting machine "podman-machine-default"
    Waiting for VM ...
    Mounting volume... /Users/myuser:/Users/user
    
    [...truncated output...]
    
    You can still connect Docker API clients by setting DOCKER_HOST using the
    following command in your terminal session:
    
    	export DOCKER_HOST='unix:///Users/myuser/.local/share/containers/podman/machine/podman-machine-default/podman.sock'
    
    Machine "podman-machine-default" started successfully
    참고

    대부분의 macOS 시스템에서 이 소켓은 /Users/myuser/.local/share/containers/podman/machine/podman-default/podman.sock 에 있습니다.

  3. 기능을 구축하는 데 사용되는 환경 변수를 설정합니다.

    $ export DOCKER_HOST='unix:///Users/myuser/.local/share/containers/podman/machine/podman-machine-default/podman.sock'
  4. 자세한 출력을 보려면 -v 플래그를 사용하여 함수 프로젝트 디렉터리 내에서 build 명령을 실행합니다. 로컬 UNIX 소켓에 대한 연결이 표시됩니다.

    $ kn func build -v

3.6.4. 다음 단계

4장. Knative Serving

4.1. Knative Serving 시작하기

4.1.1. 서버리스 애플리케이션

서버리스 애플리케이션은 경로 및 구성으로 정의되고 YAML 파일에 포함된 Kubernetes 서비스로 생성 및 배포됩니다. OpenShift Serverless를 사용하여 서버리스 애플리케이션을 배포하려면 Knative Service 오브젝트를 생성해야 합니다.

Knative Service 오브젝트 YAML 파일의 예

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: hello 1
  namespace: default 2
spec:
  template:
    spec:
      containers:
        - image: docker.io/openshift/hello-openshift 3
          env:
            - name: RESPONSE 4
              value: "Hello Serverless!"

1
애플리케이션 이름입니다.
2
애플리케이션에서 사용하는 네임스페이스입니다.
3
애플리케이션 이미지입니다.
4
샘플 애플리케이션에서 출력한 환경 변수입니다.

다음 방법 중 하나를 사용하여 서버리스 애플리케이션을 생성합니다.

  • OpenShift Container Platform 웹 콘솔에서 Knative 서비스를 생성합니다.

    자세한 내용은 개발자 화면을 사용하여 애플리케이션 생성을 참조하십시오.

  • Knative(kn) CLI를 사용하여 Knative 서비스를 생성합니다.
  • oc CLI를 사용하여 Knative Service 오브젝트를 YAML 파일로 생성하고 적용합니다.

4.1.1.1. Knative CLI를 사용하여 서버리스 애플리케이션 생성

Knative(kn) CLI를 사용하여 서버리스 애플리케이션을 생성하면 YAML 파일을 직접 수정하는 것보다 더 간소화되고 직관적인 사용자 인터페이스를 제공합니다. kn service create 명령을 사용하여 기본 서버리스 애플리케이션을 생성할 수 있습니다.

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.
  • Knative(kn) CLI가 설치되어 있습니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.

절차

  • Knative 서비스를 생성합니다.

    $ kn service create <service-name> --image <image> --tag <tag-value>

    다음과 같습니다.

    • --image 는 애플리케이션의 이미지 URI입니다.
    • --tag 는 서비스로 생성된 초기 버전에 태그를 추가하는 데 사용할 수 있는 선택적 플래그입니다.

      명령 예

      $ kn service create event-display \
          --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest

      출력 예

      Creating service 'event-display' in namespace 'default':
      
        0.271s The Route is still working to reflect the latest desired specification.
        0.580s Configuration "event-display" is waiting for a Revision to become ready.
        3.857s ...
        3.861s Ingress has not yet been reconciled.
        4.270s Ready to serve.
      
      Service 'event-display' created with latest revision 'event-display-bxshg-1' and URL:
      http://event-display-default.apps-crc.testing

4.1.1.2. YAML을 사용하여 서버리스 애플리케이션 생성

YAML 파일을 사용하여 Knative 리소스를 생성하면 선언적 API를 사용하므로 애플리케이션을 선언적으로, 재현 가능한 방식으로 설명할 수 있습니다. YAML을 사용하여 서버리스 애플리케이션을 생성하려면 Knative Service 오브젝트를 정의하는 YAML 파일을 생성한 다음 oc apply 를 사용하여 적용해야 합니다.

서비스가 생성되고 애플리케이션이 배포되면 Knative에서 이 버전의 애플리케이션에 대해 변경할 수 없는 버전을 생성합니다. Knative는 또한 네트워크 프로그래밍을 수행하여 애플리케이션의 경로, 수신, 서비스 및 로드 밸런서를 생성하고 트래픽에 따라 Pod를 자동으로 확장합니다.

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
  • OpenShift CLI(oc)를 설치합니다.

절차

  1. 다음 샘플 코드를 포함하는 YAML 파일을 생성합니다.

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: event-delivery
      namespace: default
    spec:
      template:
        spec:
          containers:
            - image: quay.io/openshift-knative/knative-eventing-sources-event-display:latest
              env:
                - name: RESPONSE
                  value: "Hello Serverless!"
  2. YAML 파일이 포함된 디렉터리로 이동한 후 YAML 파일을 적용하여 애플리케이션을 배포합니다.

    $ oc apply -f <filename>

OpenShift Container Platform 웹 콘솔에서 개발자 화면으로 전환하거나 Knative(kn) CLI 또는 YAML 파일을 사용하려면 OpenShift Container Platform 웹 콘솔의 Administator 관점을 사용하여 Knative 구성 요소를 생성할 수 있습니다.

4.1.1.3. 관리자 화면을 사용하여 서버리스 애플리케이션 생성

서버리스 애플리케이션은 경로 및 구성으로 정의되고 YAML 파일에 포함된 Kubernetes 서비스로 생성 및 배포됩니다. OpenShift Serverless를 사용하여 서버리스 애플리케이션을 배포하려면 Knative Service 오브젝트를 생성해야 합니다.

Knative Service 오브젝트 YAML 파일의 예

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: hello 1
  namespace: default 2
spec:
  template:
    spec:
      containers:
        - image: docker.io/openshift/hello-openshift 3
          env:
            - name: RESPONSE 4
              value: "Hello Serverless!"

1
애플리케이션 이름입니다.
2
애플리케이션에서 사용하는 네임스페이스입니다.
3
애플리케이션 이미지입니다.
4
샘플 애플리케이션에서 출력한 환경 변수입니다.

서비스가 생성되고 애플리케이션이 배포되면 Knative에서 이 버전의 애플리케이션에 대해 변경할 수 없는 버전을 생성합니다. Knative는 또한 네트워크 프로그래밍을 수행하여 애플리케이션의 경로, 수신, 서비스 및 로드 밸런서를 생성하고 트래픽에 따라 Pod를 자동으로 확장합니다.

사전 요구 사항

관리자 화면을 사용하여 서버리스 애플리케이션을 생성하려면 다음 단계를 완료해야 합니다.

  • OpenShift Serverless Operator 및 Knative Serving이 설치되어 있습니다.
  • 웹 콘솔에 로그인한 후 관리자 화면에 있습니다.

절차

  1. ServerlessServing 페이지로 이동합니다.
  2. 생성 목록에서 서비스를 선택합니다.
  3. YAML 또는 JSON 정의를 수동으로 입력하거나 파일을 편집기로 끌어서 놓습니다.
  4. 생성을 클릭합니다.

4.1.1.4. 오프라인 모드를 사용하여 서비스 생성

오프라인 모드에서 kn service 명령을 실행하여 클러스터에서 변경 사항이 발생하지 않고, 대신 로컬 머신에 서비스 설명자 파일이 생성됩니다. 설명자 파일이 생성되면 클러스터에 변경 사항을 전파하기 전에 파일을 수정할 수 있습니다.

중요

Knative CLI의 오프라인 모드는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.

Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.
  • Knative(kn) CLI가 설치되어 있습니다.

절차

  1. 오프라인 모드에서 로컬 Knative 서비스 설명자 파일을 생성합니다.

    $ kn service create event-display \
        --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest \
        --target ./ \
        --namespace test

    출력 예

    Service 'event-display' created in namespace 'test'.

    • --target ./ 플래그는 오프라인 모드를 활성화하고 새 디렉터리 트리를 저장하는 디렉토리로./를 지정합니다.

      기존 디렉터리를 지정하지 않고 --target my-service.yaml과 같은 파일 이름을 사용하면 디렉터리 트리가 생성되지 않습니다. 대신 서비스 설명자 파일 my-service.yaml만 현재 디렉터리에 생성됩니다.

      파일 이름에는. .yaml, .yml, 또는 .json 확장을 사용할 수 있습니다. .json을 선택하면 JSON 형식으로 서비스 설명자 파일을 생성합니다.

    • --namespace test 옵션은 새 서비스를 test 네임스페이스에 배치합니다.

      --namespace를 사용하지 않고 OpenShift Container Platform 클러스터에 로그인한 경우 현재 네임스페이스에 설명자 파일이 생성됩니다. 그렇지 않으면 설명자 파일이 default 네임스페이스에 생성됩니다.

  2. 생성된 디렉터리 구조를 확인합니다.

    $ tree ./

    출력 예

    ./
    └── test
        └── ksvc
            └── event-display.yaml
    
    2 directories, 1 file

    • --target에서 지정된 현재 ./ 디렉터리에는 지정된 네임스페이스를 바탕으로 이름이 지정된 test/ 디렉터리가 포함되어 있습니다.
    • test/ 디렉터리에는 리소스 유형의 이름에 따라 이름이 지정된 ksvc 디렉터리가 포함되어 있습니다.
    • ksvc 디렉터리에는 지정된 서비스 이름에 따라 이름이 지정된 기술자 파일 event-display.yaml이 포함되어 있습니다.
  3. 생성된 서비스 기술자 파일을 확인합니다.

    $ cat test/ksvc/event-display.yaml

    출력 예

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      creationTimestamp: null
      name: event-display
      namespace: test
    spec:
      template:
        metadata:
          annotations:
            client.knative.dev/user-image: quay.io/openshift-knative/knative-eventing-sources-event-display:latest
          creationTimestamp: null
        spec:
          containers:
          - image: quay.io/openshift-knative/knative-eventing-sources-event-display:latest
            name: ""
            resources: {}
    status: {}

  4. 새 서비스에 대한 정보를 나열합니다.

    $ kn service describe event-display --target ./ --namespace test

    출력 예

    Name:       event-display
    Namespace:  test
    Age:
    URL:
    
    Revisions:
    
    Conditions:
      OK TYPE    AGE REASON

    • target ./ 옵션은 네임스페이스 하위 디렉터리를 포함하는 디렉터리 구조의 루트 디렉터리를 지정합니다.

      또는 --target 옵션을 사용하여 YAML 또는 JSON 파일 이름을 직접 지정할 수 있습니다. 허용된 파일 확장자는 .yaml, .yml, .json입니다.

    • --namespace 옵션은 필요한 서비스 기술자 파일을 포함하는 하위 디렉터리를 kn와 통신하는 네임스페이스를 지정합니다.

      --namespace를 사용하지 않고 OpenShift Container Platform 클러스터에 로그인한 경우 kn은 현재 네임스페이스를 바탕으로 이름이 지정된 하위 디렉터리에서 서비스를 검색합니다. 그렇지 않으면 kndefault/ 하위 디렉터리에서 검색합니다.

  5. 서비스 설명자 파일을 사용하여 클러스터에 서비스를 생성합니다.

    $ kn service create -f test/ksvc/event-display.yaml

    출력 예

    Creating service 'event-display' in namespace 'test':
    
      0.058s The Route is still working to reflect the latest desired specification.
      0.098s ...
      0.168s Configuration "event-display" is waiting for a Revision to become ready.
     23.377s ...
     23.419s Ingress has not yet been reconciled.
     23.534s Waiting for load balancer to be ready
     23.723s Ready to serve.
    
    Service 'event-display' created to latest revision 'event-display-00001' is available at URL:
    http://event-display-test.apps.example.com

4.1.1.5. 추가 리소스

4.1.2. 서버리스 애플리케이션 배포 확인

서버리스 애플리케이션이 성공적으로 배포되었는지 확인하려면 Knative에서 생성한 애플리케이션 URL을 가져와서 해당 URL로 요청을 보낸 후 출력을 관찰해야 합니다. OpenShift Serverless에서는 HTTP 및 HTTPS URL을 모두 지원하지만 oc get ksvc 출력에서는 http:// 형식을 사용하여 항상 URL을 출력합니다.

4.1.2.1. 서버리스 애플리케이션 배포 확인

서버리스 애플리케이션이 성공적으로 배포되었는지 확인하려면 Knative에서 생성한 애플리케이션 URL을 가져와서 해당 URL로 요청을 보낸 후 출력을 관찰해야 합니다. OpenShift Serverless에서는 HTTP 및 HTTPS URL을 모두 지원하지만 oc get ksvc 출력에서는 http:// 형식을 사용하여 항상 URL을 출력합니다.

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.
  • oc CLI를 설치했습니다.
  • Knative 서비스가 생성되어 있습니다.

사전 요구 사항

  • OpenShift CLI(oc)를 설치합니다.

절차

  1. 애플리케이션 URL을 찾습니다.

    $ oc get ksvc <service_name>

    출력 예

    NAME            URL                                        LATESTCREATED         LATESTREADY           READY   REASON
    event-delivery   http://event-delivery-default.example.com   event-delivery-4wsd2   event-delivery-4wsd2   True

  2. 클러스터에 요청한 후 출력을 확인합니다.

    HTTP 요청의 예

    $ curl http://event-delivery-default.example.com

    HTTPS 요청의 예

    $ curl https://event-delivery-default.example.com

    출력 예

    Hello Serverless!

  3. 선택 사항입니다. 인증서 체인에서 자체 서명된 인증서와 관련된 오류가 발생하면 --insecure 플래그를 curl 명령에 추가하여 오류를 무시할 수 있습니다.

    $ curl https://event-delivery-default.example.com --insecure

    출력 예

    Hello Serverless!

    중요

    프로덕션 배포에는 자체 서명된 인증서를 사용해서는 안 됩니다. 이 방법은 테스트 목적으로만 사용됩니다.

  4. 선택 사항입니다. OpenShift Container Platform 클러스터가 CA(인증 기관)에서 서명한 인증서로 구성되어 있지만 아직 시스템에 전역적으로 구성되지 않은 경우 curl 명령으로 이 인증서를 지정할 수 있습니다. 인증서 경로는 --cacert 플래그를 사용하여 curl 명령에 전달할 수 있습니다.

    $ curl https://event-delivery-default.example.com --cacert <file>

    출력 예

    Hello Serverless!

4.2. 자동 확장

4.2.1. 자동 확장

Knative Serving은 들어오는 수요와 일치시킬 수 있도록 애플리케이션이 자동 스케일링 또는 자동 스케일링 을 제공합니다. 예를 들어 애플리케이션에 트래픽이 없고 scale-to-zero가 활성화된 경우 Knative Serving은 애플리케이션을 복제본 0으로 축소합니다. scale-to-zero이 비활성화된 경우 애플리케이션은 클러스터의 애플리케이션에 대해 구성된 최소 복제본 수로 축소됩니다. 애플리케이션 트래픽이 증가하는 경우 요구에 맞게 복제본을 확장할 수도 있습니다.

Knative 서비스의 자동 스케일링 설정은 클러스터 관리자가 구성하거나 개별 서비스에 대해 구성된 설정별로 구성하는 전역 설정일 수 있습니다.

서비스의 YAML 파일을 수정하거나 Knative(kn) CLI를 사용하여 OpenShift Container Platform 웹 콘솔을 사용하여 서비스 단위 설정을 수정할 수 있습니다.

참고

서비스에 설정된 모든 제한 또는 대상은 애플리케이션의 단일 인스턴스에 대해 측정됩니다. 예를 들어 target 주석을 50 으로 설정하면 자동 스케일러가 애플리케이션을 스케일링하여 각 버전이 한 번에 50개의 요청을 처리하도록 구성됩니다.

4.2.2. scale bounds

scale bounds는 언제든지 애플리케이션을 제공할 수 있는 최소 및 최대 복제본 수를 결정합니다. 애플리케이션에 대한 스케일 경계를 설정하여 콜드 시작 방지 또는 컴퓨팅 비용을 제어할 수 있습니다.

4.2.2.1. 최소 스케일링 범위

애플리케이션을 제공할 수 있는 최소 복제본 수는 min-scale 주석에 따라 결정됩니다. scale to zero가 활성화되어 있지 않으면 min-scale 값이 1 로 설정됩니다.

다음 조건이 충족되는 경우 min-scale 값은 기본적으로 0 개의 복제본으로 설정됩니다.

  • min-scale 주석이 설정되지 않음
  • 스케일링을 0으로 활성화
  • KPA 클래스가 사용됩니다.

min-scale 주석이 있는 서비스 사양의 예

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: example-service
  namespace: default
spec:
  template:
    metadata:
      annotations:
        autoscaling.knative.dev/min-scale: "0"
...

4.2.2.1.1. Knative CLI를 사용하여 min-scale 주석 설정

Knative(kn) CLI를 사용하여 min-scale 주석을 설정하면 YAML 파일을 직접 수정하는 동안 보다 간소화되고 직관적인 사용자 인터페이스를 제공합니다. kn service 명령을 --scale-min 플래그와 함께 사용하여 서비스의 min-scale 값을 생성하거나 수정할 수 있습니다.

사전 요구 사항

  • Knative Serving이 클러스터에 설치되어 있습니다.
  • Knative(kn) CLI가 설치되어 있습니다.

절차

  • --scale-min 플래그를 사용하여 서비스의 최소 복제본 수를 설정합니다.

    $ kn service create <service_name> --image <image_uri> --scale-min <integer>

    명령 예

    $ kn service create example-service --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest --scale-min 2

4.2.2.2. 최대 스케일링 범위

애플리케이션을 제공할 수 있는 최대 복제본 수는 max-scale 주석에 따라 결정됩니다. max-scale 주석이 설정되지 않은 경우 생성된 복제본 수에 대한 상한이 없습니다.

max-scale 주석이 있는 서비스 사양의 예

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: example-service
  namespace: default
spec:
  template:
    metadata:
      annotations:
        autoscaling.knative.dev/max-scale: "10"
...

4.2.2.2.1. Knative CLI를 사용하여 max-scale 주석 설정

Knative(kn) CLI를 사용하여 max-scale 주석을 설정하면 YAML 파일을 직접 수정하여 보다 간소화되고 직관적인 사용자 인터페이스를 제공합니다. kn service 명령을 --scale-max 플래그와 함께 사용하여 서비스의 max-scale 값을 생성하거나 수정할 수 있습니다.

사전 요구 사항

  • Knative Serving이 클러스터에 설치되어 있습니다.
  • Knative(kn) CLI가 설치되어 있습니다.

절차

  • --scale-max 플래그를 사용하여 서비스의 최대 복제본 수를 설정합니다.

    $ kn service create <service_name> --image <image_uri> --scale-max <integer>

    명령 예

    $ kn service create example-service --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest --scale-max 10

4.2.3. 동시성

동시성은 언제든지 애플리케이션의 각 복제본에서 처리할 수 있는 동시 요청 수를 결정합니다. 동시성은 소프트 제한 또는 하드 제한 으로 구성할 수 있습니다.

  • 소프트 제한은 엄격하게 적용되는 바인딩된 것이 아니라 대상 요청 제한입니다. 예를 들어, 트래픽 버스트가 급증하는 경우 소프트 제한 대상을 초과할 수 있습니다.
  • 하드 제한은 엄격한 강제 적용된 상한 요청 제한입니다. 동시성이 하드 제한에 도달하면 요청을 버퍼링하고 요청을 실행하기에 충분한 여유 용량이 있을 때까지 기다려야 합니다.If concurrency reaches the hard limit, surplus requests are buffered and must wait until there is enough free capacity to execute the requests.

    중요

    애플리케이션에 대한 명확한 사용 사례가 있는 경우에만 하드 제한 구성을 사용하는 것이 좋습니다. 지정된 하드 제한이 낮으면 애플리케이션의 처리량 및 대기 시간에 부정적인 영향을 미칠 수 있으며 콜드 시작이 발생할 수 있습니다.

소프트 대상과 하드 제한을 추가하면 자동 스케일러가 동시 요청의 소프트 대상 수를 대상으로하지만 최대 요청 수에 하드 제한 값을 강제 적용합니다.

하드 제한 값이 소프트 제한 값보다 작으면 실제로 처리할 수 있는 수보다 더 많은 요청을 대상으로 할 필요가 없기 때문에 소프트 제한 값이 축소됩니다.

4.2.3.1. 소프트 동시성 대상 구성

소프트 제한은 엄격하게 적용되는 바인딩된 것이 아니라 대상 요청 제한입니다. 예를 들어, 트래픽 버스트가 급증하는 경우 소프트 제한 대상을 초과할 수 있습니다. 사양에 autoscaling.knative.dev/target 주석을 설정하거나 올바른 플래그와 함께 kn service 명령을 사용하여 Knative 서비스의 소프트 동시성 대상을 지정할 수 있습니다.

절차

  • 선택 사항: Service 사용자 정의 리소스의 사양에서 Knative 서비스에 대한 autoscaling.knative.dev/target 주석을 설정합니다.

    서비스 사양의 예

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: example-service
      namespace: default
    spec:
      template:
        metadata:
          annotations:
            autoscaling.knative.dev/target: "200"

  • 선택 사항: kn service 명령을 사용하여 --concurrency-target 플래그를 지정합니다.

    $ kn service create <service_name> --image <image_uri> --concurrency-target <integer>

    동시성 대상이 50개의 요청인 서비스를 생성하는 명령의 예

    $ kn service create example-service --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest --concurrency-target 50

4.2.3.2. 하드 동시성 제한 구성

하드 동시성 제한은 엄격히 적용되는 상한 상한 요청 제한입니다. 동시성이 하드 제한에 도달하면 요청을 버퍼링하고 요청을 실행하기에 충분한 여유 용량이 있을 때까지 기다려야 합니다.If concurrency reaches the hard limit, surplus requests are buffered and must wait until there is enough free capacity to execute the requests. containerConcurrency 사양을 수정하거나 올바른 플래그와 함께 kn service 명령을 사용하여 Knative 서비스의 하드 동시성 제한을 지정할 수 있습니다.

절차

  • 선택 사항: Service 사용자 정의 리소스의 사양에서 Knative 서비스의 containerConcurrency 사양을 설정합니다.

    서비스 사양의 예

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: example-service
      namespace: default
    spec:
      template:
        spec:
          containerConcurrency: 50

    기본값은 0 이며, 이는 한 번에 하나의 서비스 복제본으로 흐름을 허용하는 동시 요청 수에 제한이 없음을 의미합니다.

    값이 0 보다 크면 한 번에 하나의 서비스 복제본으로 흐름이 허용되는 정확한 요청 수를 지정합니다. 이 예제에서는 50개의 요청의 하드 동시성 제한을 활성화합니다.

  • 선택 사항: kn service 명령을 사용하여 --concurrency-limit 플래그를 지정합니다.

    $ kn service create <service_name> --image <image_uri> --concurrency-limit <integer>

    동시성 제한이 50개인 서비스를 생성하는 명령의 예

    $ kn service create example-service --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest --concurrency-limit 50

4.2.3.3. 동시성 대상 사용률

이 값은 자동 스케일러가 실제로 대상으로 하는 동시성 제한의 백분율을 지정합니다. 복제가 실행되는 hotness 지정하여 정의된 하드 제한에 도달하기 전에 자동 스케일러를 확장할 수도 있습니다.

예를 들어 containerConcurrency 값이 10으로 설정되고 target-utilization-percentage 값이 70%로 설정된 경우 기존 복제본의 평균 수가 7에 도달하면 자동 스케일러에서 새 복제본을 생성합니다. 7에서 10으로 번호가 매겨진 요청은 여전히 기존 복제본으로 전송되지만 containerConcurrency 값에 도달한 후 추가 복제본이 필요합니다.

target-utilization-percentage 주석을 사용하여 구성된 서비스 예

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: example-service
  namespace: default
spec:
  template:
    metadata:
      annotations:
        autoscaling.knative.dev/target-utilization-percentage: "70"
...

4.2.4. Scale-to-zero

Knative Serving은 들어오는 수요와 일치시킬 수 있도록 애플리케이션이 자동 스케일링 또는 자동 스케일링 을 제공합니다.

4.2.4.1. scale-to-zero 활성화

enable-scale-to-zero 사양을 사용하여 클러스터의 애플리케이션에 대해 전역적으로 스케일링을 활성화하거나 비활성화할 수 있습니다.

사전 요구 사항

  • 클러스터에 OpenShift Serverless Operator 및 Knative Serving을 설치했습니다.
  • 클러스터 관리자 권한이 있어야 합니다.
  • 기본 Knative Pod Autoscaler를 사용하고 있습니다. Kubernetes Horizontal Pod Autoscaler를 사용하는 경우 제로 스케일링 기능을 사용할 수 없습니다.

절차

  • KnativeServing 사용자 정의 리소스(CR)에서 enable-scale-to-zero 사양을 수정합니다.

    KnativeServing CR의 예

    apiVersion: operator.knative.dev/v1alpha1
    kind: KnativeServing
    metadata:
      name: knative-serving
    spec:
      config:
        autoscaler:
          enable-scale-to-zero: "false" 1

    1
    enable-scale-to-zero 사양은 "true" 또는 "false" 일 수 있습니다. true로 설정하면 scale-to-zero가 활성화됩니다. false로 설정하면 애플리케이션이 구성된 최소 스케일 바인딩 으로 축소됩니다. 기본값은 "true" 입니다.

4.2.4.2. scale-to-zero 유예 기간 구성

Knative Serving은 애플리케이션에 대해 Pod 0개로 자동 스케일링을 제공합니다. scale-to-zero-grace-period 사양을 사용하여 Knative에서 scale-to-zero machinery가 애플리케이션 마지막 복제본을 제거하기 전에 대기하는 상한 시간 제한을 정의할 수 있습니다.

사전 요구 사항

  • 클러스터에 OpenShift Serverless Operator 및 Knative Serving을 설치했습니다.
  • 클러스터 관리자 권한이 있어야 합니다.
  • 기본 Knative Pod Autoscaler를 사용하고 있습니다. Kubernetes Horizontal Pod Autoscaler를 사용하는 경우 스케일에서 0까지 기능을 사용할 수 없습니다.

절차

  • KnativeServing CR(사용자 정의 리소스)에서 scale-to-grace-period 사양을 수정합니다.

    KnativeServing CR의 예

    apiVersion: operator.knative.dev/v1alpha1
    kind: KnativeServing
    metadata:
      name: knative-serving
    spec:
      config:
        autoscaler:
          scale-to-zero-grace-period: "30s" 1

    1
    유예 기간(초)입니다. 기본값은 30초입니다.

4.3. 서버리스 애플리케이션 구성

4.3.1. 시스템 배포 구성 덮어쓰기

KnativeServingKnativeEventing 사용자 정의 리소스(CR)의 배포 사양을 수정하여 일부 특정 배포의 기본 구성을 덮어쓸 수 있습니다.

4.3.1.1. Knative Serving 시스템 배포 구성 덮어쓰기

KnativeServing CR(사용자 정의 리소스)의 deployments 사양을 수정하여 일부 특정 배포 의 기본 구성을 덮어쓸 수 있습니다. 현재는 리소스,복제본,레이블,주석nodeSelector 필드에 대해 기본 구성 설정을 재정의하는 것은 물론 프로브를 위한 준비 상태 및 활성 상태 필드에 대해 지원됩니다.

다음 예에서 KnativeServing CR은 다음과 같이 Webhook 배포를 덮어씁니다.

  • net-kourier-controller준비 상태 프로브 타임아웃이 10초로 설정됩니다.
  • 배포에 CPU 및 메모리 리소스 제한이 지정되었습니다.
  • 배포에는 3개의 복제본이 있습니다.
  • example-label: 레이블 레이블이 추가되었습니다.
  • example-annotation: 주석 주석이 추가되었습니다.
  • nodeSelector 필드는 disktype: hdd 레이블이 있는 노드를 선택하도록 설정됩니다.
참고

KnativeServing CR 라벨 및 주석 설정은 배포 자체와 결과 Pod 모두에 대한 배포의 라벨 및 주석을 재정의합니다.

KnativeServing CR 예

apiVersion: operator.knative.dev/v1alpha1
kind: KnativeServing
metadata:
  name: ks
  namespace: knative-serving
spec:
  high-availability:
    replicas: 2
  deployments:
  - name: net-kourier-controller
    readinessProbes: 1
      - container: controller
        timeoutSeconds: 10
  - name: webhook
    resources:
    - container: webhook
      requests:
        cpu: 300m
        memory: 60Mi
      limits:
        cpu: 1000m
        memory: 1000Mi
    replicas: 3
    labels:
      example-label: label
    annotations:
      example-annotation: annotation
    nodeSelector:
      disktype: hdd

1
준비 상태 및 활성 상태 프로브 덮어쓰기를 사용하여 프로브에 지정된 대로 Kubernetes API에 지정된 대로 배포 컨테이너에 있는 프로브의 모든 필드를 재정의할 수 있습니다. 그러나 프로브 처리기와 관련된 필드인 exec,grpc,httpGet, tcpSocket.

4.3.2. emptyDir 볼륨

emptyDir 볼륨은 Pod가 생성될 때 생성되는 빈 볼륨이며 임시 작업 디스크 공간을 제공하는 데 사용됩니다. emptyDir 볼륨은 생성된 Pod가 삭제될 때 삭제됩니다.

4.3.2.1. EmptyDir 확장 구성

kubernetes.podspec-volumes-emptydir 확장은 emptyDir 볼륨을 Knative Serving과 함께 사용할 수 있는지 여부를 제어합니다. emptyDir 볼륨을 사용하여 활성화하려면 다음 YAML을 포함하도록 KnativeServing CR(사용자 정의 리소스)을 수정해야 합니다.

KnativeServing CR의 예

apiVersion: operator.knative.dev/v1alpha1
kind: KnativeServing
metadata:
  name: knative-serving
spec:
  config:
    features:
      kubernetes.podspec-volumes-emptydir: enabled
...

4.3.3. Serving용 영구 볼륨 클레임

일부 서버리스 애플리케이션에는 영구 데이터 스토리지가 필요합니다. 이를 위해 Knative 서비스에 대한 PVC(영구 볼륨 클레임)를 구성할 수 있습니다.

4.3.3.1. PVC 지원 활성화

절차

  1. Knative Serving에서 PVC를 사용하고 여기에 쓰도록 활성화하려면 다음 YAML을 포함하도록 KnativeServing 사용자 정의 리소스(CR)를 수정합니다.

    쓰기 액세스로 PVC 활성화

    ...
    spec:
      config:
        features:
          "kubernetes.podspec-persistent-volume-claim": enabled
          "kubernetes.podspec-persistent-volume-write": enabled
    ...

    • kubernetes.podspec-persistent-volume-claim 확장은 Knative Serving에서 영구 볼륨(PV)을 사용할 수 있는지 여부를 제어합니다.
    • kubernetes.podspec-persistent-volume-write 확장은 쓰기 액세스 권한으로 Knative Serving에서 PV를 사용할 수 있는지 여부를 제어합니다.
  2. PV를 클레임하려면 PV 구성을 포함하도록 서비스를 수정합니다. 예를 들어 다음 구성이 포함된 영구 볼륨 클레임이 있을 수 있습니다.

    참고

    요청하는 액세스 모드를 지원하는 스토리지 클래스를 사용합니다. 예를 들어 ReadWriteMany 액세스 모드에 ocs-storagecluster-cephfs 클래스를 사용할 수 있습니다.

    PersistentVolumeClaim 구성

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: example-pv-claim
      namespace: my-ns
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: ocs-storagecluster-cephfs
      resources:
        requests:
          storage: 1Gi

    이 경우 쓰기 액세스 권한이 있는 PV를 클레임하려면 다음과 같이 서비스를 수정합니다.

    Knative 서비스 PVC 구성

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      namespace: my-ns
    ...
    spec:
     template:
       spec:
         containers:
             ...
             volumeMounts: 1
               - mountPath: /data
                 name: mydata
                 readOnly: false
         volumes:
           - name: mydata
             persistentVolumeClaim: 2
               claimName: example-pv-claim
               readOnly: false 3

    1
    볼륨 마운트 사양.
    2
    영구 볼륨 클레임 사양.
    3
    읽기 전용 액세스를 활성화하는 플래그입니다.
    참고

    Knative 서비스에서 영구 스토리지를 성공적으로 사용하려면 Knative 컨테이너 사용자의 사용자 권한과 같은 추가 구성이 필요합니다.

4.3.3.2. 추가 리소스

4.3.4. Init 컨테이너

Init 컨테이너 는 Pod의 애플리케이션 컨테이너보다 먼저 실행되는 특수 컨테이너입니다. 일반적으로 애플리케이션의 초기화 논리를 구현하는 데 사용되며, 이 논리는 실행 중인 설정 스크립트 실행 또는 필요한 구성 다운로드를 포함할 수 있습니다. KnativeServing CR(사용자 정의 리소스)을 수정하여 Knative 서비스에 대한 init 컨테이너 사용을 활성화할 수 있습니다.

참고

Init 컨테이너는 애플리케이션 시작 시간이 길어질 수 있으며, 자주 확장 및 축소할 것으로 예상되는 서버리스 애플리케이션에 주의하여 사용해야 합니다.

4.3.4.1. init 컨테이너 활성화

사전 요구 사항

  • 클러스터에 OpenShift Serverless Operator 및 Knative Serving을 설치했습니다.
  • 클러스터 관리자 권한이 있어야 합니다.

절차

  • KnativeServing CR에 kubernetes.podspec-init-containers 플래그를 추가하여 init 컨테이너 사용을 활성화합니다.

    KnativeServing CR의 예

    apiVersion: operator.knative.dev/v1alpha1
    kind: KnativeServing
    metadata:
      name: knative-serving
    spec:
      config:
        features:
          kubernetes.podspec-init-containers: enabled
    ...

4.3.5. 다이제스트로 이미지 태그 확인

Knative Serving 컨트롤러가 컨테이너 레지스트리에 액세스할 수 있는 경우 Knative Serving은 서비스 버전을 생성할 때 이미지 태그를 다이제스트로 확인합니다. 이 문제를 태그-다이제스트 해결 이라고 하며 배포에 일관성을 제공하는 데 도움이 됩니다.

4.3.5.1. Tag-to-digest resolution

OpenShift Container Platform의 컨테이너 레지스트리에 대한 컨트롤러 액세스 권한을 부여하려면 보안을 생성한 다음 컨트롤러 사용자 정의 인증서를 구성해야 합니다. KnativeServing CR(사용자 정의 리소스)에서 controller-custom-certs 사양을 수정하여 컨트롤러 사용자 정의 인증서를 구성할 수 있습니다. 보안은 KnativeServing CR과 동일한 네임스페이스에 있어야 합니다.

secret이 KnativeServing CR에 포함되어 있지 않은 경우 이 설정은 기본적으로 공개 키 인프라(PKI)를 사용합니다. PKI를 사용하는 경우 config-service-sa 구성 맵을 사용하여 클러스터 전체 인증서가 Knative Serving 컨트롤러에 자동으로 삽입됩니다. OpenShift Serverless Operator는 config-service-sa 구성 맵을 클러스터 전체 인증서로 채우고 구성 맵을 컨트롤러에 볼륨으로 마운트합니다.

4.3.5.1.1. 보안을 사용하여 태그-다이제스트 확인 구성

controller-custom-certs 사양에서 Secret 유형을 사용하는 경우 시크릿이 시크릿 볼륨으로 마운트됩니다. Knative 구성 요소는 보안에 필요한 인증서가 있다고 가정하여 직접 보안을 사용합니다.

사전 요구 사항

  • OpenShift Container Platform에 대한 클러스터 관리자 권한이 있습니다.
  • OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.

절차

  1. 보안을 생성합니다.

    명령 예

    $ oc -n knative-serving create secret generic custom-secret --from-file=<secret_name>.crt=<path_to_certificate>

  2. Secret 유형을 사용하도록 KnativeServing CR(사용자 정의 리소스)에서 controller-custom-certs 사양을 구성합니다.

    KnativeServing CR의 예

    apiVersion: operator.knative.dev/v1alpha1
    kind: KnativeServing
    metadata:
      name: knative-serving
      namespace: knative-serving
    spec:
      controller-custom-certs:
        name: custom-secret
        type: Secret

4.3.6. 제한적인 네트워크 정책

4.3.6.1. 제한적인 네트워크 정책이 있는 클러스터

여러 사용자가 액세스할 수 있는 클러스터를 사용하는 경우 클러스터는 네트워크 정책을 사용하여 네트워크를 통해 서로 통신할 수 있는 pod, 서비스 및 네임스페이스를 제어할 수 있습니다. 클러스터에서 제한적인 네트워크 정책을 사용하는 경우 Knative 시스템 Pod가 Knative 애플리케이션에 액세스할 수 없습니다. 예를 들어 네임스페이스에 모든 요청을 거부하는 다음 네트워크 정책이 있는 경우 Knative 시스템 Pod가 Knative 애플리케이션에 액세스할 수 없습니다.

네임스페이스에 대한 모든 요청을 거부하는 NetworkPolicy 오브젝트의 예

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: deny-by-default
  namespace: example-namespace
spec:
  podSelector:
  ingress: []

4.3.6.2. 제한적인 네트워크 정책을 사용하여 클러스터에서 Knative 애플리케이션과의 통신 활성화

Knative 시스템 Pod에서 애플리케이션에 액세스할 수 있도록 하려면 각 Knative 시스템 네임스페이스에 레이블을 추가한 다음 이 레이블이 있는 다른 네임스페이스의 네임스페이스에 액세스할 수 있는 애플리케이션 네임스페이스에 NetworkPolicy 오브젝트를 생성해야 합니다.

중요

클러스터의 비Knative 서비스에 대한 요청을 거부하는 네트워크 정책은 이러한 서비스에 대한 액세스를 계속 차단합니다. 그러나 Knative 시스템 네임스페이스에서 Knative 애플리케이션으로의 액세스를 허용하면 클러스터의 모든 네임스페이스에서 Knative 애플리케이션에 액세스할 수 있습니다.

클러스터의 모든 네임스페이스에서 Knative 애플리케이션에 대한 액세스를 허용하지 않으려면 Knative 서비스에 JSON 웹 토큰 인증을 사용할 수 있습니다. Knative 서비스에 대한 JSON 웹 토큰 인증에는 Service Mesh가 필요합니다.

사전 요구 사항

  • OpenShift CLI(oc)를 설치합니다.
  • OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.

절차

  1. 애플리케이션에 액세스해야 하는 각 Knative 시스템 네임스페이스에 knative.openshift.io/system-namespace=true 레이블을 추가합니다.

    1. knative-serving 네임스페이스에 레이블을 지정합니다.

      $ oc label namespace knative-serving knative.openshift.io/system-namespace=true
    2. knative-serving-ingress 네임스페이스에 레이블을 지정합니다.

      $ oc label namespace knative-serving-ingress knative.openshift.io/system-namespace=true
    3. knative-eventing 네임스페이스에 레이블을 지정합니다.

      $ oc label namespace knative-eventing knative.openshift.io/system-namespace=true
    4. knative-kafka 네임스페이스에 레이블을 지정합니다.

      $ oc label namespace knative-kafka knative.openshift.io/system-namespace=true
  2. 애플리케이션 네임스페이스에 NetworkPolicy 오브젝트를 생성하여 knative.openshift.io/system-namespace 레이블이 있는 네임스페이스에서 액세스를 허용합니다.

    NetworkPolicy 오브젝트 예

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: <network_policy_name> 1
      namespace: <namespace> 2
    spec:
      ingress:
      - from:
        - namespaceSelector:
            matchLabels:
              knative.openshift.io/system-namespace: "true"
      podSelector: {}
      policyTypes:
      - Ingress

    1
    네트워크 정책의 이름을 제공합니다.
    2
    애플리케이션이 존재하는 네임스페이스입니다.

4.4. 트래픽 분할

4.4.1. 트래픽 분할 개요

Knative 애플리케이션에서 트래픽 분할을 생성하여 트래픽을 관리할 수 있습니다. 트래픽 분할은 Knative 서비스에서 관리하는 경로의 일부로 구성됩니다.

Knative 애플리케이션의 트래픽 관리

경로를 구성하면 요청이 다른 서비스 버전에 전송될 수 있습니다. 이 라우팅은 Service 오브젝트의 트래픽 사양에 따라 결정됩니다.

트래픽 사양 선언은 하나 이상의 버전으로 구성되며, 각각 전체 트래픽의 일부를 처리합니다. 각 버전으로 라우팅되는 트래픽의 백분율은 Knative 검증에 의해 보장되는 최대 100%까지 추가해야 합니다.

트래픽 사양에 지정된 버전은 수정, 이름이 지정된 리버전이거나 "최신" 버전을 가리킬 수 있으며, 이는 서비스에 대한 모든 버전 목록 헤드를 추적할 수 있습니다. "latest" 버전은 새 버전이 생성될 때 업데이트되는 부동 참조 유형입니다. 각 버전에는 해당 버전에 대한 추가 액세스 URL을 생성하는 태그를 첨부할 수 있습니다.

트래픽 사양은 다음을 통해 수정할 수 있습니다.

  • Service 오브젝트의 YAML을 직접 편집합니다.
  • Knative(kn) CLI --traffic 플래그 사용.
  • OpenShift Container Platform 웹 콘솔 사용.

Knative 서비스를 생성할 때 기본 traffic 사양 설정이 없습니다.

4.4.2. 트래픽 사양 예

다음 예에서는 traffic의 100%가 서비스의 최신 버전으로 라우팅되는 트래픽 사양을 보여줍니다. status에서 latestRevision의 최신 버전의 이름을 볼 수 있습니다.

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: example-service
  namespace: default
spec:
...
  traffic:
  - latestRevision: true
    percent: 100
status:
  ...
  traffic:
  - percent: 100
    revisionName: example-service

다음 예에서는 traffic의 100%가 current로 태그가 지정된 버전으로 라우팅되고 해당 버전의 이름이 example-service로 지정된 트래픽 사양을 보여줍니다. 트래픽이 라우팅되지 않더라도 latest로 태그된 버전을 사용할 수 있습니다.

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: example-service
  namespace: default
spec:
...
  traffic:
  - tag: current
    revisionName: example-service
    percent: 100
  - tag: latest
    latestRevision: true
    percent: 0

다음 예제에서는 traffic 사양의 버전 목록을 확장하여 여러 버전으로 트래픽을 분할하는 방법을 보여줍니다. 이 예에서는 트래픽의 50%를 현재 로 태그된 버전으로, 트래픽의 50%를 후보로 태그된 버전으로 보냅니다. 트래픽이 라우팅되지 않더라도 latest로 태그된 버전을 사용할 수 있습니다.

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: example-service
  namespace: default
spec:
...
  traffic:
  - tag: current
    revisionName: example-service-1
    percent: 50
  - tag: candidate
    revisionName: example-service-2
    percent: 50
  - tag: latest
    latestRevision: true
    percent: 0

4.4.3. Knative CLI를 사용하여 트래픽 분할

Knative(kn) CLI를 사용하여 트래픽 분할을 생성하면 YAML 파일을 직접 수정하는 것보다 더 간소화되고 직관적인 사용자 인터페이스를 제공합니다. kn service update 명령을 사용하여 서비스 버전 간에 트래픽을 분할할 수 있습니다.

4.4.3.1. Knative CLI를 사용하여 트래픽 분할 생성

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.
  • Knative(kn) CLI가 설치되어 있습니다.
  • Knative 서비스가 생성되어 있습니다.

절차

  • 표준 kn service update 명령과 함께 --traffic 태그를 사용하여 서비스 리버전과 라우팅할 트래픽 백분율을 지정합니다.

    명령 예

    $ kn service update <service_name> --traffic <revision>=<percentage>

    다음과 같습니다.

    • <service_name>은 트래픽 라우팅을 구성하려는 Knative 서비스의 이름입니다.
    • <revision>은 일정 비율의 트래픽을 수신하도록 구성하려는 버전입니다. 버전 이름 또는 --tag 플래그를 사용하여 버전에 할당한 태그를 지정할 수 있습니다.
    • < percentage>는 지정된 버전으로 보낼 트래픽의 백분율입니다.
  • 선택 사항: --traffic 플래그는 한 명령에 여러 번 지정할 수 있습니다. 예를 들어 @latest 로 태그된 버전이 있고 stable 이라는 리버전이 있는 경우 다음과 같이 각 버전으로 분할하려는 트래픽의 백분율을 지정할 수 있습니다.

    명령 예

    $ kn service update example-service --traffic @latest=20,stable=80

    버전이 여러 개 있고 마지막 버전으로 분할해야 하는 트래픽의 백분율을 지정하지 않으면 --traffic 플래그가 이 값을 자동으로 계산할 수 있습니다. 예를 들어 example 이라는 세 번째 리버전이 있고 다음 명령을 사용하는 경우:

    명령 예

    $ kn service update example-service --traffic @latest=10,stable=60

    나머지 트래픽의 나머지 30%는 지정되지 않은 경우에도 예제 리버전으로 나뉩니다.

4.4.4. 트래픽 분할을 위한 CLI 플래그

Knative(kn) CLI는 kn service update 명령의 일부로 서비스의 트래픽 블록에서 트래픽 작업을 지원합니다.

4.4.4.1. Knative CLI 트래픽 분할 플래그

다음 테이블에는 트래픽 분할 플래그, 값 형식, 플래그에서 수행하는 작업이 요약되어 있습니다. 반복 열은 kn service update 명령에서 특정 플래그 값을 반복할 수 있는지를 나타냅니다.

플래그작업반복

--traffic

RevisionName=Percent

RevisionNamePercent 트래픽 제공

있음

--traffic

Tag=Percent

Tag가 있는 버전에 Percent 트래픽 제공

있음

--traffic

@latest=Percent

최신 준비 버전에 Percent 트래픽 제공

아니요

--tag

RevisionName=Tag

RevisionNameTag 지정

있음

--tag

@latest=Tag

최근 준비된 버전에 Tag 지정

아니요

--untag

Tag

버전에서 Tag 제거

있음

4.4.4.1.1. 여러 플래그 및 우선 순위

모든 트래픽 관련 플래그는 단일 kn service update 명령을 사용하여 지정할 수 있습니다. kn은 이러한 플래그의 우선순위를 정의합니다. 명령을 사용할 때 지정된 플래그의 순서는 고려하지 않습니다.

kn에 의해 평가되는 플래그의 우선순위는 다음과 같습니다.

  1. --untag: 이 플래그가 있는 참조된 버전은 모두 트래픽 블록에서 제거됩니다.
  2. --tag: 버전에는 트래픽 블록에 지정된 대로 태그가 지정됩니다.
  3. --traffic: 참조된 버전에는 트래픽 분할의 일부가 할당됩니다.

버전에 태그를 추가한 다음 설정한 태그에 따라 트래픽을 분할할 수 있습니다.

4.4.4.1.2. 개정버전 사용자 정의 URL

kn service update 명령을 사용하여 서비스에 --tag 플래그를 할당하면 서비스를 업데이트할 때 생성되는 버전에 대한 사용자 정의 URL이 생성됩니다. 사용자 정의 URL은 https://<tag>-<service_name>-<namespace>.<domain > 또는 http://<tag>-<service_name>-<namespace>.<domain > 을 따릅니다.

--tag--untag 플래그는 다음 구문을 사용합니다.

  • 하나의 값이 필요합니다.
  • 서비스의 트래픽 블록에 있는 고유한 태그를 나타냅니다.
  • 하나의 명령에서 여러 번 지정할 수 있습니다.
4.4.4.1.2.1. 예: 태그를 버전에 할당

다음 예제에서는 latest 태그를 example-revision이라는 버전에 할당합니다.

$ kn service update <service_name> --tag @latest=example-tag
4.4.4.1.2.2. 예: 버전에서 태그 제거

--untag 플래그를 사용하여 사용자 정의 URL을 제거하도록 태그를 제거할 수 있습니다.

참고

개정 버전에 해당 태그가 제거되고 트래픽의 0%가 할당되면 개정 버전이 트래픽 블록에서 완전히 제거됩니다.

다음 명령은 example-revision이라는 버전에서 모든 태그를 제거합니다.

$ kn service update <service_name> --untag example-tag

4.4.5. 버전 간 트래픽 분할

서버리스 애플리케이션을 생성하면 OpenShift Container Platform 웹 콘솔의 개발자 화면의 토폴로지 보기에 애플리케이션이 표시됩니다. 애플리케이션 버전은 노드에서 나타내며 Knative 서비스는 노드 주변의 사각형으로 표시됩니다.

코드 또는 서비스 구성을 새로 변경하면 지정된 시간에 코드 스냅샷인 새 버전이 생성됩니다. 서비스의 경우 필요에 따라 서비스를 분할하고 다른 버전으로 라우팅하여 서비스 버전 간 트래픽을 관리할 수 있습니다.

4.4.5.1. OpenShift Container Platform 웹 콘솔을 사용하여 버전 간 트래픽 관리

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.
  • OpenShift Container Platform 웹 콘솔에 로그인했습니다.

절차

토폴로지 보기에서 애플리케이션의 다양한 버전 간 트래픽을 분할하려면 다음을 수행합니다.

  1. Knative 서비스를 클릭하여 측면 패널에서 개요를 확인합니다.
  2. 리소스 탭을 클릭하여 서비스의 버전경로로 구성된 목록을 확인합니다.

    그림 4.1. 서버리스 애플리케이션

    odc 서버리스 앱
  3. 측면 패널 상단에 S 아이콘으로 표시된 서비스를 클릭하여 서비스 세부 정보 개요를 확인합니다.
  4. YAML 탭을 클릭하고 YAML 편집기에서 서비스 구성을 수정한 다음 저장을 클릭합니다. 예를 들면 timeoutseconds를 300에서 301로 변경합니다. 이러한 구성 변경으로 인해 새 버전이 트리거됩니다. 토폴로지 보기에 최신 버전이 표시되고 서비스의 리소스 탭에 두 가지 버전이 표시됩니다.
  5. 리소스 탭에서 트래픽 배포 설정을 클릭하여 트래픽 분산 대화 상자를 확인합니다.

    1. 분할 필드에 두 버전의 분할 트래픽 백분율 부분을 추가합니다.
    2. 두 버전에 대한 사용자 정의 URL을 생성하도록 태그를 추가합니다.
    3. 저장을 클릭하여 토폴로지 보기에서 두 버전을 나타내는 두 노드를 확인합니다.

      그림 4.2. 서버리스 애플리케이션의 버전

      odc 서버리스 버전

4.4.6. Blue-Green 전략을 사용하여 트래픽 재실행

blue-green 배포 전략을 사용하여 프로덕션 버전에서 새 버전으로 트래픽을 안전하게 다시 라우팅할 수 있습니다.

4.4.6.1. blue-green 배포 전략을 사용하여 트래픽 라우팅 및 관리

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.
  • OpenShift CLI(oc)를 설치합니다.

절차

  1. 애플리케이션을 Knative 서비스로 생성하고 배포합니다.
  2. 다음 명령의 출력을 확인하여 서비스를 배포할 때 생성된 첫 번째 버전의 이름을 찾습니다.

    $ oc get ksvc <service_name> -o=jsonpath='{.status.latestCreatedRevisionName}'

    명령 예

    $ oc get ksvc example-service -o=jsonpath='{.status.latestCreatedRevisionName}'

    출력 예

    $ example-service-00001

  3. 다음 YAML을 서비스 spec에 추가하여 인바운드 트래픽을 버전으로 전송합니다.

    ...
    spec:
      traffic:
        - revisionName: <first_revision_name>
          percent: 100 # All traffic goes to this revision
    ...
  4. 다음 명령을 실행하여 얻은 URL 출력에서 앱을 볼 수 있는지 확인합니다.

    $ oc get ksvc <service_name>
  5. 서비스의 template 사양에서 하나 이상의 필드를 수정하고 재배포하여 애플리케이션의 두 번째 버전을 배포합니다. 예를 들어 서비스의 image 또는 env 환경 변수를 수정할 수 있습니다. 서비스 YAML 파일을 적용하거나 Knative(kn) CLI를 설치한 경우 kn service update 명령을 사용하여 서비스를 재배포할 수 있습니다.
  6. 다음 명령을 실행하여 서비스를 재배포할 때 생성된 두 번째 최신 버전의 이름을 찾습니다.

    $ oc get ksvc <service_name> -o=jsonpath='{.status.latestCreatedRevisionName}'

    이때 서비스의 첫 번째 버전과 두 번째 버전이 모두 배포되고 실행됩니다.

  7. 다른 모든 트래픽을 첫 번째 버전으로 전송하면서 두 번째 버전에 대한 새 테스트 끝점을 생성하도록 기존 서비스를 업데이트합니다.

    테스트 끝점을 사용하여 업데이트된 서비스 사양의 예

    ...
    spec:
      traffic:
        - revisionName: <first_revision_name>
          percent: 100 # All traffic is still being routed to the first revision
        - revisionName: <second_revision_name>
          percent: 0 # No traffic is routed to the second revision
          tag: v2 # A named route
    ...

    YAML 리소스를 다시 적용하여 이 서비스를 재배포하면 애플리케이션의 두 번째 버전이 준비됩니다. 기본 URL의 두 번째 버전으로 라우팅되는 트래픽이 없으며 Knative는 새로 배포된 버전을 테스트하기 위해 v2라는 새 서비스를 생성합니다.

  8. 다음 명령을 실행하여 두 번째 버전에 대한 새 서비스의 URL을 가져옵니다.

    $ oc get ksvc <service_name> --output jsonpath="{.status.traffic[*].url}"

    이 URL을 사용하여 트래픽을 라우팅하기 전에 애플리케이션의 새 버전이 예상대로 작동하는지 확인할 수 있습니다.

  9. 트래픽의 50%가 첫 번째 버전으로 전송되고 50%가 두 번째 버전으로 전송되도록 기존 서비스를 다시 업데이트합니다.

    버전 간에 트래픽을 50/50으로 분할하는 업데이트된 서비스 사양 분할 예

    ...
    spec:
      traffic:
        - revisionName: <first_revision_name>
          percent: 50
        - revisionName: <second_revision_name>
          percent: 50
          tag: v2
    ...

  10. 모든 트래픽을 새 버전의 앱으로 라우팅할 준비가 되면 두 번째 버전으로 트래픽의 100%를 보내도록 서비스를 다시 업데이트합니다.

    두 번째 버전으로 모든 트래픽을 전송하는 업데이트된 서비스 사양의 예

    ...
    spec:
      traffic:
        - revisionName: <first_revision_name>
          percent: 0
        - revisionName: <second_revision_name>
          percent: 100
          tag: v2
    ...

    작은 정보

    버전을 롤백하지 않으려는 경우 첫 번째 버전을 트래픽의 0%로 설정하는 대신 제거할 수 있습니다. 라우팅할 수 없는 버전 오브젝트는 가비지 수집됩니다.

  11. 첫 번째 버전의 URL을 방문하여 이전 버전의 앱으로 더 이상 트래픽이 전송되지 않는지 확인합니다.

4.5. 외부 및 인그레스 라우팅

4.5.1. 라우팅 개요

Knative에서는 OpenShift Container Platform TLS 종료를 활용하여 Knative 서비스에 대한 라우팅을 제공합니다. Knative 서비스가 생성되면 서비스에 대해 OpenShift Container Platform 경로가 자동으로 생성됩니다. 이 경로는 OpenShift Serverless Operator에서 관리합니다. OpenShift Container Platform 경로는 OpenShift Container Platform 클러스터와 동일한 도메인을 통해 Knative 서비스를 표시합니다.

OpenShift Container Platform 라우팅에 대한 Operator의 제어를 비활성화하여 대신 TLS 인증서를 직접 사용하도록 Knative 경로를 구성할 수 있습니다.

또한 Knative 경로를 OpenShift Container Platform 경로와 함께 사용하면 트래픽 분할과 같은 세분화된 라우팅 기능을 추가로 제공할 수 있습니다.

4.5.1.1. 추가 리소스

4.5.2. 레이블 및 주석 사용자 정의

OpenShift Container Platform 경로는 사용자 정의 레이블 및 주석을 사용할 수 있으며 Knative 서비스의 metadata 사양을 수정하여 구성할 수 있습니다. 사용자 정의 레이블 및 주석은 서비스에서 Knative 경로로 전달된 다음 Knative Ingress로 전달되고 마지막으로 OpenShift Container Platform 경로로 전달됩니다.

4.5.2.1. OpenShift Container Platform 경로에 대한 레이블 및 주석 사용자 정의

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Serving 구성 요소가 OpenShift Container Platform 클러스터에 설치되어 있습니다.
  • OpenShift CLI(oc)를 설치합니다.

절차

  1. OpenShift Container Platform 경로에 전달할 레이블 또는 주석이 포함된 Knative 서비스를 생성합니다.

    • YAML을 사용하여 서비스를 생성하려면 다음을 수행합니다.

      YAML을 사용하여 생성한 서비스 예

      apiVersion: serving.knative.dev/v1
      kind: Service
      metadata:
        name: <service_name>
        labels:
          <label_name>: <label_value>
        annotations:
          <annotation_name>: <annotation_value>
      ...

    • Knative(kn) CLI를 사용하여 서비스를 생성하려면 다음을 입력합니다.

      kn 명령을 사용하여 생성된 서비스 예

      $ kn service create <service_name> \
        --image=<image> \
        --annotation <annotation_name>=<annotation_value> \
        --label <label_value>=<label_value>

  2. 다음 명령의 출력을 확인하여 추가한 주석 또는 레이블을 사용하여 OpenShift Container Platform 경로가 생성되었는지 확인합니다.

    확인을 위한 명령 예

    $ oc get routes.route.openshift.io \
         -l serving.knative.openshift.io/ingressName=<service_name> \ 1
         -l serving.knative.openshift.io/ingressNamespace=<service_namespace> \ 2
         -n knative-serving-ingress -o yaml \
             | grep -e "<label_name>: \"<label_value>\""  -e "<annotation_name>: <annotation_value>" 3

    1
    서비스 이름을 사용합니다.
    2
    서비스가 생성된 네임스페이스를 사용합니다.
    3
    레이블 및 주석 이름과 값의 값을 사용합니다.

4.5.3. Knative 서비스의 경로 구성

OpenShift Container Platform에서 TLS 인증서를 사용하도록 Knative 서비스를 구성하려면 OpenShift Serverless Operator의 서비스 경로 자동 생성 기능을 비활성화하고 대신 해당 서비스에 대한 경로를 수동으로 생성해야 합니다.

참고

다음 절차를 완료하면 knative-serving-ingress 네임스페이스의 기본 OpenShift Container Platform 경로가 생성되지 않습니다. 그러나 애플리케이션의 Knative 경로는 이 네임스페이스에 계속 생성됩니다.

4.5.3.1. Knative 서비스에 대한 OpenShift Container Platform 경로 구성

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Serving 구성 요소가 OpenShift Container Platform 클러스터에 설치되어 있어야 합니다.
  • OpenShift CLI(oc)를 설치합니다.

절차

  1. serving.knative.openshift.io/disableRoute=true 주석이 포함된 Knative 서비스를 생성합니다.

    중요

    serving.knative.openshift.io/disableRoute=true 주석은 OpenShift Serverless에서 경로를 자동으로 생성하지 않도록 지시합니다. 그러나 서비스는 여전히 URL을 표시하며 Ready 상태에 도달합니다. 이 URL은 URL의 호스트 이름과 동일한 호스트 이름으로 자체 경로를 생성할 때까지 외부에서 작동하지 않습니다.

    1. Knative 서비스 리소스를 생성합니다.

      리소스 예

      apiVersion: serving.knative.dev/v1
      kind: Service
      metadata:
        name: <service_name>
        annotations:
          serving.knative.openshift.io/disableRoute: "true"
      spec:
        template:
          spec:
            containers:
            - image: <image>
      ...

    2. Service 리소스를 적용합니다.

      $ oc apply -f <filename>
    3. 선택 사항입니다. kn service create 명령을 사용하여 Knative 서비스를 생성합니다.

      kn 명령 예제

      $ kn service create <service_name> \
        --image=gcr.io/knative-samples/helloworld-go \
        --annotation serving.knative.openshift.io/disableRoute=true

  2. 서비스에 OpenShift Container Platform 경로가 생성되지 않았는지 확인합니다.

    명령 예

    $ $ oc get routes.route.openshift.io \
      -l serving.knative.openshift.io/ingressName=$KSERVICE_NAME \
      -l serving.knative.openshift.io/ingressNamespace=$KSERVICE_NAMESPACE \
      -n knative-serving-ingress

    다음 출력이 표시됩니다.

    No resources found in knative-serving-ingress namespace.
  3. knative-serving-ingress 네임스페이스에 Route 리소스를 생성합니다.

    apiVersion: route.openshift.io/v1
    kind: Route
    metadata:
      annotations:
        haproxy.router.openshift.io/timeout: 600s 1
      name: <route_name> 2
      namespace: knative-serving-ingress 3
    spec:
      host: <service_host> 4
      port:
        targetPort: http2
      to:
        kind: Service
        name: kourier
        weight: 100
      tls:
        insecureEdgeTerminationPolicy: Allow
        termination: edge 5
        key: |-
          -----BEGIN PRIVATE KEY-----
          [...]
          -----END PRIVATE KEY-----
        certificate: |-
          -----BEGIN CERTIFICATE-----
          [...]
          -----END CERTIFICATE-----
        caCertificate: |-
          -----BEGIN CERTIFICATE-----
          [...]
          -----END CERTIFICATE----
      wildcardPolicy: None
    1
    OpenShift Container Platform 경로에 대한 타임아웃 값입니다. max-revision-timeout-seconds 설정과 동일한 값으로 설정해야 합니다(기본값: 600s).
    2
    OpenShift Container Platform 경로의 이름입니다.
    3
    OpenShift Container Platform 경로의 네임스페이스입니다. knative-serving-ingress여야 합니다.
    4
    외부 액세스를 위한 호스트 이름입니다. 이 값을 <service_name>-<service_namespace>.<domain>으로 설정할 수 있습니다.
    5
    사용할 인증서입니다. 현재는 edge 종료만 지원됩니다.
  4. Route 리소스를 적용합니다.

    $ oc apply -f <filename>

4.5.4. 글로벌 HTTPS 리디렉션

HTTPS 리디렉션은 들어오는 HTTP 요청에 대한 리디렉션을 제공합니다. 리디렉션된 HTTP 요청은 암호화됩니다. KnativeServing CR(사용자 정의 리소스)에 대한 httpProtocol 사양을 구성하여 클러스터의 모든 서비스에 대해 HTTPS 리디렉션을 활성화할 수 있습니다.

4.5.4.1. HTTPS 리디렉션 글로벌 설정

HTTPS 리디렉션을 활성화하는 KnativeServing CR의 예

apiVersion: operator.knative.dev/v1alpha1
kind: KnativeServing
metadata:
  name: knative-serving
spec:
  config:
    network:
      httpProtocol: "redirected"
...

4.5.5. 외부 경로에 대한 URL 스키마

외부 경로의 URL 스키마는 보안 강화를 위해 기본적으로 HTTPS로 설정됩니다. 이 스키마는 KnativeServing CR(사용자 정의 리소스) 사양의 default-external-scheme 키에 따라 결정됩니다.

4.5.5.1. 외부 경로에 대한 URL 스키마 설정

기본 사양

...
spec:
  config:
    network:
      default-external-scheme: "https"
...

default-external-scheme 키를 수정하여 HTTP를 사용하도록 기본 사양을 덮어쓸 수 있습니다.

HTTP 덮어쓰기 사양

...
spec:
  config:
    network:
      default-external-scheme: "http"
...

4.5.6. 서비스당 HTTPS 리디렉션

networking.knative.dev/http-option 주석을 구성하여 서비스에 대해 HTTPS 리디렉션을 활성화하거나 비활성화할 수 있습니다.

4.5.6.1. 서비스의 HTTPS 리디렉션

다음 예제에서는 Knative Service YAML 오브젝트에서 이 주석을 사용하는 방법을 보여줍니다.

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: example
  namespace: default
  annotations:
    networking.knative.dev/http-option: "redirected"
spec:
  ...

4.5.7. 클러스터 로컬 가용성

기본적으로 Knative 서비스는 공용 IP 주소에 게시됩니다. 공용 IP 주소에 게시된다는 것은 Knative 서비스가 공용 애플리케이션이 되어 공개적으로 액세스할 수 있는 URL이 있음을 의미합니다.

공개적으로 액세스할 수 있는 URL은 클러스터 외부에서 액세스할 수 있습니다. 그러나 개발자는 클러스터 내부에서만 액세스할 수 있는 백엔드 서비스(비공개 서비스)를 빌드해야 할 수 있습니다. 개발자는 클러스터의 개별 서비스에 networking.knative.dev/visibility=cluster-local 레이블을 지정하여 비공개로 설정할 수 있습니다.

중요

OpenShift Serverless 1.15.0 및 최신 버전의 경우 serving.knative.dev/visibility 레이블을 더 이상 사용할 수 없습니다. 대신 networking.knative.dev/visibility 레이블을 사용하려면 기존 서비스를 업데이트해야 합니다.

4.5.7.1. 클러스터 가용성을 로컬 클러스터로 설정

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.
  • Knative 서비스가 생성되어 있습니다.

절차

  • networking.knative.dev/visibility=cluster-local 레블을 추가하여 서비스 가시성을 설정합니다.

    $ oc label ksvc <service_name> networking.knative.dev/visibility=cluster-local

검증

  • 다음 명령을 입력하고 출력을 검토하여 서비스의 URL이 http://<service_name>.<namespace>.svc.cluster.local 형식인지 확인합니다.

    $ oc get ksvc

    출력 예

    NAME            URL                                                                         LATESTCREATED     LATESTREADY       READY   REASON
    hello           http://hello.default.svc.cluster.local                                      hello-tx2g7       hello-tx2g7       True

4.5.8. Kourier Gateway 서비스 유형

Kourier Gateway는 기본적으로 ClusterIP 서비스 유형으로 노출됩니다. 이 서비스 유형은 KnativeServing CR(사용자 정의 리소스)의 서비스 유형 수신 사양에 따라 결정됩니다.

기본 사양

...
spec:
  ingress:
    kourier:
      service-type: ClusterIP
...

4.5.8.1. Kourier Gateway 서비스 유형 설정

서비스 유형 사양을 수정하여 대신 로드 밸런서 서비스 유형을 사용하도록 기본 서비스 유형을 덮어쓸 수 있습니다.

LoadBalancer override 사양

...
spec:
  ingress:
    kourier:
      service-type: LoadBalancer
...

4.5.9. HTTP2 및 gRPC 사용

OpenShift Serverless에서는 비보안 또는 엣지 종료 경로만 지원합니다. 비보안 또는 엣지 종료 경로에서는 OpenShift Container Platform에서 HTTP2를 지원하지 않습니다. 또한 이러한 경로는 gRPC가 HTTP2에 의해 전송되기 때문에 gRPC를 지원하지 않습니다. 애플리케이션에서 이러한 프로토콜을 사용하는 경우 수신 게이트웨이를 사용하여 애플리케이션을 직접 호출해야 합니다. 이를 위해서는 수신 게이트웨이의 공용 주소와 애플리케이션의 특정 호스트를 찾아야 합니다.

4.5.9.1. HTTP2 및 gRPC를 사용하여 서버리스 애플리케이션과 상호 작용

중요

이 방법은 LoadBalancer 서비스 유형을 사용하여 Kourier 게이트웨이를 노출해야 합니다. KnativeServing CRD(사용자 정의 리소스 정의)에 다음 YAML을 추가하여 이를 구성할 수 있습니다.

...
spec:
  ingress:
    kourier:
      service-type: LoadBalancer
...

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.
  • OpenShift CLI(oc)를 설치합니다.
  • Knative 서비스가 생성되어 있습니다.

절차

  1. 애플리케이션 호스트를 찾습니다. 서버리스 애플리케이션 배포 확인에 있는 지침을 참조하십시오.
  2. 수신 게이트웨이의 공용 주소를 찾습니다.

    $ oc -n knative-serving-ingress get svc kourier

    출력 예

    NAME                   TYPE           CLUSTER-IP      EXTERNAL-IP                                                             PORT(S)                                                                                                                                      AGE
    kourier   LoadBalancer   172.30.51.103   a83e86291bcdd11e993af02b7a65e514-33544245.us-east-1.elb.amazonaws.com   80:31380/TCP,443:31390/TCP   67m

    공용 주소는 EXTERNAL-IP 필드에 있으며 이 경우 a83e86291bcdd11e993af02b7a65e514-33544245.us-east-1.elb.amazonaws.com입니다.

  3. HTTP 요청의 호스트 헤더를 애플리케이션의 호스트로 수동으로 설정하되 요청 자체는 수신 게이트웨이의 공개 주소로 지정합니다.

    $ curl -H "Host: hello-default.example.com" a83e86291bcdd11e993af02b7a65e514-33544245.us-east-1.elb.amazonaws.com

    출력 예

    Hello Serverless!

    수신 게이트웨이에 대한 요청을 직접 지시하는 동안 애플리케이션 호스트에 기관을 설정하여 gRPC 요청을 생성할 수도 있습니다.

    grpc.Dial(
        "a83e86291bcdd11e993af02b7a65e514-33544245.us-east-1.elb.amazonaws.com:80",
        grpc.WithAuthority("hello-default.example.com:80"),
        grpc.WithInsecure(),
    )
    참고

    위 예제와 같이 각 포트(기본값 80)를 두 호스트 모두에 추가해야 합니다.

4.6. Knative 서비스에 대한 액세스 구성

4.6.1. Knative 서비스의 JSON Web Token 인증 설정

OpenShift Serverless에는 현재 사용자 정의 권한 부여 기능이 없습니다. 배포에 사용자 정의 권한 부여를 추가하려면 OpenShift Serverless를 Red Hat OpenShift Service Mesh와 통합한 다음 Knative 서비스에 대해 JSON 웹 토큰(JWT) 인증 및 사이드카 삽입을 구성해야 합니다.

4.6.2. Service Mesh 2.x에서 JSON 웹 토큰 인증 사용

Service Mesh 2.x 및 OpenShift Serverless를 사용하여 Knative 서비스와 함께 JSON 웹 토큰(JWT) 인증을 사용할 수 있습니다. 이렇게 하려면 ServiceMeshMemberRoll 오브젝트의 멤버인 애플리케이션 네임스페이스에서 인증 요청 및 정책을 생성해야 합니다. 서비스에 대한 사이드카 삽입도 활성화해야 합니다.

4.6.2.1. Service Mesh 2.x 및 OpenShift Serverless에 대한 JSON 웹 토큰 인증 구성

중요

knative-servingknative-serving-ingress와 같은 시스템 네임스페이스의 Pod에 Kourier가 활성화되어 있는 경우 사이드카를 삽입할 수 없습니다.

이러한 네임스페이스의 Pod에 사이드카를 삽입해야 하는 경우 Service Mesh와 OpenShift Serverless 통합에 대한 OpenShift Serverless 문서를 참조하십시오.

사전 요구 사항

  • OpenShift Serverless Operator, Knative Serving, Red Hat OpenShift Service Mesh를 클러스터에 설치했습니다.
  • OpenShift CLI(oc)를 설치합니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.

절차

  1. 서비스에 sidecar.istio.io/inject="true" 주석을 추가합니다.

    서비스의 예

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: <service_name>
    spec:
      template:
        metadata:
          annotations:
            sidecar.istio.io/inject: "true" 1
            sidecar.istio.io/rewriteAppHTTPProbers: "true" 2
    ...

    1
    sidecar.istio.io/inject="true" 주석을 추가합니다.
    2
    OpenShift Serverless 버전 1.14.0 이상은 기본적으로 Knative 서비스에 대한 준비 상태 프로브로 사용하므로 Knative 서비스에서 주석 sidecar.istio.io/rewriteAppHTTPProbers: "true" 를 설정해야 합니다.
  2. Service 리소스를 적용합니다.

    $ oc apply -f <filename>
  3. ServiceMeshMemberRoll 오브젝트의 멤버인 각 서버리스 애플리케이션 네임스페이스에 RequestAuthentication 리소스를 생성합니다.

    apiVersion: security.istio.io/v1beta1
    kind: RequestAuthentication
    metadata:
      name: jwt-example
      namespace: <namespace>
    spec:
      jwtRules:
      - issuer: testing@secure.istio.io
        jwksUri: https://raw.githubusercontent.com/istio/istio/release-1.8/security/tools/jwt/samples/jwks.json
  4. RequestAuthentication 리소스를 적용합니다.

    $ oc apply -f <filename>
  5. 다음 AuthorizationPolicy 리소스를 생성하여 ServiceMeshMemberRoll 오브젝트의 멤버인 각 서버리스 애플리케이션 네임스페이스의 시스템 Pod에서 RequestAuthenticaton 리소스에 대한 액세스를 허용합니다.

    apiVersion: security.istio.io/v1beta1
    kind: AuthorizationPolicy
    metadata:
      name: allowlist-by-paths
      namespace: <namespace>
    spec:
      action: ALLOW
      rules:
      - to:
        - operation:
            paths:
            - /metrics 1
            - /healthz 2
    1
    시스템 Pod별 지표를 수집하는 애플리케이션의 경로입니다.
    2
    시스템 Pod별로 검색할 애플리케이션의 경로입니다.
  6. AuthorizationPolicy 리소스를 적용합니다.

    $ oc apply -f <filename>
  7. ServiceMeshMemberRoll 오브젝트의 멤버인 각 서버리스 애플리케이션 네임스페이스에서 다음 AuthorizationPolicy 리소스를 생성합니다.

    apiVersion: security.istio.io/v1beta1
    kind: AuthorizationPolicy
    metadata:
      name: require-jwt
      namespace: <namespace>
    spec:
      action: ALLOW
      rules:
      - from:
        - source:
           requestPrincipals: ["testing@secure.istio.io/testing@secure.istio.io"]
  8. AuthorizationPolicy 리소스를 적용합니다.

    $ oc apply -f <filename>

검증

  1. Knative 서비스 URL을 가져오기 위해 curl 요청을 사용하면 해당 요청이 거부됩니다.

    명령 예

    $ curl http://hello-example-1-default.apps.mycluster.example.com/

    출력 예

    RBAC: access denied

  2. 유효한 JWT로 요청을 확인합니다.

    1. 유효한 JWT 토큰을 가져옵니다.

      $ TOKEN=$(curl https://raw.githubusercontent.com/istio/istio/release-1.8/security/tools/jwt/samples/demo.jwt -s) && echo "$TOKEN" | cut -d '.' -f2 - | base64 --decode -
    2. curl 요청 헤더에 유효한 토큰을 사용하여 서비스에 액세스합니다.

      $ curl -H "Authorization: Bearer $TOKEN"  http://hello-example-1-default.apps.example.com

      그러면 요청이 허용됩니다.

      출력 예

      Hello OpenShift!

4.6.3. Service Mesh 1.x에서 JSON 웹 토큰 인증 사용

Service Mesh 1.x 및 OpenShift Serverless를 사용하여 Knative 서비스와 함께 JSON 웹 토큰(JWT) 인증을 사용할 수 있습니다. 이렇게 하려면 ServiceMeshMemberRoll 오브젝트의 멤버인 애플리케이션 네임스페이스에 정책을 만들어야 합니다. 서비스에 대한 사이드카 삽입도 활성화해야 합니다.

4.6.3.1. Service Mesh 1.x 및 OpenShift Serverless에 대한 JSON 웹 토큰 인증 구성

중요

knative-servingknative-serving-ingress와 같은 시스템 네임스페이스의 Pod에 Kourier가 활성화되어 있는 경우 사이드카를 삽입할 수 없습니다.

이러한 네임스페이스의 Pod에 사이드카를 삽입해야 하는 경우 Service Mesh와 OpenShift Serverless 통합에 대한 OpenShift Serverless 문서를 참조하십시오.

사전 요구 사항

  • OpenShift Serverless Operator, Knative Serving, Red Hat OpenShift Service Mesh를 클러스터에 설치했습니다.
  • OpenShift CLI(oc)를 설치합니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.

절차

  1. 서비스에 sidecar.istio.io/inject="true" 주석을 추가합니다.

    서비스의 예

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: <service_name>
    spec:
      template:
        metadata:
          annotations:
            sidecar.istio.io/inject: "true" 1
            sidecar.istio.io/rewriteAppHTTPProbers: "true" 2
    ...

    1
    sidecar.istio.io/inject="true" 주석을 추가합니다.
    2
    OpenShift Serverless 버전 1.14.0 이상은 기본적으로 Knative 서비스에 대한 준비 상태 프로브로 사용하므로 Knative 서비스에서 주석 sidecar.istio.io/rewriteAppHTTPProbers: "true" 를 설정해야 합니다.
  2. Service 리소스를 적용합니다.

    $ oc apply -f <filename>
  3. 유효한 JWT(JSON 웹 토큰)가 있는 요청만 허용하는 ServiceMeshMemberRoll 오브젝트의 멤버인 서버리스 애플리케이션 네임스페이스에 정책을 생성합니다.

    중요

    /metrics/healthz 경로는 knative-serving 네임스페이스의 시스템 Pod에서 액세스하므로 excludedPaths에 포함되어야 합니다.

    apiVersion: authentication.istio.io/v1alpha1
    kind: Policy
    metadata:
      name: default
      namespace: <namespace>
    spec:
      origins:
      - jwt:
          issuer: testing@secure.istio.io
          jwksUri: "https://raw.githubusercontent.com/istio/istio/release-1.6/security/tools/jwt/samples/jwks.json"
          triggerRules:
          - excludedPaths:
            - prefix: /metrics 1
            - prefix: /healthz 2
      principalBinding: USE_ORIGIN
    1
    시스템 Pod별 지표를 수집하는 애플리케이션의 경로입니다.
    2
    시스템 Pod별로 검색할 애플리케이션의 경로입니다.
  4. Policy 리소스를 적용합니다.

    $ oc apply -f <filename>

검증

  1. Knative 서비스 URL을 가져오기 위해 curl 요청을 사용하면 해당 요청이 거부됩니다.

    $ curl http://hello-example-default.apps.mycluster.example.com/

    출력 예

    Origin authentication failed.

  2. 유효한 JWT로 요청을 확인합니다.

    1. 유효한 JWT 토큰을 가져옵니다.

      $ TOKEN=$(curl https://raw.githubusercontent.com/istio/istio/release-1.6/security/tools/jwt/samples/demo.jwt -s) && echo "$TOKEN" | cut -d '.' -f2 - | base64 --decode -
    2. curl 요청 헤더에 유효한 토큰을 사용하여 서비스에 액세스합니다.

      $ curl http://hello-example-default.apps.mycluster.example.com/ -H "Authorization: Bearer $TOKEN"

      그러면 요청이 허용됩니다.

      출력 예

      Hello OpenShift!

4.7. Knative 서비스의 사용자 정의 도메인 구성

4.7.1. Knative 서비스의 사용자 정의 도메인 구성

Knative 서비스에는 클러스터 구성에 따라 기본 도메인 이름이 자동으로 할당됩니다. 예를 들면 &lt ;service_name>-<namespace>.example.com 입니다. 보유한 사용자 정의 도메인 이름을 Knative 서비스에 매핑하여 Knative 서비스의 도메인을 사용자 지정할 수 있습니다.

서비스에 대한 DomainMapping 리소스를 생성하여 이 작업을 수행할 수 있습니다. 또한 여러 개의 DomainMapping 리소스를 생성하여 여러 도메인에 매핑하고 하위 도메인을 단일 서비스에 매핑할 수도 있습니다.

4.7.2. 사용자 정의 도메인 매핑

보유한 사용자 정의 도메인 이름을 Knative 서비스에 매핑하여 Knative 서비스의 도메인을 사용자 지정할 수 있습니다. 사용자 정의 도메인 이름을 CR(사용자 정의 리소스)에 매핑하려면 Knative 서비스 또는 Knative 경로와 같이 주소 지정 가능 대상 CR에 매핑하는 DomainMapping CR을 생성해야 합니다.

4.7.2.1. 사용자 정의 도메인 매핑 생성

보유한 사용자 정의 도메인 이름을 Knative 서비스에 매핑하여 Knative 서비스의 도메인을 사용자 지정할 수 있습니다. 사용자 정의 도메인 이름을 CR(사용자 정의 리소스)에 매핑하려면 Knative 서비스 또는 Knative 경로와 같이 주소 지정 가능 대상 CR에 매핑하는 DomainMapping CR을 생성해야 합니다.

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.
  • OpenShift CLI(oc)를 설치합니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
  • Knative 서비스를 생성했으며 해당 서비스에 매핑할 사용자 정의 도메인을 제어할 수 있습니다.

    참고

    사용자 정의 도메인에서 OpenShift Container Platform 클러스터의 IP 주소를 참조해야 합니다.

절차

  1. 매핑하려는 대상 CR과 동일한 네임스페이스에 DomainMapping CR을 포함하는 YAML 파일을 생성합니다.

    apiVersion: serving.knative.dev/v1alpha1
    kind: DomainMapping
    metadata:
     name: <domain_name> 1
     namespace: <namespace> 2
    spec:
     ref:
       name: <target_name> 3
       kind: <target_type> 4
       apiVersion: serving.knative.dev/v1
    1
    대상 CR에 매핑할 사용자 정의 도메인 이름입니다.
    2
    DomainMapping CR 및 대상 CR의 네임스페이스입니다.
    3
    사용자 정의 도메인에 매핑할 대상 CR의 이름입니다.
    4
    사용자 지정 도메인에 매핑되는 CR 유형입니다.

    서비스 도메인 매핑 예

    apiVersion: serving.knative.dev/v1alpha1
    kind: DomainMapping
    metadata:
     name: example-domain
     namespace: default
    spec:
     ref:
       name: example-service
       kind: Service
       apiVersion: serving.knative.dev/v1

    경로 도메인 매핑 예

    apiVersion: serving.knative.dev/v1alpha1
    kind: DomainMapping
    metadata:
     name: example-domain
     namespace: default
    spec:
     ref:
       name: example-route
       kind: Route
       apiVersion: serving.knative.dev/v1

  2. DomainMapping CR을 YAML 파일로 적용합니다.

    $ oc apply -f <filename>

4.7.3. Knative CLI를 사용하는 Knative 서비스의 사용자 정의 도메인

보유한 사용자 정의 도메인 이름을 Knative 서비스에 매핑하여 Knative 서비스의 도메인을 사용자 지정할 수 있습니다. Knative(kn) CLI를 사용하여 Knative 서비스 또는 Knative 경로와 같이 주소 지정 가능 대상 CR에 매핑되는 DomainMapping CR(사용자 정의 리소스)을 생성할 수 있습니다.

4.7.3.1. Knative CLI를 사용하여 사용자 정의 도메인 매핑 생성

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.
  • Knative 서비스 또는 경로를 생성했으며 CR에 매핑할 사용자 정의 도메인을 제어할 수 있습니다.

    참고

    사용자 정의 도메인에서 OpenShift Container Platform 클러스터의 DNS를 가리켜야 합니다.

  • Knative(kn) CLI가 설치되어 있습니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.

절차

  • 현재 네임스페이스의 CR에 도메인을 매핑합니다.

    $ kn domain create <domain_mapping_name> --ref <target_name>

    명령 예

    $ kn domain create example-domain-map --ref example-service

    --ref 플래그는 도메인 매핑을 위해 주소 지정 가능한 대상 CR을 지정합니다.

    --ref 플래그를 사용할 때 접두사가 지정되어 있지 않은 경우 대상이 현재 네임스페이스의 Knative 서비스라고 가정합니다.

  • 지정된 네임스페이스의 Knative 서비스에 도메인을 매핑합니다.

    $ kn domain create <domain_mapping_name> --ref <ksvc:service_name:service_namespace>

    명령 예

    $ kn domain create example-domain-map --ref ksvc:example-service:example-namespace

  • 도메인을 Knative 경로에 매핑합니다.

    $ kn domain create <domain_mapping_name> --ref <kroute:route_name>

    명령 예

    $ kn domain create example-domain-map --ref kroute:example-route

4.7.4. 개발자 관점을 사용한 도메인 매핑

보유한 사용자 정의 도메인 이름을 Knative 서비스에 매핑하여 Knative 서비스의 도메인을 사용자 지정할 수 있습니다. OpenShift Container Platform 웹 콘솔의 개발자 화면을 사용하여 DomainMapping CR(사용자 정의 리소스)을 Knative 서비스에 매핑할 수 있습니다.

4.7.4.1. 개발자 화면을 사용하여 사용자 정의 도메인을 서비스에 매핑

사전 요구 사항

  • 웹 콘솔에 로그인했습니다.
  • 개발자 화면에 있습니다.
  • OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다. 이는 클러스터 관리자가 완료해야 합니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
  • Knative 서비스를 생성했으며 해당 서비스에 매핑할 사용자 정의 도메인을 제어할 수 있습니다.

    참고

    사용자 정의 도메인에서 OpenShift Container Platform 클러스터의 IP 주소를 참조해야 합니다.

절차

  1. 토폴로지 페이지로 이동합니다.
  2. 도메인에 매핑할 서비스를 마우스 오른쪽 버튼으로 클릭하고 서비스 이름이 포함된 Edit (편집) 옵션을 선택합니다. 예를 들어 서비스 이름이 example-service 인 경우 Edit example-service 옵션을 선택합니다.
  3. 고급 옵션 섹션에서 고급 라우팅 옵션 표시를 클릭합니다.

    1. 서비스에 매핑할 도메인 매핑 CR이 이미 존재하는 경우 도메인 매핑 목록에서 선택할 수 있습니다.
    2. 새 도메인 매핑 CR을 생성하려면 도메인 이름을 상자에 입력하고 생성 옵션을 선택합니다. 예를 들어 example.com 을 입력하면 Create "example.com" 옵션이 있습니다.
  4. 저장을 클릭하여 서비스에 대한 변경 사항을 저장합니다.

검증

  1. 토폴로지 페이지로 이동합니다.
  2. 생성한 서비스를 클릭합니다.
  3. 서비스 정보 창의 Resources 탭에서 도메인 매핑 아래에 나열된 서비스에 매핑한 도메인을 볼 수 있습니다.

4.7.5. 관리자 관점을 사용한 도메인 매핑

OpenShift Container Platform 웹 콘솔의 개발자 화면으로 전환하거나 Knative(kn) CLI 또는 YAML 파일을 사용하지 않으려면 OpenShift Container Platform 웹 콘솔의 관리자 화면을 사용할 수 있습니다.

4.7.5.1. 관리자 화면을 사용하여 사용자 정의 도메인을 서비스에 매핑

Knative 서비스에는 클러스터 구성에 따라 기본 도메인 이름이 자동으로 할당됩니다. 예를 들면 &lt ;service_name>-<namespace>.example.com 입니다. 보유한 사용자 정의 도메인 이름을 Knative 서비스에 매핑하여 Knative 서비스의 도메인을 사용자 지정할 수 있습니다.

서비스에 대한 DomainMapping 리소스를 생성하여 이 작업을 수행할 수 있습니다. 또한 여러 개의 DomainMapping 리소스를 생성하여 여러 도메인에 매핑하고 하위 도메인을 단일 서비스에 매핑할 수도 있습니다.

클러스터 관리자 권한이 있는 경우 OpenShift Container Platform 웹 콘솔의 관리자 화면을 사용하여 DomainMapping CR(사용자 정의 리소스)을 생성할 수 있습니다.

사전 요구 사항

  • 웹 콘솔에 로그인했습니다.
  • 관리자 화면에 있습니다.
  • OpenShift Serverless Operator를 설치했습니다.
  • Knative Serving이 설치되어 있습니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
  • Knative 서비스를 생성했으며 해당 서비스에 매핑할 사용자 정의 도메인을 제어할 수 있습니다.

    참고

    사용자 정의 도메인에서 OpenShift Container Platform 클러스터의 IP 주소를 참조해야 합니다.

절차

  1. CustomResourceDefinitions 로 이동하여 검색 상자를 사용하여 DomainMapping CRD(사용자 정의 리소스 정의)를 찾습니다.
  2. DomainMapping CRD를 클릭한 다음 Instances (인스턴스) 탭으로 이동합니다.
  3. Create DomainMapping 을 클릭합니다.
  4. 인스턴스에 대한 다음 정보를 포함하도록 DomainMapping CR의 YAML을 수정합니다.

    apiVersion: serving.knative.dev/v1alpha1
    kind: DomainMapping
    metadata:
     name: <domain_name> 1
     namespace: <namespace> 2
    spec:
     ref:
       name: <target_name> 3
       kind: <target_type> 4
       apiVersion: serving.knative.dev/v1
    1
    대상 CR에 매핑할 사용자 정의 도메인 이름입니다.
    2
    DomainMapping CR 및 대상 CR의 네임스페이스입니다.
    3
    사용자 정의 도메인에 매핑할 대상 CR의 이름입니다.
    4
    사용자 지정 도메인에 매핑되는 CR 유형입니다.

    Knative 서비스에 대한 도메인 매핑 예

    apiVersion: serving.knative.dev/v1alpha1
    kind: DomainMapping
    metadata:
     name: custom-ksvc-domain.example.com
     namespace: default
    spec:
     ref:
       name: example-service
       kind: Service
       apiVersion: serving.knative.dev/v1

검증

  • curl 요청을 사용하여 사용자 정의 도메인에 액세스합니다. 예를 들면 다음과 같습니다.

    명령 예

    $ curl custom-ksvc-domain.example.com

    출력 예

    Hello OpenShift!

4.7.6. TLS 인증서를 사용하여 매핑된 서비스 보안

4.7.6.1. TLS 인증서를 사용하여 사용자 정의 도메인으로 서비스 보안

Knative 서비스의 사용자 정의 도메인을 구성한 후 TLS 인증서를 사용하여 매핑된 서비스를 보호할 수 있습니다. 이렇게 하려면 Kubernetes TLS 시크릿을 생성한 다음 생성한 TLS 시크릿을 사용하도록 DomainMapping CR을 업데이트해야 합니다.

참고

Ingress에 net-istio 를 사용하고 security.dataPlane.mtls: true 를 사용하여 SMCP를 통해 mTLS를 활성화하는 경우 Service Mesh는 OpenShift Serverless에 대한 DomainMapping 을 허용하지 않는 *.local 호스트에 대한 DestinationRule 을 배포합니다.

이 문제를 해결하려면 security.dataPlane.mtls: true 를 사용하는 대신 PeerAuthentication 을 배포하여 mTLS를 활성화합니다.

사전 요구 사항

  • Knative 서비스의 사용자 정의 도메인을 구성하고 작동 중인 DomainMapping CR이 있습니다.
  • 인증 기관 공급자 또는 자체 서명된 인증서의 TLS 인증서가 있습니다.
  • 인증 기관 공급자 또는 자체 서명된 인증서에서 인증서 및 파일을 가져왔습니다.
  • OpenShift CLI(oc)를 설치합니다.

절차

  1. Kubernetes TLS 시크릿을 생성합니다.

    $ oc create secret tls <tls_secret_name> --cert=<path_to_certificate_file> --key=<path_to_key_file>
  2. Red Hat OpenShift Service Mesh를 OpenShift Serverless 설치의 수신으로 사용하는 경우 다음을 사용하여 Kubernetes TLS 시크릿에 레이블을 지정합니다.

    “networking.internal.knative.dev/certificate-uid": “<value>”

    cert-manager와 같은 타사 시크릿 공급자를 사용하는 경우, Kubernetes TLS 보안에 자동으로 레이블을 지정하도록 시크릿 관리자를 구성할 수 있습니다. cert-manager 사용자는 제공된 보안 템플릿을 사용하여 올바른 레이블이 있는 보안을 자동으로 생성할 수 있습니다. 이 경우 시크릿 필터링은 키를 기반으로만 수행되지만 이 값은 시크릿에 포함된 인증서 ID와 같은 유용한 정보를 제공할 수 있습니다.

    참고

    cert-manager Operator for Red Hat OpenShift는 기술 프리뷰 기능입니다. 자세한 내용은 Red Hat OpenShift용 cert-manager Operator 설치 설명서를 참조하십시오.

  3. 생성한 TLS 보안을 사용하도록 DomainMapping CR을 업데이트합니다.

    apiVersion: serving.knative.dev/v1alpha1
    kind: DomainMapping
    metadata:
      name: <domain_name>
      namespace: <namespace>
    spec:
      ref:
        name: <service_name>
        kind: Service
        apiVersion: serving.knative.dev/v1
    # TLS block specifies the secret to be used
      tls:
        secretName: <tls_secret_name>

검증

  1. DomainMapping CR 상태가 True 인지 확인하고 출력의 URL 열에 스키마 https 를 사용하여 매핑된 도메인이 표시되는지 확인합니다.

    $ oc get domainmapping <domain_name>

    출력 예

    NAME                      URL                               READY   REASON
    example.com               https://example.com               True

  2. 선택 사항: 서비스가 공개적으로 노출되면 다음 명령을 실행하여 서비스를 사용할 수 있는지 확인합니다.

    $ curl https://<domain_name>

    인증서가 자체 서명된 경우 -k 플래그를 curl 명령에 추가하여 확인을 건너뜁니다.

4.8. Knative 서비스의 고가용성 구성

4.8.1. Knative 서비스의 고가용성

고가용성(HA)은 중단이 발생하는 경우 API가 작동하도록 하는 데 도움이 되는 Kubernetes API의 표준 기능입니다. HA 배포에서 활성 컨트롤러가 충돌하거나 삭제되면 다른 컨트롤러를 쉽게 사용할 수 있습니다. 이 컨트롤러는 현재 사용할 수 없는 컨트롤러에서 서비스하고 있는 API를 대신 처리합니다.

OpenShift Serverless의 HA는 Knative Serving 또는 Eventing 컨트롤 플레인을 설치하면 기본적으로 활성화되는 리더 선택을 통해 사용할 수 있습니다. 리더 선택 HA 패턴을 사용하는 경우에는 요구하기 전에 컨트롤러의 인스턴스가 이미 예약되어 클러스터 내에서 실행됩니다. 이러한 컨트롤러 인스턴스는 리더 선택 잠금이라는 공유 리소스를 사용하기 위해 경쟁합니다. 특정 시점에 리더 선택 잠금 리소스에 액세스할 수 있는 컨트롤러의 인스턴스를 리더라고 합니다.

4.8.2. Knative 서비스의 고가용성

HA(고가용성)는 기본적으로 Knative Serving activator, autoscaler ,autoscaler -hpa,controller,webhook,kourier-control, kourier-gateway 구성 요소에 기본적으로 사용할 수 있습니다. 이 구성 요소는 기본적으로 각각 두 개의 복제본을 보유하도록 구성되어 있습니다. KnativeServing CR(사용자 정의 리소스)의 spec.high-availability.replicas 값을 수정하여 이러한 구성 요소의 복제본 수를 변경할 수 있습니다.

4.8.2.1. Knative Serving의 고가용성 복제본 구성

적격 배포 리소스에 대한 최소 3개의 복제본을 지정하려면 사용자 정의 리소스의 spec.high-availability.replicas 필드 값을 3 으로 설정합니다.

사전 요구 사항

  • 클러스터 관리자 액세스 권한이 있는 OpenShift Container Platform 계정에 액세스할 수 있습니다.
  • OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.

절차

  1. OpenShift Container Platform 웹 콘솔의 관리자 화면에서 OperatorHub설치된 Operator로 이동합니다.
  2. knative-serving 네임스페이스를 선택합니다.
  3. OpenShift Serverless Operator의 제공되는 API 목록에서 Knative Serving을 클릭하여 Knative Serving 탭으로 이동합니다.
  4. knative-serving을 클릭한 다음 knative-serving 페이지의 YAML 탭으로 이동합니다.

    Knative Serving YAML
  5. KnativeServing CR의 복제본 수를 수정합니다.

    YAML의 예

    apiVersion: operator.knative.dev/v1alpha1
    kind: KnativeServing
    metadata:
      name: knative-serving
      namespace: knative-serving
    spec:
      high-availability:
        replicas: 3

5장. Eventing

5.1. Knative Eventing

OpenShift Container Platform에서 Knative Eventing을 사용하면 개발자가 서버리스 애플리케이션에 이벤트 중심 아키텍처를 사용할 수 있습니다. 이벤트 중심 아키텍처는 이벤트 생산자와 이벤트 소비자 간 분리된 관계에 대한 개념을 기반으로 합니다.

이벤트 프로듀서는 이벤트를 생성하고 이벤트 싱크 또는 소비자를 통해 이벤트를 수신합니다. Knative Eventing은 표준 HTTP POST 요청을 사용하여 이벤트 프로듀서와 싱크 사이에서 이벤트를 전송하고 수신합니다. 이러한 이벤트는 이벤트를 모든 프로그래밍 언어로 생성, 구문 분석, 전송, 수신할 수 있도록 CloudEvents 사양을 준수합니다.

Knative Eventing에서는 다음 유스 케이스를 지원합니다.

소비자를 생성하지 않고 이벤트 게시
이벤트를 HTTP POST에 브로커로 보내고 바인딩을 사용하여 이벤트를 생성하는 애플리케이션에서 대상 구성을 분리할 수 있습니다.
게시자를 생성하지 않고 이벤트 사용
트리거를 사용하면 이벤트 특성을 기반으로 브로커의 이벤트를 사용할 수 있습니다. 애플리케이션은 이벤트를 HTTP POST로 수신합니다.

Knative Eventing에서는 다양한 싱크 유형으로 전달할 수 있도록 다음과 같이 여러 Kubernetes 리소스에서 구현할 수 있는 일반 인터페이스를 정의합니다.

주소 지정 가능 리소스
HTTP를 통해 전달되는 이벤트를 이벤트의 status.address.url 필드에 정의된 주소로 수신 및 승인할 수 있습니다. Kubernetes Service 리소스도 주소 지정 가능 인터페이스의 조건을 충족합니다.
호출 가능한 리소스
HTTP를 통해 전달되는 이벤트를 수신하고 변환하여 HTTP 응답 페이로드에서 0 또는 1개의 새 이벤트를 반환합니다. 반환된 이벤트는 외부 이벤트 소스의 이벤트를 처리하는 것과 동일한 방식으로 추가로 처리할 수 있습니다.

5.2. 이벤트 소스

5.2.1. 이벤트 소스

Knative 이벤트 소스는 클라우드 이벤트를 생성하거나 가져오는 Kubernetes 오브젝트일 수 있으며 해당 이벤트를 싱크 라고 하는 다른 끝점으로 중계할 수 있습니다. 이벤트에 대응하는 분산 시스템을 개발하는 데 소싱 이벤트가 중요합니다.

OpenShift Container Platform 웹 콘솔의 개발자 화면, Knative(kn) CLI 또는 YAML 파일을 적용하여 Knative 이벤트 소스를 생성 및 관리할 수 있습니다.

현재 OpenShift Serverless에서는 다음 이벤트 소스 유형을 지원합니다.

API 서버 소스
Kubernetes API 서버 이벤트를 Knative로 가져옵니다. API 서버 소스는 Kubernetes 리소스가 생성, 업데이트 또는 삭제될 때마다 새 이벤트를 보냅니다.
ping 소스
지정된 cron 일정에 고정된 페이로드를 사용하여 이벤트를 생성합니다.
Kafka 이벤트 소스
Kafka 클러스터를 이벤트 소스로 싱크에 연결합니다.

사용자 지정 이벤트 소스를 생성할 수도 있습니다.

5.2.2. 관리자 관점에서 이벤트 소스

이벤트에 대응하는 분산 시스템을 개발하는 데 소싱 이벤트가 중요합니다.

5.2.2.1. 관리자 화면을 사용하여 이벤트 소스 생성

Knative 이벤트 소스 는 클라우드 이벤트를 생성하거나 가져오는 모든 Kubernetes 오브젝트일 수 있으며 이러한 이벤트를 싱크 라는 다른 끝점으로 릴레이할 수 있습니다.

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Eventing이 OpenShift Container Platform 클러스터에 설치되어 있습니다.
  • 웹 콘솔에 로그인한 후 관리자 화면에 있습니다.
  • OpenShift Container Platform에 대한 클러스터 관리자 권한이 있습니다.

절차

  1. OpenShift Container Platform 웹 콘솔의 관리자 화면에서 ServerlessEventing으로 이동합니다.
  2. 생성 목록에서 이벤트 소스를 선택합니다. 그러면 이벤트 소스 페이지로 이동합니다.
  3. 생성할 이벤트 소스 유형을 선택합니다.

5.2.3. API 서버 소스 생성

API 서버 소스는 Knative 서비스와 같은 이벤트 싱크를 Kubernetes API 서버에 연결하는 데 사용할 수 있는 이벤트 소스입니다. API 서버 소스는 Kubernetes 이벤트를 조사하고 해당 이벤트를 Knative Eventing 브로커에 전달합니다.

5.2.3.1. 웹 콘솔을 사용하여 API 서버 소스 생성

Knative Eventing이 클러스터에 설치되면 웹 콘솔을 사용하여 API 서버 소스를 생성할 수 있습니다. OpenShift Container Platform 웹 콘솔을 사용하면 이벤트 소스를 생성하기 위해 간소화되고 직관적인 사용자 인터페이스를 제공합니다.

사전 요구 사항

  • OpenShift Container Platform 웹 콘솔에 로그인했습니다.
  • OpenShift Serverless Operator 및 Knative Eventing이 클러스터에 설치되어 있습니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
  • OpenShift CLI(oc)가 설치되어 있습니다.
절차

기존 서비스 계정을 다시 사용하려면 새 리소스를 생성하는 대신 필요한 권한을 포함하도록 기존 ServiceAccount 리소스를 수정할 수 있습니다.

  1. 이벤트 소스에 대한 서비스 계정, 역할, 역할 바인딩을 YAML 파일로 만듭니다.

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: events-sa
      namespace: default 1
    
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: event-watcher
      namespace: default 2
    rules:
      - apiGroups:
          - ""
        resources:
          - events
        verbs:
          - get
          - list
          - watch
    
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: k8s-ra-event-watcher
      namespace: default 3
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: Role
      name: event-watcher
    subjects:
      - kind: ServiceAccount
        name: events-sa
        namespace: default 4
    1 2 3 4
    이 네임스페이스를 이벤트 소스 설치를 위해 선택한 네임스페이스로 변경합니다.
  2. YAML 파일을 적용합니다.

    $ oc apply -f <filename>
  3. 개발자 화면에서 +추가이벤트 소스로 이동합니다. 이벤트 소스 페이지가 표시됩니다.
  4. 선택 사항: 이벤트 소스에 대한 공급자가 여러 개인 경우 공급자 목록에서 필요한 공급자를 선택하여 해당 공급자의 사용 가능한 이벤트 소스를 필터링합니다.
  5. ApiServerSource를 선택한 다음 이벤트 소스 생성을 클릭합니다. 이벤트 소스 생성 페이지가 표시됩니다.
  6. 양식 보기 또는 YAML 보기를 사용하여 ApiServerSource 설정을 구성합니다.

    참고

    양식 보기YAML 보기를 전환할 수 있습니다. 다른 보기로 전환해도 데이터는 유지됩니다.

    1. APIVERSION으로 v1을, KINDEvent를 입력합니다.
    2. 생성한 서비스 계정의 서비스 계정 이름을 선택합니다.
    3. 이벤트 소스로 싱크를 선택합니다. 싱크는 채널, 브로커 또는 서비스와 같은 리소스이거나 URI일 수 있습니다.
  7. 생성을 클릭합니다.

검증

  • API 서버 소스를 생성한 후에는 토폴로지 보기에서 싱크된 서비스에 연결된 것을 확인할 수 있습니다.

    ApiServerSource 토폴로지 보기
참고

URI 싱크를 사용하는 경우 URI 싱크URI 편집을 마우스 오른쪽 버튼으로 클릭하여 URI를 수정합니다.

API 서버 소스 삭제

  1. 토폴로지 보기로 이동합니다.
  2. API 서버 소스를 마우스 오른쪽 버튼으로 클릭하고 ApiServerSource 삭제를 선택합니다.

    ApiServerSource 삭제

5.2.3.2. Knative CLI를 사용하여 API 서버 소스 생성

kn source apiserver create 명령을 사용하여 kn CLI를 사용하여 API 서버 소스를 생성할 수 있습니다. kn CLI를 사용하여 API 서버 소스를 생성하면 YAML 파일을 직접 수정하는 것보다 더 간소화되고 직관적인 사용자 인터페이스를 제공합니다.

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Eventing이 클러스터에 설치되어 있습니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
  • OpenShift CLI(oc)가 설치되어 있습니다.
  • Knative(kn) CLI가 설치되어 있습니다.
절차

기존 서비스 계정을 다시 사용하려면 새 리소스를 생성하는 대신 필요한 권한을 포함하도록 기존 ServiceAccount 리소스를 수정할 수 있습니다.

  1. 이벤트 소스에 대한 서비스 계정, 역할, 역할 바인딩을 YAML 파일로 만듭니다.

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: events-sa
      namespace: default 1
    
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: event-watcher
      namespace: default 2
    rules:
      - apiGroups:
          - ""
        resources:
          - events
        verbs:
          - get
          - list
          - watch
    
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: k8s-ra-event-watcher
      namespace: default 3
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: Role
      name: event-watcher
    subjects:
      - kind: ServiceAccount
        name: events-sa
        namespace: default 4
    1 2 3 4
    이 네임스페이스를 이벤트 소스 설치를 위해 선택한 네임스페이스로 변경합니다.
  2. YAML 파일을 적용합니다.

    $ oc apply -f <filename>
  3. 이벤트 싱크가 있는 API 서버 소스를 생성합니다. 다음 예에서 sink는 브로커입니다.

    $ kn source apiserver create <event_source_name> --sink broker:<broker_name> --resource "event:v1" --service-account <service_account_name> --mode Resource
  4. API 서버 소스가 올바르게 설정되었는지 확인하려면 수신되는 메시지를 로그로 덤프하는 Knative 서비스를 생성합니다.

    $ kn service create <service_name> --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest
  5. 브로커를 이벤트 싱크로 사용한 경우 기본 브로커에서 서비스로 이벤트를 필터링하는 트리거를 생성합니다.

    $ kn trigger create <trigger_name> --sink ksvc:<service_name>
  6. 기본 네임스페이스에서 Pod를 시작하여 이벤트를 생성합니다.

    $ oc create deployment hello-node --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest
  7. 생성된 출력을 다음 명령으로 검사하여 컨트롤러가 올바르게 매핑되는지 확인합니다.

    $ kn source apiserver describe <source_name>

    출력 예

    Name:                mysource
    Namespace:           default
    Annotations:         sources.knative.dev/creator=developer, sources.knative.dev/lastModifier=developer
    Age:                 3m
    ServiceAccountName:  events-sa
    Mode:                Resource
    Sink:
      Name:       default
      Namespace:  default
      Kind:       Broker (eventing.knative.dev/v1)
    Resources:
      Kind:        event (v1)
      Controller:  false
    Conditions:
      OK TYPE                     AGE REASON
      ++ Ready                     3m
      ++ Deployed                  3m
      ++ SinkProvided              3m
      ++ SufficientPermissions     3m
      ++ EventTypesProvided        3m

검증

메시지 덤퍼 기능 로그를 확인하면 Kubernetes 이벤트가 Knative로 전송되었는지 확인할 수 있습니다.

  1. Pod를 가져옵니다.

    $ oc get pods
  2. Pod의 메시지 덤퍼 기능 로그를 확인합니다.

    $ oc logs $(oc get pod -o name | grep event-display) -c user-container

    출력 예

    ☁️  cloudevents.Event
    Validation: valid
    Context Attributes,
      specversion: 1.0
      type: dev.knative.apiserver.resource.update
      datacontenttype: application/json
      ...
    Data,
      {
        "apiVersion": "v1",
        "involvedObject": {
          "apiVersion": "v1",
          "fieldPath": "spec.containers{hello-node}",
          "kind": "Pod",
          "name": "hello-node",
          "namespace": "default",
           .....
        },
        "kind": "Event",
        "message": "Started container",
        "metadata": {
          "name": "hello-node.159d7608e3a3572c",
          "namespace": "default",
          ....
        },
        "reason": "Started",
        ...
      }

API 서버 소스 삭제

  1. 트리거를 삭제합니다.

    $ kn trigger delete <trigger_name>
  2. 이벤트 소스를 삭제합니다.

    $ kn source apiserver delete <source_name>
  3. 서비스 계정, 클러스터 역할, 클러스터 바인딩을 삭제합니다.

    $ oc delete -f authentication.yaml
5.2.3.2.1. Knative CLI 싱크 플래그

Knative(kn) CLI를 사용하여 이벤트 소스를 생성할 때 --sink 플래그를 사용하여 이벤트가 해당 리소스에서 로 전송되는 싱크를 지정할 수 있습니다. 싱크는 다른 리소스에서 들어오는 이벤트를 수신할 수 있는 주소 지정 가능 또는 호출 가능한 리소스일 수 있습니다.

다음 예제에서는 싱크로 서비스 http://event-display.svc.cluster.local 를 사용하는 싱크 바인딩을 생성합니다.

sink 플래그를 사용하는 명령의 예

$ kn source binding create bind-heartbeat \
  --namespace sinkbinding-example \
  --subject "Job:batch/v1:app=heartbeat-cron" \
  --sink http://event-display.svc.cluster.local \ 1
  --ce-override "sink=bound"

1
http://event-display.svc.cluster.localsvc 는 싱크가 Knative 서비스인지 확인합니다. 기타 기본 싱크 접두사에는 channel, 및 broker가 포함됩니다.

5.2.3.3. YAML 파일을 사용하여 API 서버 소스 생성

YAML 파일을 사용하여 Knative 리소스를 생성하면 선언적 API를 사용하므로 이벤트 소스를 선언적으로 및 재현 가능한 방식으로 설명할 수 있습니다. YAML을 사용하여 API 서버 소스를 생성하려면 ApiServerSource 오브젝트를 정의하는 YAML 파일을 생성한 다음 oc apply 명령을 사용하여 적용해야 합니다.

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Eventing이 클러스터에 설치되어 있습니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
  • API 서버 소스 YAML 파일에 정의된 것과 동일한 네임스페이스에 default 브로커를 생성했습니다.
  • OpenShift CLI(oc)를 설치합니다.
절차

기존 서비스 계정을 다시 사용하려면 새 리소스를 생성하는 대신 필요한 권한을 포함하도록 기존 ServiceAccount 리소스를 수정할 수 있습니다.

  1. 이벤트 소스에 대한 서비스 계정, 역할, 역할 바인딩을 YAML 파일로 만듭니다.

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: events-sa
      namespace: default 1
    
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: event-watcher
      namespace: default 2
    rules:
      - apiGroups:
          - ""
        resources:
          - events
        verbs:
          - get
          - list
          - watch
    
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: k8s-ra-event-watcher
      namespace: default 3
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: Role
      name: event-watcher
    subjects:
      - kind: ServiceAccount
        name: events-sa
        namespace: default 4
    1 2 3 4
    이 네임스페이스를 이벤트 소스 설치를 위해 선택한 네임스페이스로 변경합니다.
  2. YAML 파일을 적용합니다.

    $ oc apply -f <filename>
  3. API 서버 소스를 YAML 파일로 만듭니다.

    apiVersion: sources.knative.dev/v1alpha1
    kind: ApiServerSource
    metadata:
      name: testevents
    spec:
      serviceAccountName: events-sa
      mode: Resource
      resources:
        - apiVersion: v1
          kind: Event
      sink:
        ref:
          apiVersion: eventing.knative.dev/v1
          kind: Broker
          name: default
  4. ApiServerSource YAML 파일을 적용합니다.

    $ oc apply -f <filename>
  5. API 서버 소스가 올바르게 설정되었는지 확인하려면 수신되는 메시지를 로그로 덤프하는 Knative 서비스를 YAML 파일로 생성합니다.

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: event-display
      namespace: default
    spec:
      template:
        spec:
          containers:
            - image: quay.io/openshift-knative/knative-eventing-sources-event-display:latest
  6. Service YAML 파일을 적용합니다.

    $ oc apply -f <filename>
  7. default 브로커에서 이전 단계에서 생성된 서비스로 이벤트를 필터링하는 YAML 파일로 Trigger 오브젝트를 생성합니다.

    apiVersion: eventing.knative.dev/v1
    kind: Trigger
    metadata:
      name: event-display-trigger
      namespace: default
    spec:
      broker: default
      subscriber:
        ref:
          apiVersion: serving.knative.dev/v1
          kind: Service
          name: event-display
  8. Trigger YAML 파일을 적용합니다.

    $ oc apply -f <filename>
  9. 기본 네임스페이스에서 Pod를 시작하여 이벤트를 생성합니다.

    $ oc create deployment hello-node --image=quay.io/openshift-knative/knative-eventing-sources-event-display
  10. 다음 명령을 입력하고 출력을 검사하여 컨트롤러가 올바르게 매핑되는지 확인합니다.

    $ oc get apiserversource.sources.knative.dev testevents -o yaml

    출력 예

    apiVersion: sources.knative.dev/v1alpha1
    kind: ApiServerSource
    metadata:
      annotations:
      creationTimestamp: "2020-04-07T17:24:54Z"
      generation: 1
      name: testevents
      namespace: default
      resourceVersion: "62868"
      selfLink: /apis/sources.knative.dev/v1alpha1/namespaces/default/apiserversources/testevents2
      uid: 1603d863-bb06-4d1c-b371-f580b4db99fa
    spec:
      mode: Resource
      resources:
      - apiVersion: v1
        controller: false
        controllerSelector:
          apiVersion: ""
          kind: ""
          name: ""
          uid: ""
        kind: Event
        labelSelector: {}
      serviceAccountName: events-sa
      sink:
        ref:
          apiVersion: eventing.knative.dev/v1
          kind: Broker
          name: default

검증

Kubernetes 이벤트가 Knative로 전송되었는지 확인하려면 메시지 덤퍼 기능 로그를 확인하면 됩니다.

  1. 다음 명령을 입력하여 pod를 가져옵니다.

    $ oc get pods
  2. 다음 명령을 입력하여 pod 메시지 덤퍼 기능 로그를 표시합니다.

    $ oc logs $(oc get pod -o name | grep event-display) -c user-container

    출력 예

    ☁️  cloudevents.Event
    Validation: valid
    Context Attributes,
      specversion: 1.0
      type: dev.knative.apiserver.resource.update
      datacontenttype: application/json
      ...
    Data,
      {
        "apiVersion": "v1",
        "involvedObject": {
          "apiVersion": "v1",
          "fieldPath": "spec.containers{hello-node}",
          "kind": "Pod",
          "name": "hello-node",
          "namespace": "default",
           .....
        },
        "kind": "Event",
        "message": "Started container",
        "metadata": {
          "name": "hello-node.159d7608e3a3572c",
          "namespace": "default",
          ....
        },
        "reason": "Started",
        ...
      }

API 서버 소스 삭제

  1. 트리거를 삭제합니다.

    $ oc delete -f trigger.yaml
  2. 이벤트 소스를 삭제합니다.

    $ oc delete -f k8s-events.yaml
  3. 서비스 계정, 클러스터 역할, 클러스터 바인딩을 삭제합니다.

    $ oc delete -f authentication.yaml

5.2.4. ping 소스 생성

ping 소스는 이벤트 소비자에게 주기적으로 일정한 페이로드가 있는 ping 이벤트를 보내는 데 사용할 수 있는 이벤트 소스입니다. ping 소스를 사용하면 타이머와 유사하게 전송 이벤트를 예약할 수 있습니다.

5.2.4.1. 웹 콘솔을 사용하여 ping 소스 생성

Knative Eventing이 클러스터에 설치되면 웹 콘솔을 사용하여 ping 소스를 생성할 수 있습니다. OpenShift Container Platform 웹 콘솔을 사용하면 이벤트 소스를 생성하기 위해 간소화되고 직관적인 사용자 인터페이스를 제공합니다.

사전 요구 사항

  • OpenShift Container Platform 웹 콘솔에 로그인했습니다.
  • OpenShift Serverless Operator, Knative Serving 및 Knative Eventing이 클러스터에 설치되어 있습니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.

절차

  1. ping 소스가 작동하는지 확인하려면 수신 메시지를 서비스 로그에 덤프하는 간단한 Knative 서비스를 생성합니다.

    1. 개발자 화면에서 +추가YAML로 이동합니다.
    2. 예제 YAML을 복사합니다.

      apiVersion: serving.knative.dev/v1
      kind: Service
      metadata:
        name: event-display
      spec:
        template:
          spec:
            containers:
              - image: quay.io/openshift-knative/knative-eventing-sources-event-display:latest
    3. 생성을 클릭합니다.
  2. 이전 단계에서 생성한 서비스와 동일한 네임스페이스 또는 이벤트를 보낼 다른 싱크에 ping 소스를 생성합니다.

    1. 개발자 화면에서 +추가이벤트 소스로 이동합니다. 이벤트 소스 페이지가 표시됩니다.
    2. 선택 사항: 이벤트 소스에 대한 공급자가 여러 개인 경우 공급자 목록에서 필요한 공급자를 선택하여 해당 공급자의 사용 가능한 이벤트 소스를 필터링합니다.
    3. Ping 소스를 선택한 다음 이벤트 소스 생성을 클릭합니다. 이벤트 소스 생성 페이지가 표시됩니다.

      참고

      양식 보기 또는 YAML 보기를 사용하여 PingSource 설정을 구성하고 보기 간에 전환할 수 있습니다. 다른 보기로 전환해도 데이터는 유지됩니다.

    4. 스케줄 값을 입력합니다. 이 예에서 값은 */2 * * * *이며, 2분마다 메시지를 전송하는 PingSource를 생성합니다.
    5. 선택 사항: 메시지 페이로드에 해당하는 데이터 값을 입력할 수 있습니다.
    6. 싱크를 선택합니다. 리소스 또는 URI일 수 있습니다. 이 예제에서는 이전 단계에서 생성한 event-display 서비스를 리소스 싱크로 사용합니다.
    7. 생성을 클릭합니다.

검증

토폴로지 페이지를 확인하여 ping 소스가 생성되었고 싱크에 연결되어 있는지 확인할 수 있습니다.

  1. 개발자 화면에서 토폴로지로 이동합니다.
  2. ping 소스 및 싱크를 확인합니다.

    토폴로지 보기에서 ping 소스 및 서비스 보기

ping 소스 삭제

  1. 토폴로지 보기로 이동합니다.
  2. API 서버 소스를 마우스 오른쪽 버튼으로 클릭하고 Ping Source 를 선택합니다.

5.2.4.2. Knative CLI를 사용하여 ping 소스 생성

kn 소스 ping create 명령을 사용하여 Knative(kn) CLI를 사용하여 ping 소스를 생성할 수 있습니다. Knative CLI를 사용하여 이벤트 소스를 생성하면 YAML 파일을 직접 수정하는 것보다 더 간소화되고 직관적인 사용자 인터페이스를 제공합니다.

사전 요구 사항

  • OpenShift Serverless Operator, Knative Serving 및 Knative Eventing이 클러스터에 설치되어 있습니다.
  • Knative(kn) CLI가 설치되어 있습니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
  • 선택 사항: 이 프로세스에 대한 확인 단계를 사용하려면 OpenShift CLI(oc)를 설치합니다.

절차

  1. ping 소스가 작동하는지 확인하려면 수신 메시지를 서비스 로그에 덤프하는 간단한 Knative 서비스를 생성합니다.

    $ kn service create event-display \
        --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest
  2. 요청할 각 ping 이벤트 세트에 대해 이벤트 소비자와 동일한 네임스페이스에 ping 소스를 생성합니다.

    $ kn source ping create test-ping-source \
        --schedule "*/2 * * * *" \
        --data '{"message": "Hello world!"}' \
        --sink ksvc:event-display
  3. 다음 명령을 입력하고 출력을 검사하여 컨트롤러가 올바르게 매핑되는지 확인합니다.

    $ kn source ping describe test-ping-source

    출력 예

    Name:         test-ping-source
    Namespace:    default
    Annotations:  sources.knative.dev/creator=developer, sources.knative.dev/lastModifier=developer
    Age:          15s
    Schedule:     */2 * * * *
    Data:         {"message": "Hello world!"}
    
    Sink:
      Name:       event-display
      Namespace:  default
      Resource:   Service (serving.knative.dev/v1)
    
    Conditions:
      OK TYPE                 AGE REASON
      ++ Ready                 8s
      ++ Deployed              8s
      ++ SinkProvided         15s
      ++ ValidSchedule        15s
      ++ EventTypeProvided    15s
      ++ ResourcesCorrect     15s

검증

싱크 Pod의 로그를 보면 Kubernetes 이벤트가 Knative 이벤트 싱크로 전송되었는지 확인할 수 있습니다.

Knative 서비스는 기본적으로 60초 이내에 트래픽이 수신되지 않으면 Pod를 종료합니다. 이 가이드에 표시된 예제에서는 2분마다 메시지를 전송하는 ping 소스를 생성하므로 새로 생성된 Pod에서 각 메시지를 관찰해야 합니다.

  1. 새 Pod가 생성되었는지 확인합니다.

    $ watch oc get pods
  2. Ctrl+C를 사용하여 Pod를 감시한 다음 생성한 Pod의 로그를 확인합니다.

    $ oc logs $(oc get pod -o name | grep event-display) -c user-container

    출력 예

    ☁️  cloudevents.Event
    Validation: valid
    Context Attributes,
      specversion: 1.0
      type: dev.knative.sources.ping
      source: /apis/v1/namespaces/default/pingsources/test-ping-source
      id: 99e4f4f6-08ff-4bff-acf1-47f61ded68c9
      time: 2020-04-07T16:16:00.000601161Z
      datacontenttype: application/json
    Data,
      {
        "message": "Hello world!"
      }

ping 소스 삭제

  • ping 소스를 삭제합니다.

    $ kn delete pingsources.sources.knative.dev <ping_source_name>
5.2.4.2.1. Knative CLI 싱크 플래그

Knative(kn) CLI를 사용하여 이벤트 소스를 생성할 때 --sink 플래그를 사용하여 이벤트가 해당 리소스에서 로 전송되는 싱크를 지정할 수 있습니다. 싱크는 다른 리소스에서 들어오는 이벤트를 수신할 수 있는 주소 지정 가능 또는 호출 가능한 리소스일 수 있습니다.

다음 예제에서는 싱크로 서비스 http://event-display.svc.cluster.local 를 사용하는 싱크 바인딩을 생성합니다.

sink 플래그를 사용하는 명령의 예

$ kn source binding create bind-heartbeat \
  --namespace sinkbinding-example \
  --subject "Job:batch/v1:app=heartbeat-cron" \
  --sink http://event-display.svc.cluster.local \ 1
  --ce-override "sink=bound"

1
http://event-display.svc.cluster.localsvc 는 싱크가 Knative 서비스인지 확인합니다. 기타 기본 싱크 접두사에는 channel, 및 broker가 포함됩니다.

5.2.4.3. YAML을 사용하여 ping 소스 생성

YAML 파일을 사용하여 Knative 리소스를 생성하면 선언적 API를 사용하므로 이벤트 소스를 선언적으로 및 재현 가능한 방식으로 설명할 수 있습니다. YAML을 사용하여 서버리스 ping 소스를 생성하려면 PingSource 오브젝트를 정의하는 YAML 파일을 생성한 다음 oc apply 를 사용하여 적용해야 합니다.

PingSource 개체의 예

apiVersion: sources.knative.dev/v1
kind: PingSource
metadata:
  name: test-ping-source
spec:
  schedule: "*/2 * * * *" 1
  data: '{"message": "Hello world!"}' 2
  sink: 3
    ref:
      apiVersion: serving.knative.dev/v1
      kind: Service
      name: event-display

1
CRON 표현식을 사용하여 지정한 이벤트 스케줄입니다.
2
JSON으로 인코딩된 데이터 문자열로 표시된 이벤트 메시지 본문입니다.
3
이는 이벤트 소비자에 대한 세부 정보입니다. 이 예제에서는 event-display라는 Knative 서비스를 사용하고 있습니다.

사전 요구 사항

  • OpenShift Serverless Operator, Knative Serving 및 Knative Eventing이 클러스터에 설치되어 있습니다.
  • OpenShift CLI(oc)를 설치합니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.

절차

  1. ping 소스가 작동하는지 확인하려면 수신 메시지를 서비스 로그에 덤프하는 간단한 Knative 서비스를 생성합니다.

    1. 서비스 YAML 파일을 생성합니다.

      apiVersion: serving.knative.dev/v1
      kind: Service
      metadata:
        name: event-display
      spec:
        template:
          spec:
            containers:
              - image: quay.io/openshift-knative/knative-eventing-sources-event-display:latest
    2. 서비스를 생성합니다.

      $ oc apply -f <filename>
  2. 요청할 각 ping 이벤트 세트에 대해 이벤트 소비자와 동일한 네임스페이스에 ping 소스를 생성합니다.

    1. ping 소스에 대한 YAML 파일을 생성합니다.

      apiVersion: sources.knative.dev/v1
      kind: PingSource
      metadata:
        name: test-ping-source
      spec:
        schedule: "*/2 * * * *"
        data: '{"message": "Hello world!"}'
        sink:
          ref:
            apiVersion: serving.knative.dev/v1
            kind: Service
            name: event-display
    2. ping 소스를 생성합니다.

      $ oc apply -f <filename>
  3. 다음 명령을 입력하여 컨트롤러가 올바르게 매핑되는지 확인합니다.

    $ oc get pingsource.sources.knative.dev <ping_source_name> -oyaml

    출력 예

    apiVersion: sources.knative.dev/v1
    kind: PingSource
    metadata:
      annotations:
        sources.knative.dev/creator: developer
        sources.knative.dev/lastModifier: developer
      creationTimestamp: "2020-04-07T16:11:14Z"
      generation: 1
      name: test-ping-source
      namespace: default
      resourceVersion: "55257"
      selfLink: /apis/sources.knative.dev/v1/namespaces/default/pingsources/test-ping-source
      uid: 3d80d50b-f8c7-4c1b-99f7-3ec00e0a8164
    spec:
      data: '{ value: "hello" }'
      schedule: '*/2 * * * *'
      sink:
        ref:
          apiVersion: serving.knative.dev/v1
          kind: Service
          name: event-display
          namespace: default

검증

싱크 Pod의 로그를 보면 Kubernetes 이벤트가 Knative 이벤트 싱크로 전송되었는지 확인할 수 있습니다.

Knative 서비스는 기본적으로 60초 이내에 트래픽이 수신되지 않으면 Pod를 종료합니다. 이 가이드에 표시된 예제에서는 2분마다 메시지를 전송하는 PingSource를 생성하므로 새로 생성된 Pod에서 각 메시지를 관찰해야 합니다.

  1. 새 Pod가 생성되었는지 확인합니다.

    $ watch oc get pods
  2. Ctrl+C를 사용하여 Pod를 감시한 다음 생성한 Pod의 로그를 확인합니다.

    $ oc logs $(oc get pod -o name | grep event-display) -c user-container

    출력 예

    ☁️  cloudevents.Event
    Validation: valid
    Context Attributes,
      specversion: 1.0
      type: dev.knative.sources.ping
      source: /apis/v1/namespaces/default/pingsources/test-ping-source
      id: 042ff529-240e-45ee-b40c-3a908129853e
      time: 2020-04-07T16:22:00.000791674Z
      datacontenttype: application/json
    Data,
      {
        "message": "Hello world!"
      }

ping 소스 삭제

  • ping 소스를 삭제합니다.

    $ oc delete -f <filename>

    명령 예

    $ oc delete -f ping-source.yaml

5.2.5. Kafka 소스

Apache Kafka 클러스터에서 이벤트를 읽고 이러한 이벤트를 싱크에 전달하는 Kafka 소스를 생성할 수 있습니다. OpenShift Container Platform 웹 콘솔,kn( kn) CLI를 사용하거나 YAML 파일로 직접 KafkaSource 오브젝트를 생성하고 OpenShift CLI(oc)를 사용하여 적용할 수 있습니다.

5.2.5.1. 웹 콘솔을 사용하여 Kafka 이벤트 소스 생성

Knative Kafka가 클러스터에 설치되면 웹 콘솔을 사용하여 Kafka 소스를 생성할 수 있습니다. OpenShift Container Platform 웹 콘솔을 사용하면 Kafka 소스를 생성하기 위해 간소화되고 직관적인 사용자 인터페이스를 제공합니다.

사전 요구 사항

  • OpenShift Serverless Operator, Knative Eventing, KnativeKafka 사용자 정의 리소스가 클러스터에 설치되어 있습니다.
  • 웹 콘솔에 로그인했습니다.
  • 가져오려는 Kafka 메시지를 생성하는 Red Hat AMQ Streams(Kafka) 클러스터에 액세스할 수 있습니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.

절차

  1. 개발자 화면에서 +추가 페이지로 이동하여 이벤트 소스를 선택합니다.
  2. 이벤트 소스 페이지의 유형 섹션에서 Kafka 소스를 선택합니다.
  3. Kafka 소스 설정을 구성합니다.

    1. 쉼표로 구분된 부트스트랩 서버 목록을 추가합니다.
    2. 쉼표로 구분된 주제 목록을 추가합니다.
    3. 소비자 그룹을 추가합니다.
    4. 생성한 서비스 계정의 서비스 계정 이름을 선택합니다.
    5. 이벤트 소스로 싱크를 선택합니다. 싱크는 채널, 브로커 또는 서비스와 같은 리소스이거나 URI일 수 있습니다.
    6. Kafka 이벤트 소스로 이름을 입력합니다.
  4. 생성을 클릭합니다.

검증

토폴로지 페이지를 확인하여 Kafka 이벤트 소스가 생성되었고 싱크에 연결되어 있는지 확인할 수 있습니다.

  1. 개발자 화면에서 토폴로지로 이동합니다.
  2. Kafka 이벤트 소스 및 싱크를 확인합니다.

    토폴로지 보기에서 Kafka 소스 및 서비스 보기

5.2.5.2. Knative CLI를 사용하여 Kafka 이벤트 소스 생성

kn source kafka create 명령을 사용하여 Knative(kn) CLI를 사용하여 Kafka 소스를 생성할 수 있습니다. Knative CLI를 사용하여 이벤트 소스를 생성하면 YAML 파일을 직접 수정하는 것보다 더 간소화되고 직관적인 사용자 인터페이스를 제공합니다.

사전 요구 사항

  • OpenShift Serverless Operator, Knative Eventing, Knative Serving, KnativeKafka 사용자 정의 리소스(CR가 클러스터에 설치되어 있습니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
  • 가져오려는 Kafka 메시지를 생성하는 Red Hat AMQ Streams(Kafka) 클러스터에 액세스할 수 있습니다.
  • Knative(kn) CLI가 설치되어 있습니다.
  • 선택 사항: 이 절차의 확인 단계를 사용하려면 OpenShift CLI(oc)를 설치했습니다.

절차

  1. Kafka 이벤트 소스가 작동하는지 확인하려면 수신 이벤트를 서비스 로그에 덤프하는 Knative 서비스를 생성합니다.

    $ kn service create event-display \
        --image quay.io/openshift-knative/knative-eventing-sources-event-display
  2. KafkaSource CR을 생성합니다.

    $ kn source kafka create <kafka_source_name> \
        --servers <cluster_kafka_bootstrap>.kafka.svc:9092 \
        --topics <topic_name> --consumergroup my-consumer-group \
        --sink event-display
    참고

    이 명령의 자리 표시자 값을 소스 이름, 부트스트랩 서버 및 주제의 값으로 바꿉니다.

    --servers, --topics, --consumergroup 옵션은 Kafka 클러스터에 대한 연결 매개 변수를 지정합니다. --consumergroup 옵션은 선택 사항입니다.

  3. 선택 사항: 생성한 KafkaSource CR에 대한 세부 정보를 확인합니다.

    $ kn source kafka describe <kafka_source_name>

    출력 예

    Name:              example-kafka-source
    Namespace:         kafka
    Age:               1h
    BootstrapServers:  example-cluster-kafka-bootstrap.kafka.svc:9092
    Topics:            example-topic
    ConsumerGroup:     example-consumer-group
    
    Sink:
      Name:       event-display
      Namespace:  default
      Resource:   Service (serving.knative.dev/v1)
    
    Conditions:
      OK TYPE            AGE REASON
      ++ Ready            1h
      ++ Deployed         1h
      ++ SinkProvided     1h

검증 단계

  1. Kafka 인스턴스를 트리거하여 메시지를 항목에 보냅니다.

    $ oc -n kafka run kafka-producer \
        -ti --image=quay.io/strimzi/kafka:latest-kafka-2.7.0 --rm=true \
        --restart=Never -- bin/kafka-console-producer.sh \
        --broker-list <cluster_kafka_bootstrap>:9092 --topic my-topic

    프롬프트에 메시지를 입력합니다. 이 명령은 다음을 가정합니다.

    • Kafka 클러스터는 kafka 네임스페이스에 설치됩니다.
    • my-topic 주제를 사용하도록 KafkaSource 오브젝트가 구성되어 있습니다.
  2. 로그를 보고 메시지가 도착했는지 확인합니다.

    $ oc logs $(oc get pod -o name | grep event-display) -c user-container

    출력 예

    ☁️  cloudevents.Event
    Validation: valid
    Context Attributes,
      specversion: 1.0
      type: dev.knative.kafka.event
      source: /apis/v1/namespaces/default/kafkasources/example-kafka-source#example-topic
      subject: partition:46#0
      id: partition:46/offset:0
      time: 2021-03-10T11:21:49.4Z
    Extensions,
      traceparent: 00-161ff3815727d8755848ec01c866d1cd-7ff3916c44334678-00
    Data,
      Hello!

5.2.5.2.1. Knative CLI 싱크 플래그

Knative(kn) CLI를 사용하여 이벤트 소스를 생성할 때 --sink 플래그를 사용하여 이벤트가 해당 리소스에서 로 전송되는 싱크를 지정할 수 있습니다. 싱크는 다른 리소스에서 들어오는 이벤트를 수신할 수 있는 주소 지정 가능 또는 호출 가능한 리소스일 수 있습니다.

다음 예제에서는 싱크로 서비스 http://event-display.svc.cluster.local 를 사용하는 싱크 바인딩을 생성합니다.

sink 플래그를 사용하는 명령의 예

$ kn source binding create bind-heartbeat \
  --namespace sinkbinding-example \
  --subject "Job:batch/v1:app=heartbeat-cron" \
  --sink http://event-display.svc.cluster.local \ 1
  --ce-override "sink=bound"

1
http://event-display.svc.cluster.localsvc 는 싱크가 Knative 서비스인지 확인합니다. 기타 기본 싱크 접두사에는 channel, 및 broker가 포함됩니다.

5.2.5.3. YAML을 사용하여 Kafka 이벤트 소스 생성

YAML 파일을 사용하여 Knative 리소스를 생성하면 선언적 API를 사용하므로 애플리케이션을 선언적으로, 재현 가능한 방식으로 설명할 수 있습니다. YAML을 사용하여 Kafka 소스를 생성하려면 KafkaSource 오브젝트를 정의하는 YAML 파일을 생성한 다음 oc apply 명령을 사용하여 적용해야 합니다.

사전 요구 사항

  • OpenShift Serverless Operator, Knative Eventing, KnativeKafka 사용자 정의 리소스가 클러스터에 설치되어 있습니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
  • 가져오려는 Kafka 메시지를 생성하는 Red Hat AMQ Streams(Kafka) 클러스터에 액세스할 수 있습니다.
  • OpenShift CLI(oc)를 설치합니다.

절차

  1. KafkaSource 오브젝트를 YAML 파일로 생성합니다.

    apiVersion: sources.knative.dev/v1beta1
    kind: KafkaSource
    metadata:
      name: <source_name>
    spec:
      consumerGroup: <group_name> 1
      bootstrapServers:
      - <list_of_bootstrap_servers>
      topics:
      - <list_of_topics> 2
      sink:
      - <list_of_sinks> 3
    1
    소비자 그룹은 동일한 그룹 ID를 사용하고 한 주제의 데이터를 사용하는 소비자 그룹입니다.
    2
    주제에서는 데이터 스토리지의 대상을 제공합니다. 각 주제는 하나 이상의 파티션으로 나뉩니다.
    3
    싱크는 소스에서 이벤트를 보내는 위치를 지정합니다.
    중요

    OpenShift Serverless의 KafkaSource 개체에 대한 API의 v1beta1 버전만 지원됩니다. 이 버전은 더 이상 사용되지 않으므로 이 API의 v1alpha1 버전을 사용하지 마십시오.

    KafkaSource 오브젝트의 예

    apiVersion: sources.knative.dev/v1beta1
    kind: KafkaSource
    metadata:
      name: kafka-source
    spec:
      consumerGroup: knative-group
      bootstrapServers:
      - my-cluster-kafka-bootstrap.kafka:9092
      topics:
      - knative-demo-topic
      sink:
        ref:
          apiVersion: serving.knative.dev/v1
          kind: Service
          name: event-display

  2. KafkaSource YAML 파일을 적용합니다.

    $ oc apply -f <filename>

검증

  • 다음 명령을 입력하여 Kafka 이벤트 소스가 생성되었는지 확인합니다.

    $ oc get pods

    출력 예

    NAME                                    READY     STATUS    RESTARTS   AGE
    kafkasource-kafka-source-5ca0248f-...   1/1       Running   0          13m

5.2.6. 사용자 정의 이벤트 소스

Knative에 포함되지 않은 이벤트 프로듀서 또는 CloudEvent 형식으로 이벤트를 내보내는 프로듀서에서 이벤트를 수신해야 하는 경우 사용자 정의 이벤트 소스를 생성하여 이를 수행할 수 있습니다. 다음 방법 중 하나를 사용하여 사용자 지정 이벤트 소스를 생성할 수 있습니다.

  • 싱크 바인딩을 생성하여 PodSpecable 오브젝트를 이벤트 소스로 사용합니다.
  • 컨테이너 소스를 생성하여 컨테이너 소스를 이벤트 소스로 사용합니다.

5.2.6.1. 싱크 바인딩

SinkBinding 오브젝트는 전달 주소 지정에서 이벤트 프로덕션을 분리할 수 있도록 지원합니다. 싱크 바인딩은 이벤트 생산자를 이벤트 소비자 또는 싱크 에 연결하는 데 사용됩니다. 이벤트 프로듀서는 PodSpec 템플릿을 포함하고 이벤트를 생성하는 Kubernetes 리소스입니다. 싱크는 이벤트를 수신할 수 있는 주소 지정 가능한 Kubernetes 오브젝트입니다.

SinkBinding 오브젝트는 싱크의 PodTemplateSpec 에 환경 변수를 삽입하므로 이벤트 대상을 찾기 위해 애플리케이션 코드가 Kubernetes API와 직접 상호 작용할 필요가 없습니다. 이러한 환경 변수는 다음과 같습니다.

K_SINK
확인된 싱크의 URL입니다.
K_CE_OVERRIDES
아웃바운드 이벤트에 대한 재정의를 지정하는 JSON 오브젝트입니다.
참고

현재 SinkBinding 오브젝트는 서비스에 대한 사용자 정의 리버전 이름을 지원하지 않습니다.

5.2.6.1.1. YAML을 사용하여 싱크 바인딩 생성

YAML 파일을 사용하여 Knative 리소스를 생성하면 선언적 API를 사용하므로 이벤트 소스를 선언적으로 및 재현 가능한 방식으로 설명할 수 있습니다. YAML을 사용하여 싱크 바인딩을 생성하려면 SinkBinding 오브젝트를 정의하는 YAML 파일을 생성한 다음 oc apply 명령을 사용하여 적용해야 합니다.

사전 요구 사항

  • OpenShift Serverless Operator, Knative Serving 및 Knative Eventing이 클러스터에 설치되어 있습니다.
  • OpenShift CLI(oc)를 설치합니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.

절차

  1. 싱크 바인딩이 올바르게 설정되었는지 확인하려면 Knative 이벤트 표시 서비스를 생성하여 수신되는 메시지를 로그로 덤프합니다.

    1. 서비스 YAML 파일을 생성합니다.

      서비스 YAML 파일 예

      apiVersion: serving.knative.dev/v1
      kind: Service
      metadata:
        name: event-display
      spec:
        template:
          spec:
            containers:
              - image: quay.io/openshift-knative/knative-eventing-sources-event-display:latest

    2. 서비스를 생성합니다.

      $ oc apply -f <filename>
  2. 이벤트를 서비스로 보내는 싱크 바인딩 인스턴스를 생성합니다.

    1. 싱크 바인딩 YAML 파일을 생성합니다.

      서비스 YAML 파일 예

      apiVersion: sources.knative.dev/v1alpha1
      kind: SinkBinding
      metadata:
        name: bind-heartbeat
      spec:
        subject:
          apiVersion: batch/v1
          kind: Job 1
          selector:
            matchLabels:
              app: heartbeat-cron
      
        sink:
          ref:
            apiVersion: serving.knative.dev/v1
            kind: Service
            name: event-display

      1
      이 예제에서는 app: Heartbeat-cron 라벨이 있는 모든 작업이 이벤트 싱크에 바인딩됩니다.
    2. 싱크 바인딩을 생성합니다.

      $ oc apply -f <filename>
  3. CronJob 오브젝트를 생성합니다.

    1. cron 작업 YAML 파일을 생성합니다.

      cron 작업 YAML 파일의 예

      apiVersion: batch/v1
      kind: CronJob
      metadata:
        name: heartbeat-cron
      spec:
        # Run every minute
        schedule: "* * * * *"
        jobTemplate:
          metadata:
            labels:
              app: heartbeat-cron
              bindings.knative.dev/include: "true"
          spec:
            template:
              spec:
                restartPolicy: Never
                containers:
                  - name: single-heartbeat
                    image: quay.io/openshift-knative/heartbeats:latest
                    args:
                      - --period=1
                    env:
                      - name: ONE_SHOT
                        value: "true"
                      - name: POD_NAME
                        valueFrom:
                          fieldRef:
                            fieldPath: metadata.name
                      - name: POD_NAMESPACE
                        valueFrom:
                          fieldRef:
                            fieldPath: metadata.namespace

      중요

      싱크 바인딩을 사용하려면 Knative 리소스에 bindings.knative.dev/include=true 라벨을 수동으로 추가해야 합니다.

      예를 들어 이 라벨을 CronJob 리소스에 추가하려면 Job 리소스 YAML 정의에 다음 행을 추가합니다.

        jobTemplate:
          metadata:
            labels:
              app: heartbeat-cron
              bindings.knative.dev/include: "true"
    2. cron 작업을 생성합니다.

      $ oc apply -f <filename>
  4. 다음 명령을 입력하고 출력을 검사하여 컨트롤러가 올바르게 매핑되는지 확인합니다.

    $ oc get sinkbindings.sources.knative.dev bind-heartbeat -oyaml

    출력 예

    spec:
      sink:
        ref:
          apiVersion: serving.knative.dev/v1
          kind: Service
          name: event-display
          namespace: default
      subject:
        apiVersion: batch/v1
        kind: Job
        namespace: default
        selector:
          matchLabels:
            app: heartbeat-cron

검증

메시지 덤퍼 기능 로그를 보면 Kubernetes 이벤트가 Knative 이벤트 싱크로 전송되었는지 확인할 수 있습니다.

  1. 명령을 입력합니다.

    $ oc get pods
  2. 명령을 입력합니다.

    $ oc logs $(oc get pod -o name | grep event-display) -c user-container

    출력 예

    ☁️  cloudevents.Event
    Validation: valid
    Context Attributes,
      specversion: 1.0
      type: dev.knative.eventing.samples.heartbeat
      source: https://knative.dev/eventing-contrib/cmd/heartbeats/#event-test/mypod
      id: 2b72d7bf-c38f-4a98-a433-608fbcdd2596
      time: 2019-10-18T15:23:20.809775386Z
      contenttype: application/json
    Extensions,
      beats: true
      heart: yes
      the: 42
    Data,
      {
        "id": 1,
        "label": ""
      }

5.2.6.1.2. Knative CLI를 사용하여 싱크 바인딩 생성

kn source binding create 명령을 사용하여 Knative(kn) CLI를 사용하여 싱크 바인딩을 생성할 수 있습니다. Knative CLI를 사용하여 이벤트 소스를 생성하면 YAML 파일을 직접 수정하는 것보다 더 간소화되고 직관적인 사용자 인터페이스를 제공합니다.

사전 요구 사항

  • OpenShift Serverless Operator, Knative Serving 및 Knative Eventing이 클러스터에 설치되어 있습니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
  • Knative(kn) CLI를 설치합니다.
  • OpenShift CLI(oc)를 설치합니다.
참고

다음 절차에 따라 YAML 파일을 생성해야 합니다.

예제에 사용된 YAML 파일의 이름을 변경하는 경우 해당 CLI 명령도 업데이트해야 합니다.

절차

  1. 싱크 바인딩이 올바르게 설정되었는지 확인하려면 Knative 이벤트 표시 서비스를 생성하여 수신되는 메시지를 로그로 덤프합니다.

    $ kn service create event-display --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest
  2. 이벤트를 서비스로 보내는 싱크 바인딩 인스턴스를 생성합니다.

    $ kn source binding create bind-heartbeat --subject Job:batch/v1:app=heartbeat-cron --sink ksvc:event-display
  3. CronJob 오브젝트를 생성합니다.

    1. cron 작업 YAML 파일을 생성합니다.

      cron 작업 YAML 파일의 예

      apiVersion: batch/v1
      kind: CronJob
      metadata:
        name: heartbeat-cron
      spec:
        # Run every minute
        schedule: "* * * * *"
        jobTemplate:
          metadata:
            labels:
              app: heartbeat-cron
              bindings.knative.dev/include: "true"
          spec:
            template:
              spec:
                restartPolicy: Never
                containers:
                  - name: single-heartbeat
                    image: quay.io/openshift-knative/heartbeats:latest
                    args:
                      - --period=1
                    env:
                      - name: ONE_SHOT
                        value: "true"
                      - name: POD_NAME
                        valueFrom:
                          fieldRef:
                            fieldPath: metadata.name
                      - name: POD_NAMESPACE
                        valueFrom:
                          fieldRef:
                            fieldPath: metadata.namespace

      중요

      싱크 바인딩을 사용하려면 Knative CR에 bindings.knative.dev/include=true 라벨을 수동으로 추가해야 합니다.

      예를 들어 이 라벨을 CronJob CR에 추가하려면 Job CR YAML 정의에 다음 행을 추가합니다.

        jobTemplate:
          metadata:
            labels:
              app: heartbeat-cron
              bindings.knative.dev/include: "true"
    2. cron 작업을 생성합니다.

      $ oc apply -f <filename>
  4. 다음 명령을 입력하고 출력을 검사하여 컨트롤러가 올바르게 매핑되는지 확인합니다.

    $ kn source binding describe bind-heartbeat

    출력 예

    Name:         bind-heartbeat
    Namespace:    demo-2
    Annotations:  sources.knative.dev/creator=minikube-user, sources.knative.dev/lastModifier=minikub ...
    Age:          2m
    Subject:
      Resource:   job (batch/v1)
      Selector:
        app:      heartbeat-cron
    Sink:
      Name:       event-display
      Resource:   Service (serving.knative.dev/v1)
    
    Conditions:
      OK TYPE     AGE REASON
      ++ Ready     2m

검증

메시지 덤퍼 기능 로그를 보면 Kubernetes 이벤트가 Knative 이벤트 싱크로 전송되었는지 확인할 수 있습니다.

  • 다음 명령을 입력하여 메시지 덤퍼 기능 로그를 확인합니다.

    $ oc get pods
    $ oc logs $(oc get pod -o name | grep event-display) -c user-container

    출력 예

    ☁️  cloudevents.Event
    Validation: valid
    Context Attributes,
      specversion: 1.0
      type: dev.knative.eventing.samples.heartbeat
      source: https://knative.dev/eventing-contrib/cmd/heartbeats/#event-test/mypod
      id: 2b72d7bf-c38f-4a98-a433-608fbcdd2596
      time: 2019-10-18T15:23:20.809775386Z
      contenttype: application/json
    Extensions,
      beats: true
      heart: yes
      the: 42
    Data,
      {
        "id": 1,
        "label": ""
      }

5.2.6.1.2.1. Knative CLI 싱크 플래그

Knative(kn) CLI를 사용하여 이벤트 소스를 생성할 때 --sink 플래그를 사용하여 이벤트가 해당 리소스에서 로 전송되는 싱크를 지정할 수 있습니다. 싱크는 다른 리소스에서 들어오는 이벤트를 수신할 수 있는 주소 지정 가능 또는 호출 가능한 리소스일 수 있습니다.

다음 예제에서는 싱크로 서비스 http://event-display.svc.cluster.local 를 사용하는 싱크 바인딩을 생성합니다.

sink 플래그를 사용하는 명령의 예

$ kn source binding create bind-heartbeat \
  --namespace sinkbinding-example \
  --subject "Job:batch/v1:app=heartbeat-cron" \
  --sink http://event-display.svc.cluster.local \ 1
  --ce-override "sink=bound"

1
http://event-display.svc.cluster.localsvc 는 싱크가 Knative 서비스인지 확인합니다. 기타 기본 싱크 접두사에는 channel, 및 broker가 포함됩니다.
5.2.6.1.3. 웹 콘솔을 사용하여 싱크 바인딩 생성

Knative Eventing이 클러스터에 설치되면 웹 콘솔을 사용하여 싱크 바인딩을 생성할 수 있습니다. OpenShift Container Platform 웹 콘솔을 사용하면 이벤트 소스를 생성하기 위해 간소화되고 직관적인 사용자 인터페이스를 제공합니다.

사전 요구 사항

  • OpenShift Container Platform 웹 콘솔에 로그인했습니다.
  • OpenShift Serverless Operator, Knative Serving, Knative Eventing이 OpenShift Container Platform 클러스터에 설치되어 있습니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.

절차

  1. 싱크로 사용할 Knative 서비스를 생성합니다.

    1. 개발자 화면에서 +추가YAML로 이동합니다.
    2. 예제 YAML을 복사합니다.

      apiVersion: serving.knative.dev/v1
      kind: Service
      metadata:
        name: event-display
      spec:
        template:
          spec:
            containers:
              - image: quay.io/openshift-knative/knative-eventing-sources-event-display:latest
    3. 생성을 클릭합니다.
  2. 이벤트 소스로 사용되고 1분마다 이벤트를 전송하는 CronJob 리소스를 생성합니다.

    1. 개발자 화면에서 +추가YAML로 이동합니다.
    2. 예제 YAML을 복사합니다.

      apiVersion: batch/v1
      kind: CronJob
      metadata:
        name: heartbeat-cron
      spec:
        # Run every minute
        schedule: "*/1 * * * *"
        jobTemplate:
          metadata:
            labels:
              app: heartbeat-cron
              bindings.knative.dev/include: true 1
          spec:
            template:
              spec:
                restartPolicy: Never
                containers:
                  - name: single-heartbeat
                    image: quay.io/openshift-knative/heartbeats
                    args:
                    - --period=1
                    env:
                      - name: ONE_SHOT
                        value: "true"
                      - name: POD_NAME
                        valueFrom:
                          fieldRef:
                            fieldPath: metadata.name
                      - name: POD_NAMESPACE
                        valueFrom:
                          fieldRef:
                            fieldPath: metadata.namespace
      1
      bindings.knative.dev/include: true 라벨을 포함해야 합니다. OpenShift Serverless의 기본 네임스페이스 선택 동작은 포함 모드를 사용합니다.
    3. 생성을 클릭합니다.
  3. 이전 단계에서 생성한 서비스와 동일한 네임스페이스 또는 이벤트를 보낼 다른 싱크 바인딩을 생성합니다.

    1. 개발자 화면에서 +추가이벤트 소스로 이동합니다. 이벤트 소스 페이지가 표시됩니다.
    2. 선택 사항: 이벤트 소스에 대한 공급자가 여러 개인 경우 공급자 목록에서 필요한 공급자를 선택하여 해당 공급자의 사용 가능한 이벤트 소스를 필터링합니다.
    3. 싱크 바인딩을 선택한 다음 이벤트 소스 생성을 클릭합니다. 이벤트 소스 생성 페이지가 표시됩니다.

      참고

      양식 보기 또는 YAML 보기를 사용하여 Sink 바인딩 설정을 구성하고 보기 간에 전환할 수 있습니다. 다른 보기로 전환해도 데이터는 유지됩니다.

    4. apiVersion 필드에 batch/v1을 입력합니다.
    5. 유형 필드에 Job을 입력합니다.

      참고

      CronJob 종류는 OpenShift Serverless 싱크 바인딩에서 직접 지원하지 않으므로 kind 필드에서 cron 작업 오브젝트 자체 대신 cron 작업 오브젝트에서 생성한 Job 오브젝트를 대상으로 해야 합니다.

    6. 싱크를 선택합니다. 리소스 또는 URI일 수 있습니다. 이 예제에서는 이전 단계에서 생성한 event-display 서비스를 리소스 싱크로 사용합니다.
    7. 레이블 일치 섹션에서 다음을 수행합니다.

      1. 이름 필드에 app을 입력합니다.
      2. 필드에 heartbeat-cron을 입력합니다.

        참고

        레이블 선택기는 리소스 이름이 아니라 싱크 바인딩과 함께 cron 작업을 사용할 때 필요합니다. cron 작업에서 생성한 작업에 예측 가능한 이름이 없고 이름에 무작위로 생성된 문자열이 있기 때문입니다. 예: hearthbeat-cron-1cc23f

    8. 생성을 클릭합니다.

검증

토폴로지 페이지 및 Pod 로그를 확인하여 싱크 바인딩, 싱크 및 cron 작업이 생성되었으며 올바르게 작동하는지 확인할 수 있습니다.

  1. 개발자 화면에서 토폴로지로 이동합니다.
  2. 싱크 바인딩, 싱크 및 하트비트 cron 작업을 확인합니다.

    토폴로지 보기에서 싱크 바인딩 및 서비스 보기
  3. 싱크 바인딩이 추가되면 cron 작업에 의해 성공한 작업이 등록되고 있는지 확인합니다. 즉, 싱크 바인딩이 cron 작업에서 생성한 작업을 성공적으로 재구성합니다.
  4. event-display 서비스 pod의 로그를 검색하여 heartbeats cron 작업에서 생성한 이벤트를 확인합니다.
5.2.6.1.4. 싱크 바인딩 참조

싱크 바인딩을 생성하여 PodSpecable 오브젝트를 이벤트 소스로 사용할 수 있습니다. SinkBinding 오브젝트를 생성할 때 여러 매개변수를 구성할 수 있습니다.

SinkBinding 오브젝트는 다음 매개변수를 지원합니다.

필드설명필수 또는 선택 사항

apiVersion

API 버전을 지정합니다(예: sources.knative.dev/v1 ).

필수 항목

kind

이 리소스 오브젝트를 SinkBinding 오브젝트로 식별합니다.

필수 항목

metadata

SinkBinding 오브젝트를 고유하게 식별하는 메타데이터를 지정합니다. 예를 들면 이름이 입니다.

필수 항목

spec

SinkBinding 오브젝트에 대한 구성 정보를 지정합니다.

필수 항목

spec.sink

싱크로 사용할 URI로 확인되는 오브젝트에 대한 참조입니다.

필수 항목

spec.subject

런타임 계약이 바인딩 구현으로 보강되는 리소스를 참조합니다.

필수 항목

spec.ceOverrides

싱크로 전송된 이벤트에 대한 출력 형식 및 수정 사항을 제어하는 덮어쓰기를 정의합니다.

선택 사항

5.2.6.1.4.1. subject 매개변수

Subject 매개변수는 런타임 계약이 바인딩 구현으로 보강되는 리소스를 참조합니다. 주체 정의에 대해 여러 필드를 구성할 수 있습니다.

주체 정의에서는 다음 필드를 지원합니다.

필드설명필수 또는 선택 사항

apiVersion

참조의 API 버전입니다.

필수 항목

kind

참조의 종류입니다.

필수 항목

namespace

참조의 네임스페이스입니다. 생략하면 기본값은 오브젝트의 네임스페이스입니다.

선택 사항

name

참조의 이름입니다.

선택기 를 구성하는 경우 를 사용하지 마십시오.

선택기

참조자의 선택기입니다.

이름을 구성하는 경우 를 사용하지 마십시오.

selector.matchExpressions

라벨 선택기 요구 사항 목록입니다.

matchExpressions 또는 matchLabels 중 하나만 사용하십시오.

selector.matchExpressions.key

선택기가 적용되는 라벨 키입니다.

matchExpressions 를 사용하는 경우 필요합니다.

selector.matchExpressions.operator

값 집합에 대한 키의 관계를 나타냅니다.Represents a key's relationship to a set of values. 유효한 연산자는 In,NotIn,ExistsDoesNotExist 입니다.

matchExpressions 를 사용하는 경우 필요합니다.

selector.matchExpressions.values

문자열 값의 배열입니다. operator 매개 변수 값이 In 또는 NotIn 이면 값 배열이 비어 있지 않아야 합니다. operator 매개 변수 값이 Exists 또는 DoesNotExist 인 경우 값 배열이 비어 있어야 합니다. 이 배열은 전략적 병합 패치 중에 교체됩니다.

matchExpressions 를 사용하는 경우 필요합니다.

selector.matchLabels

키-값 쌍의 맵입니다. matchLabels 맵의 각 키-값 쌍은 matchExpressions 의 요소에 해당합니다. 여기서 키 필드는 matchLabels. <key> , 연산자In 이고 배열에는 matchLabels.<value >만 포함됩니다.

matchExpressions 또는 matchLabels 중 하나만 사용하십시오.

subject 매개변수 예

다음 YAML을 고려할 때 기본 네임스페이스에서 mysubject 이라는 Deployment 오브젝트가 선택됩니다.

apiVersion: sources.knative.dev/v1
kind: SinkBinding
metadata:
  name: bind-heartbeat
spec:
  subject:
    apiVersion: apps/v1
    kind: Deployment
    namespace: default
    name: mysubject
  ...

다음 YAML에서 default 네임스페이스에서 working=example 레이블이 있는 모든 Job 오브젝트가 선택됩니다.

apiVersion: sources.knative.dev/v1
kind: SinkBinding
metadata:
  name: bind-heartbeat
spec:
  subject:
    apiVersion: batch/v1
    kind: Job
    namespace: default
    selector:
      matchLabels:
        working: example
  ...

다음 YAML에서 default 네임스페이스에서 working=example 또는 working=sample 라벨이 있는 모든 Pod 오브젝트가 선택됩니다.

apiVersion: sources.knative.dev/v1
kind: SinkBinding
metadata:
  name: bind-heartbeat
spec:
  subject:
    apiVersion: v1
    kind: Pod
    namespace: default
    selector:
      - matchExpression:
        key: working
        operator: In
        values:
          - example
          - sample
  ...
5.2.6.1.4.2. CloudEvent 덮어쓰기

ceOverrides 정의는 CloudEvent의 출력 형식과 싱크로 전송된 수정 사항을 제어하는 덮어쓰기를 제공합니다. ceOverrides 정의에 대해 여러 필드를 구성할 수 있습니다.

ceOverrides 정의는 다음 필드를 지원합니다.

필드설명필수 또는 선택 사항

확장

아웃바운드 이벤트에서 추가하거나 덮어쓰는 속성을 지정합니다. 각 확장 프로그램 키-값 쌍은 이벤트에 독립적으로 특성 확장으로 설정됩니다.

선택 사항

참고

유효한 CloudEvent 특성 이름만 확장으로 허용됩니다. extensions 덮어쓰기 구성에서 사양 정의 속성을 설정할 수 없습니다. 예를 들어 type 속성을 수정할 수 없습니다.

CloudEvent Overrides 예

apiVersion: sources.knative.dev/v1
kind: SinkBinding
metadata:
  name: bind-heartbeat
spec:
  ...
  ceOverrides:
    extensions:
      extra: this is an extra attribute
      additional: 42

그러면 제목 에서 K_CE_OVERRIDES 환경 변수가 설정됩니다.

출력 예

{ "extensions": { "extra": "this is an extra attribute", "additional": "42" } }

5.2.6.1.4.3. include 레이블

싱크 바인딩을 사용하려면 리소스가 포함된 리소스 또는 네임스페이스에 bindings.knative.dev/include: "true" 라벨을 할당해야 합니다. 리소스 정의에 레이블이 포함되어 있지 않으면 클러스터 관리자가 다음을 실행하여 네임스페이스에 연결할 수 있습니다.

$ oc label namespace <namespace> bindings.knative.dev/include=true

5.2.6.2. 컨테이너 소스

컨테이너 소스는 이벤트를 생성하고 이벤트를 싱크로 보내는 컨테이너 이미지를 생성합니다. 컨테이너 이미지와 이미지 URI를 사용하는 ContainerSource 오브젝트를 생성하여 컨테이너 소스를 사용하여 사용자 정의 이벤트 소스를 생성할 수 있습니다.

5.2.6.2.1. 컨테이너 이미지 생성을 위한 지침

컨테이너 소스 컨트롤러에서 두 개의 환경 변수인 K_SINKK_CE_OVERRIDES를 삽입합니다. 이러한 변수는 sinkceOverrides 사양에서 확인됩니다. 이벤트는 K_SINK 환경 변수에 지정된 싱크 URI로 전송됩니다. 메시지는 CloudEvent HTTP 형식을 사용하여 POST 로 보내야 합니다.

컨테이너 이미지의 예

다음은 하트비트 컨테이너 이미지의 예입니다.

package main

import (
	"context"
	"encoding/json"
	"flag"
	"fmt"
	"log"
	"os"
	"strconv"
	"time"

	duckv1 "knative.dev/pkg/apis/duck/v1"

	cloudevents "github.com/cloudevents/sdk-go/v2"
	"github.com/kelseyhightower/envconfig"
)

type Heartbeat struct {
	Sequence int    `json:"id"`
	Label    string `json:"label"`
}

var (
	eventSource string
	eventType   string
	sink        string
	label       string
	periodStr   string
)

func init() {
	flag.StringVar(&eventSource, "eventSource", "", "the event-source (CloudEvents)")
	flag.StringVar(&eventType, "eventType", "dev.knative.eventing.samples.heartbeat", "the event-type (CloudEvents)")
	flag.StringVar(&sink, "sink", "", "the host url to heartbeat to")
	flag.StringVar(&label, "label", "", "a special label")
	flag.StringVar(&periodStr, "period", "5", "the number of seconds between heartbeats")
}

type envConfig struct {
	// Sink URL where to send heartbeat cloud events
	Sink string `envconfig:"K_SINK"`

	// CEOverrides are the CloudEvents overrides to be applied to the outbound event.
	CEOverrides string `envconfig:"K_CE_OVERRIDES"`

	// Name of this pod.
	Name string `envconfig:"POD_NAME" required:"true"`

	// Namespace this pod exists in.
	Namespace string `envconfig:"POD_NAMESPACE" required:"true"`

	// Whether to run continuously or exit.
	OneShot bool `envconfig:"ONE_SHOT" default:"false"`
}

func main() {
	flag.Parse()

	var env envConfig
	if err := envconfig.Process("", &env); err != nil {
		log.Printf("[ERROR] Failed to process env var: %s", err)
		os.Exit(1)
	}

	if env.Sink != "" {
		sink = env.Sink
	}

	var ceOverrides *duckv1.CloudEventOverrides
	if len(env.CEOverrides) > 0 {
		overrides := duckv1.CloudEventOverrides{}
		err := json.Unmarshal([]byte(env.CEOverrides), &overrides)
		if err != nil {
			log.Printf("[ERROR] Unparseable CloudEvents overrides %s: %v", env.CEOverrides, err)
			os.Exit(1)
		}
		ceOverrides = &overrides
	}

	p, err := cloudevents.NewHTTP(cloudevents.WithTarget(sink))
	if err != nil {
		log.Fatalf("failed to create http protocol: %s", err.Error())
	}

	c, err := cloudevents.NewClient(p, cloudevents.WithUUIDs(), cloudevents.WithTimeNow())
	if err != nil {
		log.Fatalf("failed to create client: %s", err.Error())
	}

	var period time.Duration
	if p, err := strconv.Atoi(periodStr); err != nil {
		period = time.Duration(5) * time.Second
	} else {
		period = time.Duration(p) * time.Second
	}

	if eventSource == "" {
		eventSource = fmt.Sprintf("https://knative.dev/eventing-contrib/cmd/heartbeats/#%s/%s", env.Namespace, env.Name)
		log.Printf("Heartbeats Source: %s", eventSource)
	}

	if len(label) > 0 && label[0] == '"' {
		label, _ = strconv.Unquote(label)
	}
	hb := &Heartbeat{
		Sequence: 0,
		Label:    label,
	}
	ticker := time.NewTicker(period)
	for {
		hb.Sequence++

		event := cloudevents.NewEvent("1.0")
		event.SetType(eventType)
		event.SetSource(eventSource)
		event.SetExtension("the", 42)
		event.SetExtension("heart", "yes")
		event.SetExtension("beats", true)

		if ceOverrides != nil && ceOverrides.Extensions != nil {
			for n, v := range ceOverrides.Extensions {
				event.SetExtension(n, v)
			}
		}

		if err := event.SetData(cloudevents.ApplicationJSON, hb); err != nil {
			log.Printf("failed to set cloudevents data: %s", err.Error())
		}

		log.Printf("sending cloudevent to %s", sink)
		if res := c.Send(context.Background(), event); !cloudevents.IsACK(res) {
			log.Printf("failed to send cloudevent: %v", res)
		}

		if env.OneShot {
			return
		}

		// Wait for next tick
		<-ticker.C
	}
}

다음은 이전 하트비트 컨테이너 이미지를 참조하는 컨테이너 소스의 예입니다.

apiVersion: sources.knative.dev/v1
kind: ContainerSource
metadata:
  name: test-heartbeats
spec:
  template:
    spec:
      containers:
        # This corresponds to a heartbeats image URI that you have built and published
        - image: gcr.io/knative-releases/knative.dev/eventing/cmd/heartbeats
          name: heartbeats
          args:
            - --period=1
          env:
            - name: POD_NAME
              value: "example-pod"
            - name: POD_NAMESPACE
              value: "event-test"
  sink:
    ref:
      apiVersion: serving.knative.dev/v1
      kind: Service
      name: example-service
...
5.2.6.2.2. Knative CLI를 사용하여 컨테이너 소스 생성 및 관리

kn 소스 컨테이너 명령을 사용하여 Knative(kn) CLI를 사용하여 컨테이너 소스를 생성하고 관리할 수 있습니다. Knative CLI를 사용하여 이벤트 소스를 생성하면 YAML 파일을 직접 수정하는 것보다 더 간소화되고 직관적인 사용자 인터페이스를 제공합니다.

컨테이너 소스 생성

$ kn source container create <container_source_name> --image <image_uri> --sink <sink>

컨테이너 소스 삭제

$ kn source container delete <container_source_name>

컨테이너 소스 설명

$ kn source container describe <container_source_name>

기존 컨테이너 소스 나열

$ kn source container list

YAML 형식으로 기존 컨테이너 소스 나열

$ kn source container list -o yaml

컨테이너 소스 업데이트

이 명령은 기존 컨테이너 소스의 이미지 URI를 업데이트합니다.

$ kn source container update <container_source_name> --image <image_uri>
5.2.6.2.3. 웹 콘솔을 사용하여 컨테이너 소스 생성

Knative Eventing이 클러스터에 설치되면 웹 콘솔을 사용하여 컨테이너 소스를 생성할 수 있습니다. OpenShift Container Platform 웹 콘솔을 사용하면 이벤트 소스를 생성하기 위해 간소화되고 직관적인 사용자 인터페이스를 제공합니다.

사전 요구 사항

  • OpenShift Container Platform 웹 콘솔에 로그인했습니다.
  • OpenShift Serverless Operator, Knative Serving, Knative Eventing이 OpenShift Container Platform 클러스터에 설치되어 있습니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.

절차

  1. 개발자 화면에서 +추가이벤트 소스로 이동합니다. 이벤트 소스 페이지가 표시됩니다.
  2. 컨테이너 소스를 선택한 다음 이벤트 소스 생성을 클릭합니다. 이벤트 소스 생성 페이지가 표시됩니다.
  3. 양식 보기 또는 YAML 보기를 사용하여 컨테이너 소스 설정을 구성합니다.

    참고

    양식 보기YAML 보기를 전환할 수 있습니다. 다른 보기로 전환해도 데이터는 유지됩니다.

    1. 이미지 필드에 컨테이너 소스에서 생성한 컨테이너에서 실행할 이미지의 URI를 입력합니다.
    2. 이름 필드에 이미지 이름을 입력합니다.
    3. 선택 사항: 인수 필드에 컨테이너에 전달할 인수를 입력합니다.
    4. 선택 사항: 환경 변수 필드에서 컨테이너에 설정할 환경 변수를 추가합니다.
    5. 싱크 섹션에서 컨테이너 소스의 이벤트가 라우팅되는 싱크를 추가합니다. 양식 보기를 사용하는 경우 다음 옵션 중에서 선택할 수 있습니다.

      1. 리소스에서 채널, 브로커 또는 서비스를 이벤트 소스의 싱크로 사용합니다.
      2. URI를 선택하여 컨테이너 소스의 이벤트가 라우팅되는 위치를 지정합니다.
  4. 컨테이너 소스 구성을 완료한 후 생성을 클릭합니다.
5.2.6.2.4. 컨테이너 소스 참조

ContainerSource 오브젝트를 생성하여 컨테이너를 이벤트 소스로 사용할 수 있습니다. ContainerSource 오브젝트를 생성할 때 여러 매개변수를 구성할 수 있습니다.

ContainerSource 오브젝트는 다음 필드를 지원합니다.

필드설명필수 또는 선택 사항

apiVersion

API 버전을 지정합니다(예: sources.knative.dev/v1 ).

필수 항목

kind

이 리소스 오브젝트를 ContainerSource 개체로 식별합니다.

필수 항목

metadata

ContainerSource 개체를 고유하게 식별하는 메타데이터를 지정합니다. 예를 들면 이름이 입니다.

필수 항목

spec

ContainerSource 개체에 대한 구성 정보를 지정합니다.

필수 항목

spec.sink

싱크로 사용할 URI로 확인되는 오브젝트에 대한 참조입니다.

필수 항목

spec.template

ContainerSource 오브젝트에 대한 템플릿 사양입니다.

필수 항목

spec.ceOverrides

싱크로 전송된 이벤트에 대한 출력 형식 및 수정 사항을 제어하는 덮어쓰기를 정의합니다.

선택 사항

템플릿 매개변수 예

apiVersion: sources.knative.dev/v1
kind: ContainerSource
metadata:
  name: test-heartbeats
spec:
  template:
    spec:
      containers:
        - image: quay.io/openshift-knative/heartbeats:latest
          name: heartbeats
          args:
            - --period=1
          env:
            - name: POD_NAME
              value: "mypod"
            - name: POD_NAMESPACE
              value: "event-test"
  ...

5.2.6.2.4.1. CloudEvent 덮어쓰기

ceOverrides 정의는 CloudEvent의 출력 형식과 싱크로 전송된 수정 사항을 제어하는 덮어쓰기를 제공합니다. ceOverrides 정의에 대해 여러 필드를 구성할 수 있습니다.

ceOverrides 정의는 다음 필드를 지원합니다.

필드설명필수 또는 선택 사항

확장

아웃바운드 이벤트에서 추가하거나 덮어쓰는 속성을 지정합니다. 각 확장 프로그램 키-값 쌍은 이벤트에 독립적으로 특성 확장으로 설정됩니다.

선택 사항

참고

유효한 CloudEvent 특성 이름만 확장으로 허용됩니다. extensions 덮어쓰기 구성에서 사양 정의 속성을 설정할 수 없습니다. 예를 들어 type 속성을 수정할 수 없습니다.

CloudEvent Overrides 예

apiVersion: sources.knative.dev/v1
kind: ContainerSource
metadata:
  name: test-heartbeats
spec:
  ...
  ceOverrides:
    extensions:
      extra: this is an extra attribute
      additional: 42

그러면 제목 에서 K_CE_OVERRIDES 환경 변수가 설정됩니다.

출력 예

{ "extensions": { "extra": "this is an extra attribute", "additional": "42" } }

5.2.7. 개발자 화면을 사용하여 이벤트 소스를 싱크에 연결

OpenShift Container Platform 웹 콘솔을 사용하여 이벤트 소스를 생성할 때 해당 소스에서 이벤트를 전송하는 싱크를 지정할 수 있습니다. 싱크는 다른 리소스에서 들어오는 이벤트를 수신할 수 있는 주소 지정 가능 또는 호출 가능한 리소스일 수 있습니다.

5.2.7.1. 개발자 화면을 사용하여 이벤트 소스를 싱크에 연결

사전 요구 사항

  • OpenShift Serverless Operator, Knative Serving, Knative Eventing이 OpenShift Container Platform 클러스터에 설치되어 있습니다.
  • 웹 콘솔에 로그인한 후 개발자 화면으로 갑니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
  • Knative 서비스, 채널 또는 브로커와 같은 싱크를 생성했습니다.

절차

  1. +추가 → 이벤트 소스로 이동하여 모든 유형의 이벤트 소스를 생성하고 생성할 이벤트 소스 유형을 선택합니다.
  2. 이벤트 소스 생성 양식 보기의 싱크 섹션에서 리소스 목록에서 싱크를 선택합니다.
  3. 생성을 클릭합니다.

검증

토폴로지 페이지를 확인하여 이벤트 소스가 생성되었고 싱크에 연결되어 있는지 확인할 수 있습니다.

  1. 개발자 화면에서 토폴로지로 이동합니다.
  2. 이벤트 소스를 표시하고 연결된 싱크를 클릭하여 오른쪽 패널에서 싱크 세부 정보를 확인합니다.

5.3. 이벤트 싱크

5.3.1. 이벤트 싱크

이벤트 소스를 생성할 때 소스에서 이벤트를 전송하는 싱크를 지정할 수 있습니다. 싱크는 다른 리소스에서 들어오는 이벤트를 수신할 수 있는 주소 지정 가능 또는 호출 가능한 리소스입니다. Knative 서비스, 채널 및 브로커는 모두 싱크의 예입니다.

주소 지정 가능 오브젝트는 HTTP를 통해 전달되는 이벤트를 status.address.url 필드에 정의된 주소로 수신하며 승인합니다. 특수한 경우 core Kubernetes Service 오브젝트도 주소 지정 가능 인터페이스도 이행합니다.

호출 가능한 오브젝트는 HTTP를 통해 전달되는 이벤트를 수신하고 이벤트를 변환하여 HTTP 응답에서 0 또는 1 개의 새 이벤트를 반환할 수 있습니다. 반환된 이벤트는 외부 이벤트 소스의 이벤트를 처리하는 것과 동일한 방식으로 추가로 처리할 수 있습니다.

5.3.1.1. Kafka 이벤트 싱크 생성

개발자는 이벤트 싱크를 생성하여 특정 소스에서 이벤트를 수신하고 Kafka 주제로 보낼 수 있습니다.

사전 요구 사항

  • Operator Hub에서 Knative Serving, Knative Eventing, Knative Kafka API를 사용하여 Red Hat OpenShift Serverless Operator를 설치했습니다.
  • Kafka 환경에서 Kafka 주제를 생성했습니다.

절차

  1. 개발자 화면에서 +추가 보기로 이동합니다.
  2. Eventing 카탈로그에서 이벤트 싱크 를 클릭합니다.
  3. 카탈로그 항목에서 KafkaSink 를 검색하고 클릭합니다.
  4. 이벤트 싱크 생성 을 클릭합니다.
  5. 양식 보기에서 호스트 이름과 포트의 조합인 부트스트랩 서버의 URL을 입력합니다.

    이벤트 싱크 생성
  6. 이벤트 데이터를 보낼 항목의 이름을 입력합니다.Type the name of the topic to send event data.
  7. 이벤트 싱크의 이름을 입력합니다.
  8. 생성을 클릭합니다.

검증

  1. 개발자 화면에서 토폴로지 보기로 이동합니다.
  2. 생성된 이벤트 싱크를 클릭하여 오른쪽 패널에서 세부 정보를 확인합니다.

5.3.1.2. Knative CLI 싱크 플래그

Knative(kn) CLI를 사용하여 이벤트 소스를 생성할 때 --sink 플래그를 사용하여 이벤트가 해당 리소스에서 로 전송되는 싱크를 지정할 수 있습니다. 싱크는 다른 리소스에서 들어오는 이벤트를 수신할 수 있는 주소 지정 가능 또는 호출 가능한 리소스일 수 있습니다.

다음 예제에서는 싱크로 서비스 http://event-display.svc.cluster.local 를 사용하는 싱크 바인딩을 생성합니다.

sink 플래그를 사용하는 명령의 예

$ kn source binding create bind-heartbeat \
  --namespace sinkbinding-example \
  --subject "Job:batch/v1:app=heartbeat-cron" \
  --sink http://event-display.svc.cluster.local \ 1
  --ce-override "sink=bound"

1
http://event-display.svc.cluster.localsvc 는 싱크가 Knative 서비스인지 확인합니다. 기타 기본 싱크 접두사에는 channel, 및 broker가 포함됩니다.
작은 정보

kn( kn) CLI 명령에 --sink 플래그와 함께 사용할 수 있는 CR을 사용자 정의 하여 구성할 수 있습니다.

5.3.2. Kafka 싱크

Kafka 싱크는 클러스터 관리자가 클러스터에서 Kafka를 활성화한 경우 사용할 수 있는 이벤트 싱크 유형입니다. Kafka 싱크를 사용하여 이벤트 소스에서 Kafka 주제로 직접 이벤트를 보낼 수 있습니다.

5.3.2.1. Kafka 싱크 사용

이벤트를 Kafka 주제로 전송하는 Kafka 싱크라는 이벤트 싱크를 생성할 수 있습니다. YAML 파일을 사용하여 Knative 리소스를 생성하면 선언적 API를 사용하므로 애플리케이션을 선언적으로, 재현 가능한 방식으로 설명할 수 있습니다. 기본적으로 Kafka 싱크는 구조화된 모드보다 효율적인 바이너리 콘텐츠 모드를 사용합니다. YAML을 사용하여 Kafka 싱크를 생성하려면 KafkaSink 오브젝트를 정의하는 YAML 파일을 생성한 다음 oc apply 명령을 사용하여 적용해야 합니다.

사전 요구 사항

  • OpenShift Serverless Operator, Knative Eventing, KnativeKafka 사용자 정의 리소스(CR)가 클러스터에 설치되어 있습니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
  • 가져오려는 Kafka 메시지를 생성하는 Red Hat AMQ Streams(Kafka) 클러스터에 액세스할 수 있습니다.
  • OpenShift CLI(oc)를 설치합니다.

절차

  1. KafkaSink 오브젝트 정의를 YAML 파일로 생성합니다.

    Kafka 싱크 YAML

    apiVersion: eventing.knative.dev/v1alpha1
    kind: KafkaSink
    metadata:
      name: <sink-name>
      namespace: <namespace>
    spec:
      topic: <topic-name>
      bootstrapServers:
       - <bootstrap-server>

  2. Kafka 싱크를 생성하려면 KafkaSink YAML 파일을 적용합니다.

    $ oc apply -f <filename>
  3. 싱크가 사양에 지정되도록 이벤트 소스를 구성합니다.

    API 서버 소스에 연결된 Kafka 싱크의 예

    apiVersion: sources.knative.dev/v1alpha2
    kind: ApiServerSource
    metadata:
      name: <source-name> 1
      namespace: <namespace> 2
    spec:
      serviceAccountName: <service-account-name> 3
      mode: Resource
      resources:
      - apiVersion: v1
        kind: Event
      sink:
        ref:
          apiVersion: eventing.knative.dev/v1alpha1
          kind: KafkaSink
          name: <sink-name> 4

    1
    이벤트 소스의 이름입니다.
    2
    이벤트 소스의 네임스페이스입니다.
    3
    이벤트 소스의 서비스 계정입니다.
    4
    Kafka 싱크 이름입니다.

5.4. 브로커

5.4.1. 브로커

브로커는 트리거와 함께 이벤트 소스에서 이벤트 싱크로 이벤트를 전달하는 데 사용할 수 있습니다. 이벤트는 HTTP POST 요청으로 이벤트 소스에서 브로커로 전송됩니다. 이벤트가 브로커에 진입하면 트리거를 사용하여 CloudEvent 속성으로 필터링하고 이벤트 싱크에 HTTP POST 요청으로 전송할 수 있습니다.

브로커 이벤트 전달 개요

5.4.2. 브로커 유형

클러스터 관리자는 클러스터에 대한 기본 브로커 구현을 설정할 수 있습니다. 브로커를 생성할 때 Broker 오브젝트에 세트 구성을 제공하지 않으면 default 브로커 구현이 사용됩니다.

5.4.2.1. 개발을 위한 기본 브로커 구현

Knative는 기본 채널 기반 브로커 구현을 제공합니다. 이 채널 기반 브로커는 개발 및 테스트 목적으로 사용될 수 있지만 프로덕션 환경에 적절한 이벤트 전달 보장은 제공하지 않습니다. 기본 브로커는 기본적으로 InMemoryChannel 채널 구현에서 지원합니다.

Kafka를 사용하여 네트워크 홉을 줄이려면 Kafka 브로커 구현을 사용합니다. KafkaChannel 채널 구현에서 지원하도록 채널 기반 브로커를 구성하지 마십시오.

5.4.2.2. 프로덕션 지원 Kafka 브로커 구현

프로덕션 지원 Knative Eventing 배포의 경우 Red Hat은 Knative Kafka 브로커 구현을 사용하는 것이 좋습니다. Kafka 브로커는 Knative 브로커의 Apache Kafka 네이티브 구현이며 Kafka 인스턴스로 CloudEvent를 직접 보냅니다.

중요

Kafka 브로커에 대해 연방 정보 처리 표준(FIPS) 모드가 비활성화되어 있습니다.

Kafka 브로커는 이벤트를 저장하고 라우팅하기 위해 Kafka와 네이티브 통합을 수행합니다. 이를 통해 브로커에 대한 Kafka와 보다 효율적으로 통합하고 다른 브로커 유형에 대해 트리거 모델을 트리거할 수 있으며 네트워크 홉을 줄일 수 있습니다. Kafka 브로커 구현의 다른 이점은 다음과 같습니다.

  • at-least-once 제공 보장
  • CloudEvents 파티셔닝 확장에 따른 이벤트 전달
  • 컨트롤 플레인 고가용성
  • 수평으로 확장 가능한 데이터 플레인

Knative Kafka 브로커는 바이너리 콘텐츠 모드를 사용하여 들어오는 CloudEvents를 Kafka 레코드로 저장합니다. 즉, CloudEvent의 data 사양이 Kafka 레코드의 값에 해당하는 반면 모든 CloudEvent 속성 및 확장이 Kafka 레코드의 헤더로 매핑됩니다.

5.4.3. 브로커 생성

Knative는 기본 채널 기반 브로커 구현을 제공합니다. 이 채널 기반 브로커는 개발 및 테스트 목적으로 사용될 수 있지만 프로덕션 환경에 적절한 이벤트 전달 보장은 제공하지 않습니다.

클러스터 관리자가 Kafka를 기본 브로커 유형으로 사용하도록 OpenShift Serverless 배포를 구성한 경우 기본 설정을 사용하여 브로커를 생성하여 Kafka 기반 브로커를 생성합니다.

OpenShift Serverless 배포가 기본 브로커 유형으로 Kafka 브로커를 사용하도록 구성되지 않은 경우 다음 절차의 기본 설정을 사용할 때 채널 기반 브로커가 생성됩니다.

5.4.3.1. Knative CLI를 사용하여 브로커 생성

브로커는 트리거와 함께 이벤트 소스에서 이벤트 싱크로 이벤트를 전달하는 데 사용할 수 있습니다. Knative(kn) CLI를 사용하여 브로커를 생성하면 YAML 파일을 직접 수정하는 것보다 더 간소화되고 직관적인 사용자 인터페이스를 제공합니다. kn broker create 명령을 사용하여 브로커를 생성할 수 있습니다.

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Eventing이 OpenShift Container Platform 클러스터에 설치되어 있습니다.
  • Knative(kn) CLI가 설치되어 있습니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.

절차

  • 브로커를 생성합니다.

    $ kn broker create <broker_name>

검증

  1. kn 명령을 사용하여 기존 브로커를 모두 나열합니다.

    $ kn broker list

    출력 예

    NAME      URL                                                                     AGE   CONDITIONS   READY   REASON
    default   http://broker-ingress.knative-eventing.svc.cluster.local/test/default   45s   5 OK / 5     True

  2. 선택 사항: OpenShift Container Platform 웹 콘솔을 사용하는 경우 개발자 화면에서 토폴로지 보기로 이동하여 브로커가 존재하는지 관찰할 수 있습니다.

    웹 콘솔 토폴로지 보기에서 브로커 보기

5.4.3.2. 트리거에 주석을 달아 브로커 생성

브로커는 트리거와 함께 이벤트 소스에서 이벤트 싱크로 이벤트를 전달하는 데 사용할 수 있습니다. Trigger 오브젝트에 eventing.knative.dev/injection: enabled 주석을 추가하여 브로커를 생성할 수 있습니다.

중요

eventing.knative.dev/injection: enabled 주석을 사용하여 브로커를 생성하는 경우 클러스터 관리자 권한이 없어 이 브로커를 삭제할 수 없습니다. 클러스터 관리자가 이 주석을 먼저 제거하기 전에 브로커를 삭제하면 삭제 후 브로커가 다시 생성됩니다.

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Eventing이 OpenShift Container Platform 클러스터에 설치되어 있습니다.
  • OpenShift CLI(oc)를 설치합니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.

프로세스

  1. eventing.knative.dev/injection: enabled 주석이 있는 Trigger 오브젝트를 YAML 파일로 생성합니다.

    apiVersion: eventing.knative.dev/v1
    kind: Trigger
    metadata:
      annotations:
        eventing.knative.dev/injection: enabled
      name: <trigger_name>
    spec:
      broker: default
      subscriber: 1
        ref:
          apiVersion: serving.knative.dev/v1
          kind: Service
          name: <service_name>
    1
    트리거에서 이벤트를 전송할 대상 이벤트 싱크 또는 구독자에 대한 세부 정보를 지정합니다.
  2. Trigger YAML 파일을 적용합니다.

    $ oc apply -f <filename>

검증

oc CLI를 사용하거나 웹 콘솔의 토폴로지 보기에서 브로커가 생성되었는지 확인할 수 있습니다.

  1. oc 명령을 사용하여 브로커를 가져옵니다.

    $ oc -n <namespace> get broker default

    출력 예

    NAME      READY     REASON    URL                                                                     AGE
    default   True                http://broker-ingress.knative-eventing.svc.cluster.local/test/default   3m56s

  2. 선택 사항: OpenShift Container Platform 웹 콘솔을 사용하는 경우 개발자 화면에서 토폴로지 보기로 이동하여 브로커가 존재하는지 관찰할 수 있습니다.

    웹 콘솔 토폴로지 보기에서 브로커 보기

5.4.3.3. 네임스페이스에 라벨을 지정하여 브로커 생성

브로커는 트리거와 함께 이벤트 소스에서 이벤트 싱크로 이벤트를 전달하는 데 사용할 수 있습니다. 소유하고 있거나 쓰기 권한이 있는 네임스페이스에 라벨을 지정하여 default 브로커를 자동으로 생성할 수 있습니다.

참고

레이블을 제거하는 경우 이 방법을 사용하여 생성된 브로커는 제거되지 않습니다. 수동으로 삭제해야 합니다.

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Eventing이 OpenShift Container Platform 클러스터에 설치되어 있습니다.
  • OpenShift CLI(oc)를 설치합니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.

프로세스

  • eventing.knative.dev/injection=enabled를 사용하여 네임스페이스에 라벨을 지정합니다.

    $ oc label namespace <namespace> eventing.knative.dev/injection=enabled

검증

oc CLI를 사용하거나 웹 콘솔의 토폴로지 보기에서 브로커가 생성되었는지 확인할 수 있습니다.

  1. oc 명령을 사용하여 브로커를 가져옵니다.

    $ oc -n <namespace> get broker <broker_name>

    명령 예

    $ oc -n default get broker default

    출력 예

    NAME      READY     REASON    URL                                                                     AGE
    default   True                http://broker-ingress.knative-eventing.svc.cluster.local/test/default   3m56s

  2. 선택 사항: OpenShift Container Platform 웹 콘솔을 사용하는 경우 개발자 화면에서 토폴로지 보기로 이동하여 브로커가 존재하는지 관찰할 수 있습니다.

    웹 콘솔 토폴로지 보기에서 브로커 보기

5.4.3.4. 삽입을 통해 생성된 브로커 삭제

삽입을 통해 브로커를 생성하고 나중에 삭제하려는 경우 수동으로 삭제해야 합니다. 라벨 또는 주석을 제거하면 네임스페이스 라벨 또는 트리거 주석을 사용하여 생성한 브로커는 영구적으로 삭제되지 않습니다.

사전 요구 사항

  • OpenShift CLI(oc)를 설치합니다.

절차

  1. 네임스페이스에서 eventing.knative.dev/injection=enabled 라벨을 제거합니다.

    $ oc label namespace <namespace> eventing.knative.dev/injection-

    주석을 제거하면 Knative에서 브로커를 삭제한 후 다시 생성하지 않습니다.

  2. 선택한 네임스페이스에서 브로커를 삭제합니다.

    $ oc -n <namespace> delete broker <broker_name>

검증

  • oc 명령을 사용하여 브로커를 가져옵니다.

    $ oc -n <namespace> get broker <broker_name>

    명령 예

    $ oc -n default get broker default

    출력 예

    No resources found.
    Error from server (NotFound): brokers.eventing.knative.dev "default" not found

5.4.3.5. 웹 콘솔을 사용하여 브로커 생성

Knative Eventing이 클러스터에 설치되면 웹 콘솔을 사용하여 브로커를 생성할 수 있습니다. OpenShift Container Platform 웹 콘솔을 사용하면 브로커 생성이 간소화되고 직관적인 사용자 인터페이스를 제공합니다.

사전 요구 사항

  • OpenShift Container Platform 웹 콘솔에 로그인했습니다.
  • OpenShift Serverless Operator, Knative Serving 및 Knative Eventing이 클러스터에 설치되어 있습니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.

절차

  1. 개발자 화면에서 +추가브로커 로 이동합니다. Broker 페이지가 표시됩니다.
  2. 선택 사항: 브로커 이름을 업데이트합니다. 이름을 업데이트하지 않으면 생성된 브로커의 이름이 default 입니다.
  3. 생성을 클릭합니다.

검증

토폴로지 페이지에서 브로커 구성 요소를 확인하여 브로커가 생성되었는지 확인할 수 있습니다.

  1. 개발자 화면에서 토폴로지로 이동합니다.
  2. mt-broker-ingress,mt-broker-filter, mt-broker-controller 구성 요소를 확인합니다.

    토폴로지 보기에서 브로커 구성 요소 보기

5.4.3.6. 관리자 화면을 사용하여 브로커 생성

브로커는 트리거와 함께 이벤트 소스에서 이벤트 싱크로 이벤트를 전달하는 데 사용할 수 있습니다. 이벤트는 HTTP POST 요청으로 이벤트 소스에서 브로커로 전송됩니다. 이벤트가 브로커에 진입하면 트리거를 사용하여 CloudEvent 속성으로 필터링하고 이벤트 싱크에 HTTP POST 요청으로 전송할 수 있습니다.

브로커 이벤트 전달 개요

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Eventing이 OpenShift Container Platform 클러스터에 설치되어 있습니다.
  • 웹 콘솔에 로그인한 후 관리자 화면에 있습니다.
  • OpenShift Container Platform에 대한 클러스터 관리자 권한이 있습니다.

절차

  1. OpenShift Container Platform 웹 콘솔의 관리자 화면에서 ServerlessEventing으로 이동합니다.
  2. 생성 목록에서 브로커를 선택합니다. 그러면 브로커 생성 페이지로 이동합니다.
  3. 선택 사항: 브로커의 YAML 구성을 수정합니다.
  4. 생성을 클릭합니다.

5.4.3.7. 다음 단계

5.4.3.8. 추가 리소스

5.4.4. 기본 브로커 지원 채널 구성

채널 기반 브로커를 사용하는 경우 브로커의 기본 지원 채널 유형을 InMemoryChannel 또는 KafkaChannel로 설정할 있습니다.

사전 요구 사항

  • OpenShift Container Platform에 대한 관리자 권한이 있습니다.
  • OpenShift Serverless Operator 및 Knative Eventing을 클러스터에 설치했습니다.
  • OpenShift(oc) CLI를 설치했습니다.
  • Kafka 채널을 기본 지원 채널 유형으로 사용하려면 클러스터에 KnativeKafka CR도 설치해야 합니다.

절차

  1. KnativeEventing CR(사용자 정의 리소스)을 수정하여 config-br-default-channel 구성 맵에 대한 구성 세부 정보를 추가합니다.

    apiVersion: operator.knative.dev/v1alpha1
    kind: KnativeEventing
    metadata:
      name: knative-eventing
      namespace: knative-eventing
    spec:
      config: 1
        config-br-default-channel:
          channel-template-spec: |
            apiVersion: messaging.knative.dev/v1beta1
            kind: KafkaChannel 2
            spec:
              numPartitions: 6 3
              replicationFactor: 3 4
    1
    spec.config에서 수정된 구성을 추가할 구성 맵을 지정할 수 있습니다.
    2
    기본 지원 채널 유형 구성입니다. 이 예에서 클러스터의 기본 채널 구현은 KafkaChannel 입니다.
    3
    브로커를 지원하는 Kafka 채널의 파티션 수입니다.
    4
    브로커를 지원하는 Kafka 채널의 복제 요소.
  2. 업데이트된 KnativeEventing CR을 적용합니다.

    $ oc apply -f <filename>

5.4.5. 기본 브로커 클래스 구성

config-br-defaults 구성 맵을 사용하여 Knative Eventing의 기본 브로커 클래스 설정을 지정할 수 있습니다. 전체 클러스터 또는 하나 이상의 네임스페이스에 대해 default 브로커 클래스를 지정할 수 있습니다. 현재 MTChannelBasedBrokerKafka 브로커 유형이 지원됩니다.

사전 요구 사항

  • OpenShift Container Platform에 대한 관리자 권한이 있습니다.
  • OpenShift Serverless Operator 및 Knative Eventing을 클러스터에 설치했습니다.
  • Kafka 브로커를 기본 브로커 구현으로 사용하려면 클러스터에 KnativeKafka CR도 설치해야 합니다.

절차

  • KnativeEventing 사용자 정의 리소스를 수정하여 config-br-defaults 구성 맵에 대한 구성 세부 정보를 추가합니다.

    apiVersion: operator.knative.dev/v1alpha1
    kind: KnativeEventing
    metadata:
      name: knative-eventing
      namespace: knative-eventing
    spec:
      defaultBrokerClass: Kafka 1
      config: 2
        config-br-defaults: 3
          default-br-config: |
            clusterDefault: 4
              brokerClass: Kafka
              apiVersion: v1
              kind: ConfigMap
              name: kafka-broker-config 5
              namespace: knative-eventing 6
            namespaceDefaults: 7
              my-namespace:
                brokerClass: MTChannelBasedBroker
                apiVersion: v1
                kind: ConfigMap
                name: config-br-default-channel 8
                namespace: knative-eventing 9
    ...
    1
    Knative Eventing의 기본 브로커 클래스입니다.
    2
    spec.config에서 수정된 구성을 추가할 구성 맵을 지정할 수 있습니다.
    3
    config-br-defaults 구성 맵은 spec.config 설정 또는 브로커 클래스를 지정하지 않는 브로커의 기본 설정을 지정합니다.
    4
    클러스터 전체 기본 브로커 클래스 구성입니다. 이 예에서 클러스터의 기본 브로커 클래스 구현은 Kafka 입니다.
    5
    kafka-broker-config 구성 맵은 Kafka 브로커의 기본 설정을 지정합니다. "추가 리소스" 섹션의 Kafka 브로커 설정 구성을 참조하십시오.
    6
    kafka-broker-config 구성 맵이 존재하는 네임스페이스입니다.
    7
    네임스페이스 범위의 기본 브로커 클래스 구성입니다. 이 예에서 my-namespace 네임스페이스의 기본 브로커 클래스 구현은 MTChannelBasedBroker 입니다. 여러 네임스페이스에 기본 브로커 클래스 구현을 지정할 수 있습니다.
    8
    config-br-default-channel 구성 맵은 브로커의 기본 지원 채널을 지정합니다. "추가 리소스" 섹션의 "기본 브로커 백업 채널 구성"을 참조하십시오.
    9
    config-br-default-channel 구성 맵이 존재하는 네임스페이스입니다.
    중요

    네임스페이스별 기본값을 구성하면 클러스터 수준 설정을 덮어씁니다.

5.4.6. Kafka 브로커

프로덕션 지원 Knative Eventing 배포의 경우 Red Hat은 Knative Kafka 브로커 구현을 사용하는 것이 좋습니다. Kafka 브로커는 Knative 브로커의 Apache Kafka 네이티브 구현이며 Kafka 인스턴스로 CloudEvent를 직접 보냅니다.

중요

Kafka 브로커에 대해 연방 정보 처리 표준(FIPS) 모드가 비활성화되어 있습니다.

Kafka 브로커는 이벤트를 저장하고 라우팅하기 위해 Kafka와 네이티브 통합을 수행합니다. 이를 통해 브로커에 대한 Kafka와 보다 효율적으로 통합하고 다른 브로커 유형에 대해 트리거 모델을 트리거할 수 있으며 네트워크 홉을 줄일 수 있습니다. Kafka 브로커 구현의 다른 이점은 다음과 같습니다.

  • at-least-once 제공 보장
  • CloudEvents 파티셔닝 확장에 따른 이벤트 전달
  • 컨트롤 플레인 고가용성
  • 수평으로 확장 가능한 데이터 플레인

Knative Kafka 브로커는 바이너리 콘텐츠 모드를 사용하여 들어오는 CloudEvents를 Kafka 레코드로 저장합니다. 즉, CloudEvent의 data 사양이 Kafka 레코드의 값에 해당하는 반면 모든 CloudEvent 속성 및 확장이 Kafka 레코드의 헤더로 매핑됩니다.

Kafka 브로커 사용에 대한 자세한 내용은 브로커 생성을 참조하십시오.

5.4.7. 기본 브로커 유형으로 구성되지 않은 경우 Kafka 브로커 생성

OpenShift Serverless 배포가 Kafka 브로커를 기본 브로커 유형으로 사용하도록 구성되지 않은 경우 다음 절차 중 하나를 사용하여 Kafka 기반 브로커를 생성할 수 있습니다.

5.4.7.1. YAML을 사용하여 Kafka 브로커 생성

YAML 파일을 사용하여 Knative 리소스를 생성하면 선언적 API를 사용하므로 애플리케이션을 선언적으로, 재현 가능한 방식으로 설명할 수 있습니다. YAML을 사용하여 Kafka 브로커를 생성하려면 Broker 오브젝트를 정의하는 YAML 파일을 생성한 다음 oc apply 명령을 사용하여 적용해야 합니다.

사전 요구 사항

  • OpenShift Serverless Operator, Knative Eventing, KnativeKafka 사용자 정의 리소스가 OpenShift Container Platform 클러스터에 설치되어 있습니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
  • OpenShift CLI(oc)가 설치되어 있습니다.

절차

  1. Kafka 기반 브로커를 YAML 파일로 생성합니다.

    apiVersion: eventing.knative.dev/v1
    kind: Broker
    metadata:
      annotations:
        eventing.knative.dev/broker.class: Kafka 1
      name: example-kafka-broker
    spec:
      config:
        apiVersion: v1
        kind: ConfigMap
        name: kafka-broker-config 2
        namespace: knative-eventing
    1
    브로커 클래스입니다. 지정하지 않으면 브로커는 클러스터 관리자가 구성한 대로 기본 클래스를 사용합니다. Kafka 브로커를 사용하려면 이 값은 Kafka 여야 합니다.
    2
    Knative Kafka 브로커의 기본 구성 맵입니다. 이 구성 맵은 클러스터 관리자가 클러스터에서 Kafka 브로커 기능을 활성화할 때 생성됩니다.
  2. Kafka 기반 브로커 YAML 파일을 적용합니다.

    $ oc apply -f <filename>

5.4.7.2. 외부 관리 Kafka 주제를 사용하는 Kafka 브로커 생성

자체 내부 주제를 생성하지 않고 Kafka 브로커를 사용하려면 대신 외부적으로 관리되는 Kafka 주제를 사용할 수 있습니다. 이를 위해서는 kafka.eventing.knative.dev/external.topic 주석을 사용하는 Kafka Broker 오브젝트를 생성해야 합니다.

사전 요구 사항

  • OpenShift Serverless Operator, Knative Eventing, KnativeKafka 사용자 정의 리소스가 OpenShift Container Platform 클러스터에 설치되어 있습니다.
  • Red Hat AMQ Streams 와 같은 Kafka 인스턴스에 액세스할 수 있으며 Kafka 주제를 생성했습니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
  • OpenShift CLI(oc)가 설치되어 있습니다.

절차

  1. Kafka 기반 브로커를 YAML 파일로 생성합니다.

    apiVersion: eventing.knative.dev/v1
    kind: Broker
    metadata:
      annotations:
        eventing.knative.dev/broker.class: Kafka 1
        kafka.eventing.knative.dev/external.topic: <topic_name> 2
    ...
    1
    브로커 클래스입니다. 지정하지 않으면 브로커는 클러스터 관리자가 구성한 대로 기본 클래스를 사용합니다. Kafka 브로커를 사용하려면 이 값은 Kafka 여야 합니다.
    2
    사용하려는 Kafka 항목의 이름입니다.
  2. Kafka 기반 브로커 YAML 파일을 적용합니다.

    $ oc apply -f <filename>

5.4.8. Knative Kafka의 보안 구성

Kafka 클러스터는 일반적으로 TLS 또는 SASL 인증 방법을 사용하여 보호됩니다. TLS 또는 SASL을 사용하여 보호된 Red Hat AMQ Streams 클러스터에서 작동하도록 Kafka 브로커 또는 채널을 구성할 수 있습니다.

참고

SASL과 TLS를 모두 함께 활성화하는 것이 좋습니다.

5.4.8.1. Kafka 브로커에 대한 TLS 인증 구성

TLS( Transport Layer Security )는 Apache Kafka 클라이언트 및 서버에서 Knative와 Kafka 간 트래픽을 암호화하고 인증을 위해 사용합니다. TLS는 Knative Kafka에서 지원되는 유일한 트래픽 암호화 방법입니다.

사전 요구 사항

  • OpenShift Container Platform에 대한 클러스터 또는 전용 관리자 권한이 있어야 합니다.
  • OpenShift Serverless Operator, Knative Eventing, KnativeKafka CR이 OpenShift Container Platform 클러스터에 설치되어 있습니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
  • Kafka 클러스터 CA 인증서가 .pem 파일로 저장되어 있습니다.
  • Kafka 클러스터 클라이언트 인증서와 키가 .pem 파일로 저장되어 있습니다.
  • OpenShift CLI(oc)를 설치합니다.

절차

  1. knative-eventing 네임 스페이스에서 인증서 파일을 시크릿으로 생성합니다.

    $ oc create secret -n knative-eventing generic <secret_name> \
      --from-literal=protocol=SSL \
      --from-file=ca.crt=caroot.pem \
      --from-file=user.crt=certificate.pem \
      --from-file=user.key=key.pem
    중요

    키 이름 ca.crt,user.crt, user.key를 사용합니다. 이 값은 변경하지 마십시오.

  2. KnativeKafka CR을 편집하고 브로커 사양의 보안에 참조를 추가합니다.

    apiVersion: operator.serverless.openshift.io/v1alpha1
    kind: KnativeKafka
    metadata:
      namespace: knative-eventing
      name: knative-kafka
    spec:
      broker:
        enabled: true
        defaultConfig:
          authSecretName: <secret_name>
    ...

5.4.8.2. Kafka 브로커에 대한 SASL 인증 구성

SASL( Simple Authentication and Security Layer )은 Apache Kafka에서 인증을 위해 사용됩니다. 클러스터에서 SASL 인증을 사용하는 경우 사용자는 Kafka 클러스터와 통신하기 위해 Knative에 인증 정보를 제공해야 합니다. 그러지 않으면 이벤트를 생성하거나 사용할 수 없습니다.

사전 요구 사항

  • OpenShift Container Platform에 대한 클러스터 또는 전용 관리자 권한이 있어야 합니다.
  • OpenShift Serverless Operator, Knative Eventing, KnativeKafka CR이 OpenShift Container Platform 클러스터에 설치되어 있습니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
  • Kafka 클러스터의 사용자 이름과 암호가 있습니다.
  • 사용할 SASL 메커니즘을 선택했습니다(예: PLAIN,SCRAM-SHA-256 또는 SCRAM-SHA-512 ).
  • TLS가 활성화된 경우 Kafka 클러스터의 ca.crt 인증서 파일도 필요합니다.
  • OpenShift CLI(oc)를 설치합니다.

절차

  1. knative-eventing 네임 스페이스에서 인증서 파일을 시크릿으로 생성합니다.

    $ oc create secret -n knative-eventing generic <secret_name> \
      --from-literal=protocol=SASL_SSL \
      --from-literal=sasl.mechanism=<sasl_mechanism> \
      --from-file=ca.crt=caroot.pem \
      --from-literal=password="SecretPassword" \
      --from-literal=user="my-sasl-user"
    • 키 이름 ca.crt,암호, sasl.mechanism 을 사용합니다. 이 값은 변경하지 마십시오.
    • 공용 CA 인증서와 함께 SASL을 사용하려면 시크릿을 생성할 때 ca.crt 인수 대신 tls.enabled=true 플래그를 사용해야 합니다. 예를 들면 다음과 같습니다.

      $ oc create secret -n <namespace> generic <kafka_auth_secret> \
        --from-literal=tls.enabled=true \
        --from-literal=password="SecretPassword" \
        --from-literal=saslType="SCRAM-SHA-512" \
        --from-literal=user="my-sasl-user"
  2. KnativeKafka CR을 편집하고 브로커 사양의 보안에 참조를 추가합니다.

    apiVersion: operator.serverless.openshift.io/v1alpha1
    kind: KnativeKafka
    metadata:
      namespace: knative-eventing
      name: knative-kafka
    spec:
      broker:
        enabled: true
        defaultConfig:
          authSecretName: <secret_name>
    ...

5.4.9. 브로커 관리

Knative(kn) CLI는 기존 브로커를 설명하고 나열하는 데 사용할 수 있는 명령을 제공합니다.

5.4.9.1. Knative CLI를 사용하여 기존 브로커 나열

Knative(kn) CLI를 사용하여 브로커를 나열하면 간소화되고 직관적인 사용자 인터페이스가 제공됩니다. kn broker list 명령을 사용하여 Knative CLI를 사용하여 클러스터의 기존 브로커를 나열할 수 있습니다.

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Eventing이 OpenShift Container Platform 클러스터에 설치되어 있습니다.
  • Knative(kn) CLI가 설치되어 있습니다.

절차

  • 기존 브로커를 모두 나열합니다.

    $ kn broker list

    출력 예

    NAME      URL                                                                     AGE   CONDITIONS   READY   REASON
    default   http://broker-ingress.knative-eventing.svc.cluster.local/test/default   45s   5 OK / 5     True

5.4.9.2. Knative CLI를 사용하여 기존 브로커 설명

Knative(kn) CLI를 사용하여 브로커를 설명하면 간소화되고 직관적인 사용자 인터페이스를 제공합니다. kn broker describe 명령을 사용하여 Knative CLI를 사용하여 클러스터의 기존 브로커에 대한 정보를 출력할 수 있습니다.

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Eventing이 OpenShift Container Platform 클러스터에 설치되어 있습니다.
  • Knative(kn) CLI가 설치되어 있습니다.

절차

  • 기존 브로커를 설명합니다.

    $ kn broker describe <broker_name>

    기본 브로커를 사용하는 명령의 예

    $ kn broker describe default

    출력 예

    Name:         default
    Namespace:    default
    Annotations:  eventing.knative.dev/broker.class=MTChannelBasedBroker, eventing.knative.dev/creato ...
    Age:          22s
    
    Address:
      URL:    http://broker-ingress.knative-eventing.svc.cluster.local/default/default
    
    Conditions:
      OK TYPE                   AGE REASON
      ++ Ready                  22s
      ++ Addressable            22s
      ++ FilterReady            22s
      ++ IngressReady           22s
      ++ TriggerChannelReady    22s

5.4.10. 이벤트 전달

이벤트가 이벤트 싱크로 전달되지 않는 경우 적용되는 이벤트 전달 매개변수를 구성할 수 있습니다. dead letter sink를 포함하여 이벤트 전달 매개변수를 구성하면 이벤트 싱크로 전달되지 못한 이벤트를 다시 수행할 수 있습니다. 그렇지 않으면 전달되지 않은 이벤트가 삭제됩니다.

5.4.10.1. 채널 및 브로커에 대한 이벤트 전달 동작 패턴

다양한 채널 및 브로커 유형에는 이벤트 전달을 위해 그 뒤에 자체 동작 패턴이 있습니다.

5.4.10.1.1. Knative Kafka 채널 및 브로커

이벤트가 Kafka 채널 또는 브로커 수신자에게 성공적으로 전달되면 수신자는 202 상태 코드로 응답합니다. 즉, 이벤트가 Kafka 주제 내부에 안전하게 저장되어 손실되지 않습니다.

수신자가 다른 상태 코드로 응답하는 경우 이벤트는 안전하게 저장되지 않으며 문제를 해결하기 위해 사용자가 단계를 수행해야 합니다.

5.4.10.2. 구성 가능한 이벤트 전달 매개변수

이벤트 전달을 위해 다음 매개변수를 구성할 수 있습니다.

dead letter sink
이벤트가 전달되지 않으면 지정된 이벤트 싱크에 저장되도록 deadLetterSink 전달 매개변수를 구성할 수 있습니다. dead letter sink에 저장되지 않은 이벤트가 삭제됩니다. dead letter sink는 Knative 서비스, Kubernetes 서비스 또는 URI와 같은 Knative Eventing 싱크 계약을 준수하는 주소 지정 가능한 오브젝트입니다.
retries
재시도 전달 매개변수를 정수 값으로 구성하여 이벤트가 dead letter sink로 전송되기 전에 전달을 retry해야 하는 최소 횟수를 설정할 수 있습니다.
back off delay
backoffDelay 전달 매개변수를 설정하여 실패 후 이벤트 전달을 재시도하기 전에 시간 지연을 지정할 수 있습니다. backoffDelay 매개변수의 기간은 ISO 8601 형식을 사용하여 지정합니다. 예를 들어 PT1S는 1초 지연을 지정합니다.
back off policy
backoffPolicy 전달 매개 변수를 사용하여 재시도 정책을 지정할 수 있습니다. 정책을 linear 또는 exponential로 지정할 수 있습니다. linear 백오프 정책을 사용하는 경우 백오프 지연은 backoffDelay * <numberOfRetries>와 동일합니다. exponential 백오프 정책을 사용하는 경우 백오프 지연은 backoffDelay*2^<numberOfRetries>와 동일합니다.

5.4.10.3. 이벤트 전달 매개변수 구성 예

브로커,트리거,채널, 서브스크립션 오브젝트에 대한 이벤트 전달 매개변수를 구성할 수 있습니다. 브로커 또는 채널에 대한 이벤트 전달 매개변수를 구성하는 경우 이러한 매개변수는 해당 오브젝트에 대해 생성된 트리거 또는 서브스크립션으로 전파됩니다. 브로커 또는 채널의 설정을 재정의하도록 트리거 또는 서브스크립션에 대한 이벤트 전달 매개변수를 설정할 수도 있습니다.

Broker 오브젝트의 예

apiVersion: eventing.knative.dev/v1
kind: Broker
metadata:
...
spec:
  delivery:
    deadLetterSink:
      ref:
        apiVersion: eventing.knative.dev/v1alpha1
        kind: KafkaSink
        name: <sink_name>
    backoffDelay: <duration>
    backoffPolicy: <policy_type>
    retry: <integer>
...

Trigger 오브젝트의 예

apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
...
spec:
  broker: <broker_name>
  delivery:
    deadLetterSink:
      ref:
        apiVersion: serving.knative.dev/v1
        kind: Service
        name: <sink_name>
    backoffDelay: <duration>
    backoffPolicy: <policy_type>
    retry: <integer>
...

Channel 오브젝트의 예

apiVersion: messaging.knative.dev/v1
kind: Channel
metadata:
...
spec:
  delivery:
    deadLetterSink:
      ref:
        apiVersion: serving.knative.dev/v1
        kind: Service
        name: <sink_name>
    backoffDelay: <duration>
    backoffPolicy: <policy_type>
    retry: <integer>
...

Subscription 개체 예

apiVersion: messaging.knative.dev/v1
kind: Subscription
metadata:
...
spec:
  channel:
    apiVersion: messaging.knative.dev/v1
    kind: Channel
    name: <channel_name>
  delivery:
    deadLetterSink:
      ref:
        apiVersion: serving.knative.dev/v1
        kind: Service
        name: <sink_name>
    backoffDelay: <duration>
    backoffPolicy: <policy_type>
    retry: <integer>
...

5.4.10.4. 트리거의 이벤트 전달 순서 구성

Kafka 브로커를 사용하는 경우 트리거에서 이벤트 싱크로 이벤트 전달 순서를 구성할 수 있습니다.

사전 요구 사항

  • OpenShift Serverless Operator, Knative Eventing, Knative Kafka가 OpenShift Container Platform 클러스터에 설치되어 있습니다.
  • Kafka 브로커는 클러스터에서 사용할 수 있도록 활성화되며 Kafka 브로커를 생성했습니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
  • OpenShift(oc) CLI를 설치했습니다.

절차

  1. Trigger 오브젝트를 생성하거나 수정하고 kafka.eventing.knative.dev/delivery.order 주석을 설정합니다.

    apiVersion: eventing.knative.dev/v1
    kind: Trigger
    metadata:
      name: <trigger_name>
      annotations:
         kafka.eventing.knative.dev/delivery.order: ordered
    ...

    지원되는 소비자 제공 보장은 다음과 같습니다.

    순서가 지정되지 않음
    순서가 지정되지 않은 소비자는 적절한 오프셋 관리를 유지하면서 순서가 지정되지 않은 메시지를 전달하는 비차단 소비자입니다.
    ordered

    순서가 지정된 소비자는 CloudEvent 구독자의 성공적인 응답을 기다린 후 파티션의 다음 메시지를 전달하기 전에 대기 중인 소비자별 소비자입니다.

    기본 주문 보장은 순서가 지정되지 않습니다.

  2. Trigger 오브젝트를 적용합니다.

    $ oc apply -f <filename>

5.5. Trigger

5.5.1. 트리거 개요

브로커는 트리거와 함께 이벤트 소스에서 이벤트 싱크로 이벤트를 전달하는 데 사용할 수 있습니다. 이벤트는 HTTP POST 요청으로 이벤트 소스에서 브로커로 전송됩니다. 이벤트가 브로커에 진입하면 트리거를 사용하여 CloudEvent 속성으로 필터링하고 이벤트 싱크에 HTTP POST 요청으로 전송할 수 있습니다.

브로커 이벤트 전달 개요

Kafka 브로커를 사용하는 경우 트리거에서 이벤트 싱크로 이벤트 전달 순서를 구성할 수 있습니다. 트리거의 이벤트 전달 순서 구성을 참조하십시오.

5.5.1.1. 트리거의 이벤트 전달 순서 구성

Kafka 브로커를 사용하는 경우 트리거에서 이벤트 싱크로 이벤트 전달 순서를 구성할 수 있습니다.

사전 요구 사항

  • OpenShift Serverless Operator, Knative Eventing, Knative Kafka가 OpenShift Container Platform 클러스터에 설치되어 있습니다.
  • Kafka 브로커는 클러스터에서 사용할 수 있도록 활성화되며 Kafka 브로커를 생성했습니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
  • OpenShift(oc) CLI를 설치했습니다.

절차

  1. Trigger 오브젝트를 생성하거나 수정하고 kafka.eventing.knative.dev/delivery.order 주석을 설정합니다.

    apiVersion: eventing.knative.dev/v1
    kind: Trigger
    metadata:
      name: <trigger_name>
      annotations:
         kafka.eventing.knative.dev/delivery.order: ordered
    ...

    지원되는 소비자 제공 보장은 다음과 같습니다.

    순서가 지정되지 않음
    순서가 지정되지 않은 소비자는 적절한 오프셋 관리를 유지하면서 순서가 지정되지 않은 메시지를 전달하는 비차단 소비자입니다.
    ordered

    순서가 지정된 소비자는 CloudEvent 구독자의 성공적인 응답을 기다린 후 파티션의 다음 메시지를 전달하기 전에 대기 중인 소비자별 소비자입니다.

    기본 주문 보장은 순서가 지정되지 않습니다.

  2. Trigger 오브젝트를 적용합니다.

    $ oc apply -f <filename>

5.5.1.2. 다음 단계

5.5.2. 웹 콘솔에서 트리거 생성

OpenShift Container Platform 웹 콘솔을 사용하면 간소화되고 직관적인 사용자 인터페이스를 제공하여 트리거를 생성할 수 있습니다. Knative Eventing이 클러스터에 설치되어 브로커를 생성한 후 웹 콘솔을 사용하여 트리거를 생성할 수 있습니다.

5.5.2.1. 웹 콘솔을 사용하여 트리거 생성

사전 요구 사항

  • OpenShift Serverless Operator, Knative Serving, Knative Eventing이 OpenShift Container Platform 클러스터에 설치되어 있습니다.
  • 웹 콘솔에 로그인했습니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
  • 트리거에 연결할 브로커 및 Knative 서비스 또는 기타 이벤트 싱크를 생성했습니다.

절차

  1. 개발자 화면에서 토폴로지 페이지로 이동합니다.
  2. 트리거를 생성할 브로커 위로 마우스 커서를 이동한 후 화살표를 끕니다. 트리거 추가 옵션이 표시됩니다.
  3. 트리거 추가를 클릭합니다.
  4. Subscriber 목록에서 싱크를 선택합니다.
  5. 추가를 클릭합니다.

검증

  • 서브스크립션이 생성되면 Topology 페이지에서 브로커를 이벤트 싱크에 연결하는 선으로 표시할 수 있습니다.

트리거 삭제

  1. 개발자 화면에서 토폴로지 페이지로 이동합니다.
  2. 삭제할 트리거를 클릭합니다.
  3. 작업 컨텍스트 메뉴에서 트리거 삭제를 선택합니다.

5.5.3. 명령줄에서 트리거 생성

Knative(kn) CLI를 사용하여 트리거를 생성하면 YAML 파일을 직접 수정하는 것보다 더 간소화되고 직관적인 사용자 인터페이스를 제공합니다.

5.5.3.1. Knative CLI를 사용하여 트리거 생성

kn trigger create 명령을 사용하여 트리거를 생성할 수 있습니다.

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Eventing이 OpenShift Container Platform 클러스터에 설치되어 있습니다.
  • Knative(kn) CLI가 설치되어 있습니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.

절차

  • 트리거를 생성합니다.

    $ kn trigger create <trigger_name> --broker <broker_name> --filter <key=value> --sink <sink_name>

    또는 트리거를 생성하고 브로커 삽입을 사용하여 default 브로커를 동시에 생성할 수 있습니다.

    $ kn trigger create <trigger_name> --inject-broker --filter <key=value> --sink <sink_name>

    기본적으로 트리거는 브로커에 전송된 모든 이벤트를 해당 브로커에 가입된 싱크로 전달합니다. 트리거에 --filter 특성을 사용하면 브로커의 이벤트를 필터링하여 구독자에게 정의된 기준에 따라 일부 이벤트만 제공할 수 있습니다.

5.5.4. 관리자 관점에서 트리거 생성

5.5.4.1. 관리자 화면을 사용하여 트리거 생성

브로커는 트리거와 함께 이벤트 소스에서 이벤트 싱크로 이벤트를 전달하는 데 사용할 수 있습니다. 이벤트는 HTTP POST 요청으로 이벤트 소스에서 브로커로 전송됩니다. 이벤트가 브로커에 진입하면 트리거를 사용하여 CloudEvent 속성으로 필터링하고 이벤트 싱크에 HTTP POST 요청으로 전송할 수 있습니다.

브로커 이벤트 전달 개요

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Eventing이 OpenShift Container Platform 클러스터에 설치되어 있습니다.
  • 웹 콘솔에 로그인한 후 관리자 화면에 있습니다.
  • OpenShift Container Platform에 대한 클러스터 관리자 권한이 있습니다.
  • Knative 브로커를 생성했습니다.
  • 구독자로 사용할 Knative 서비스를 생성했습니다.

절차

  1. OpenShift Container Platform 웹 콘솔의 관리자 화면에서 ServerlessEventing으로 이동합니다.
  2. 브로커 탭에서 트리거를 추가할 브로커의 옵션 메뉴 kebab 를 선택합니다.
  3. 목록에서 트리거 추가를 클릭합니다.
  4. 트리거 추가 대화 상자에서 트리거에 대한 구독자를 선택합니다. 구독자는 브로커에서 이벤트를 수신하는 Knative 서비스입니다.
  5. 추가를 클릭합니다.

5.5.5. 명령줄의 트리거 나열

Knative(kn) CLI를 사용하여 트리거를 나열하면 간소화되고 직관적인 사용자 인터페이스가 제공됩니다.

5.5.5.1. Knative CLI를 사용하여 트리거 나열

kn trigger list 명령을 사용하여 클러스터의 기존 트리거를 나열할 수 있습니다.

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Eventing이 OpenShift Container Platform 클러스터에 설치되어 있습니다.
  • Knative(kn) CLI가 설치되어 있습니다.

절차

  1. 사용 가능한 트리거 목록을 인쇄합니다.

    $ kn trigger list

    출력 예

    NAME    BROKER    SINK           AGE   CONDITIONS   READY   REASON
    email   default   ksvc:edisplay   4s    5 OK / 5     True
    ping    default   ksvc:edisplay   32s   5 OK / 5     True

  2. 선택 사항: JSON 형식으로 된 트리거 목록을 인쇄합니다.

    $ kn trigger list -o json

5.5.6. 명령줄에서 트리거 설명

Knative(kn) CLI를 사용하여 트리거를 설명하면 간소화되고 직관적인 사용자 인터페이스가 제공됩니다.

5.5.6.1. Knative CLI를 사용하여 트리거 설명

kn trigger describe 명령을 사용하여 Knative CLI를 사용하여 클러스터의 기존 트리거에 대한 정보를 출력할 수 있습니다.

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Eventing이 OpenShift Container Platform 클러스터에 설치되어 있습니다.
  • Knative(kn) CLI가 설치되어 있습니다.
  • 트리거를 생성했습니다.

절차

  • 명령을 입력합니다.

    $ kn trigger describe <trigger_name>

    출력 예

    Name:         ping
    Namespace:    default
    Labels:       eventing.knative.dev/broker=default
    Annotations:  eventing.knative.dev/creator=kube:admin, eventing.knative.dev/lastModifier=kube:admin
    Age:          2m
    Broker:       default
    Filter:
      type:       dev.knative.event
    
    Sink:
      Name:       edisplay
      Namespace:  default
      Resource:   Service (serving.knative.dev/v1)
    
    Conditions:
      OK TYPE                  AGE REASON
      ++ Ready                  2m
      ++ BrokerReady            2m
      ++ DependencyReady        2m
      ++ Subscribed             2m
      ++ SubscriberResolved     2m

5.5.7. 트리거를 싱크에 연결

트리거를 싱크로 보내기 전에 브로커의 이벤트가 필터링되도록 트리거를 싱크에 연결할 수 있습니다. 트리거에 연결된 싱크는 Trigger 오브젝트의 리소스 사양에 구독자 로 구성됩니다.

Kafka 싱크에 연결된 Trigger 오브젝트의 예

apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
  name: <trigger_name> 1
spec:
...
  subscriber:
    ref:
      apiVersion: eventing.knative.dev/v1alpha1
      kind: KafkaSink
      name: <kafka_sink_name> 2

1
싱크에 연결되어 있는 트리거의 이름입니다.
2
KafkaSink 오브젝트의 이름입니다.

5.5.8. 명령줄에서 트리거 필터링

Knative(kn) CLI를 사용하여 이벤트를 필터링하면 간소화되고 직관적인 사용자 인터페이스가 제공됩니다. kn trigger create 명령을 적절한 플래그와 함께 사용하여 트리거를 사용하여 이벤트를 필터링할 수 있습니다.

5.5.8.1. Knative CLI를 사용하여 트리거로 이벤트 필터링

다음 트리거 예제에서는 type: dev.knative.samples.helloworld 특성이 있는 이벤트만 이벤트 싱크로 전송됩니다.

$ kn trigger create <trigger_name> --broker <broker_name> --filter type=dev.knative.samples.helloworld --sink ksvc:<service_name>

여러 특성을 사용하여 이벤트를 필터링할 수도 있습니다. 다음 예제에서는 type, source 및 extension 특성을 사용하여 이벤트를 필터링하는 방법을 보여줍니다.

$ kn trigger create <trigger_name> --broker <broker_name> --sink ksvc:<service_name> \
--filter type=dev.knative.samples.helloworld \
--filter source=dev.knative.samples/helloworldsource \
--filter myextension=my-extension-value

5.5.9. 명령줄에서 트리거 업데이트

Knative(kn) CLI를 사용하여 트리거를 업데이트하면 간소화되고 직관적인 사용자 인터페이스가 제공됩니다.

5.5.9.1. Knative CLI를 사용하여 트리거 업데이트

kn trigger update 명령을 특정 플래그와 함께 사용하여 트리거의 특성을 업데이트할 수 있습니다.

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Eventing이 OpenShift Container Platform 클러스터에 설치되어 있습니다.
  • Knative(kn) CLI가 설치되어 있습니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.

프로세스

  • 태그를 업데이트합니다.

    $ kn trigger update <trigger_name> --filter <key=value> --sink <sink_name> [flags]
    • 트리거를 업데이트하여 수신 이벤트와 정확히 일치하는 이벤트 특성을 필터링할 수 있습니다. 예를 들면 type 특성을 사용합니다.

      $ kn trigger update <trigger_name> --filter type=knative.dev.event
    • 트리거에서 필터 특성을 제거할 수 있습니다. 예를 들어 type 키를 사용하여 필터 특성을 제거할 수 있습니다.

      $ kn trigger update <trigger_name> --filter type-
    • --sink 매개변수를 사용하여 트리거의 이벤트 싱크를 변경할 수 있습니다.

      $ kn trigger update <trigger_name> --sink ksvc:my-event-sink

5.5.10. 명령줄에서 트리거 삭제

Knative(kn) CLI를 사용하여 트리거를 삭제하면 간소화되고 직관적인 사용자 인터페이스가 제공됩니다.

5.5.10.1. Knative CLI를 사용하여 트리거 삭제

kn trigger delete 명령을 사용하여 트리거를 삭제할 수 있습니다.

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Eventing이 OpenShift Container Platform 클러스터에 설치되어 있습니다.
  • Knative(kn) CLI가 설치되어 있습니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.

프로세스

  • 트리거를 삭제합니다.

    $ kn trigger delete <trigger_name>

검증

  1. 기존 트리거를 나열합니다.

    $ kn trigger list
  2. 트리거가 더 이상 존재하지 않는지 확인합니다.

    출력 예

    No triggers found.

5.6. 채널

5.6.1. 채널 및 서브스크립션

채널은 단일 이벤트 전달 및 지속성 계층을 정의하는 사용자 정의 리소스입니다. 이벤트 소스 또는 생산자의 채널로 이벤트가 전송되면 서브스크립션을 사용하여 이러한 이벤트를 여러 Knative 서비스 또는 기타 싱크로 보낼 수 있습니다.

채널 워크플로 개요

지원되는 Channel 오브젝트를 인스턴스화하여 채널을 생성하고 Subscription 오브젝트에서 delivery 사양을 수정하여 재전송 시도 횟수를 구성할 수 있습니다.

Channel 오브젝트를 생성한 후에는 변경 승인 Webhook에서 기본 채널 구현을 기반으로 Channel 오브젝트에 일련의 spec.channelTemplate 속성을 추가합니다. 예를 들어 InMemoryChannel 기본 구현의 경우 Channel 오브젝트는 다음과 같습니다.

apiVersion: messaging.knative.dev/v1
kind: Channel
metadata:
  name: example-channel
  namespace: default
spec:
  channelTemplate:
    apiVersion: messaging.knative.dev/v1
    kind: InMemoryChannel

그런 다음 채널 컨트롤러에서 spec.channelTemplate 구성에 따라 지원 채널 인스턴스를 생성합니다.

참고

spec.channelTemplate 속성은 사용자가 아닌 기본 채널 메커니즘에 의해 설정되기 때문에 생성 후에는 변경할 수 없습니다.

이 메커니즘을 앞의 예제와 함께 사용하면 일반 지원 채널과 InMemoryChannel 채널이라는 두 개의 오브젝트가 생성됩니다. 다른 기본 채널 구현을 사용하는 경우 InMemoryChannel이 구현에 고유한 채널로 교체됩니다. 예를 들어 Knative Kafka를 사용하면 KafkaChannel 채널이 생성됩니다.

지원 채널은 서브스크립션을 사용자가 생성한 채널 오브젝트에 복사하고 지원 채널의 상태를 반영하도록 사용자가 생성한 채널 오브젝트의 상태를 설정하는 프록시 역할을 합니다.

5.6.1.1. 채널 구현 유형

InMemoryChannelKafkaChannel 채널 구현은 OpenShift Serverless에서 개발을 위해 사용할 수 있습니다.

다음은 InMemoryChannel 유형 채널에 대한 제한 사항입니다.

  • 이벤트 지속성은 제공되지 않습니다. Pod가 다운되면 해당 Pod의 이벤트도 손실됩니다.
  • InMemoryChannel 채널에서는 이벤트에 순서를 지정하지 않으므로 해당 채널에서 두 개의 이벤트를 동시에 수신하는 경우 이벤트를 순서와 관계없이 구독자에게 전달할 수 있습니다.
  • 구독자가 이벤트를 거부하면 기본적으로 재전송을 시도하지 않습니다. Subscription 오브젝트의 delivery 사양을 수정하여 재전송 시도 횟수를 구성할 수 있습니다.

5.6.2. 채널 생성

채널은 단일 이벤트 전달 및 지속성 계층을 정의하는 사용자 정의 리소스입니다. 이벤트 소스 또는 생산자의 채널로 이벤트가 전송되면 서브스크립션을 사용하여 이러한 이벤트를 여러 Knative 서비스 또는 기타 싱크로 보낼 수 있습니다.

채널 워크플로 개요

지원되는 Channel 오브젝트를 인스턴스화하여 채널을 생성하고 Subscription 오브젝트에서 delivery 사양을 수정하여 재전송 시도 횟수를 구성할 수 있습니다.

5.6.2.1. 웹 콘솔을 사용하여 채널 생성

OpenShift Container Platform 웹 콘솔을 사용하면 채널을 생성하기 위해 간소화되고 직관적인 사용자 인터페이스를 제공합니다. Knative Eventing이 클러스터에 설치되면 웹 콘솔을 사용하여 채널을 생성할 수 있습니다.

사전 요구 사항

  • OpenShift Container Platform 웹 콘솔에 로그인했습니다.
  • OpenShift Serverless Operator 및 Knative Eventing이 OpenShift Container Platform 클러스터에 설치되어 있습니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.

절차

  1. 개발자 화면에서 +추가채널로 이동합니다.
  2. 유형 목록에서 생성할 Channel 오브젝트 유형을 선택합니다.
  3. 생성을 클릭합니다.

검증

  • 토폴로지 페이지로 이동하여 채널이 있는지 확인합니다.

    토폴로지 보기에서 채널 보기

5.6.2.2. Knative CLI를 사용하여 채널 생성

Knative(kn) CLI를 사용하여 채널을 생성하면 YAML 파일을 직접 수정하는 것보다 더 간소화되고 직관적인 사용자 인터페이스를 제공합니다. kn channel create 명령을 사용하여 채널을 생성할 수 있습니다.

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Eventing이 클러스터에 설치되어 있습니다.
  • Knative(kn) CLI가 설치되어 있습니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.

절차

  • 채널을 생성합니다.

    $ kn channel create <channel_name> --type <channel_type>

    채널 유형은 선택 사항이지만 지정된 위치는 Group:Version:Kind 형식으로 지정해야 합니다. 예를 들면 InMemoryChannel 오브젝트를 생성할 수 있습니다.

    $ kn channel create mychannel --type messaging.knative.dev:v1:InMemoryChannel

    출력 예

    Channel 'mychannel' created in namespace 'default'.

검증

  • 채널이 존재하는지 확인하려면 기존 채널을 나열하고 출력을 검사합니다.

    $ kn channel list

    출력 예

    kn channel list
    NAME        TYPE              URL                                                     AGE   READY   REASON
    mychannel   InMemoryChannel   http://mychannel-kn-channel.default.svc.cluster.local   93s   True

채널 삭제

  • 채널을 삭제합니다.

    $ kn channel delete <channel_name>

5.6.2.3. YAML을 사용하여 기본 구현 채널 생성

YAML 파일을 사용하여 Knative 리소스를 생성하면 선언적으로 및 재현 가능한 방식으로 채널을 설명할 수 있는 선언적 API를 사용합니다. YAML을 사용하여 서버리스 채널을 생성하려면 Channel 오브젝트를 정의하는 YAML 파일을 생성한 다음 oc apply 명령을 사용하여 적용해야 합니다.

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Eventing이 클러스터에 설치되어 있습니다.
  • OpenShift CLI(oc)를 설치합니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.

절차

  1. Channel 오브젝트를 YAML 파일로 생성합니다.

    apiVersion: messaging.knative.dev/v1
    kind: Channel
    metadata:
      name: example-channel
      namespace: default
  2. YAML 파일을 적용합니다.

    $ oc apply -f <filename>

5.6.2.4. YAML을 사용하여 Kafka 채널 생성

YAML 파일을 사용하여 Knative 리소스를 생성하면 선언적으로 및 재현 가능한 방식으로 채널을 설명할 수 있는 선언적 API를 사용합니다. Kafka 채널을 생성하여 Kafka 주제에서 지원하는 Knative Eventing 채널을 생성할 수 있습니다. YAML을 사용하여 Kafka 채널을 생성하려면 KafkaChannel 오브젝트를 정의하는 YAML 파일을 생성한 다음 oc apply 명령을 사용하여 적용해야 합니다.

사전 요구 사항

  • OpenShift Serverless Operator, Knative Eventing, KnativeKafka 사용자 정의 리소스가 OpenShift Container Platform 클러스터에 설치되어 있습니다.
  • OpenShift CLI(oc)를 설치합니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.

절차

  1. KafkaChannel 오브젝트를 YAML 파일로 생성합니다.

    apiVersion: messaging.knative.dev/v1beta1
    kind: KafkaChannel
    metadata:
      name: example-channel
      namespace: default
    spec:
      numPartitions: 3
      replicationFactor: 1
    중요

    OpenShift Serverless의 KafkaChannel 오브젝트에 대한 API의 v1beta1 버전만 지원됩니다. 이 버전은 더 이상 사용되지 않으므로 이 API의 v1alpha1 버전을 사용하지 마십시오.

  2. KafkaChannel YAML 파일을 적용합니다.

    $ oc apply -f <filename>

5.6.2.5. 다음 단계

5.6.3. 기본 채널 구현

default-ch-webhook 구성 맵을 사용하여 Knative Eventing의 기본 채널 구현을 지정할 수 있습니다. 전체 클러스터 또는 하나 이상의 네임스페이스에 기본 채널 구현을 지정할 수 있습니다. 현재 InMemoryChannelKafkaChannel 채널 유형이 지원됩니다.

5.6.3.1. 기본 채널 구현 구성

사전 요구 사항

  • OpenShift Container Platform에 대한 관리자 권한이 있습니다.
  • OpenShift Serverless Operator 및 Knative Eventing을 클러스터에 설치했습니다.
  • Kafka 채널을 기본 채널 구현으로 사용하려면 클러스터에 KnativeKafka CR도 설치해야 합니다.

절차

  • KnativeEventing 사용자 정의 리소스를 수정하여 default-ch-webhook 구성 맵에 대한 구성 세부 정보를 추가합니다.

    apiVersion: operator.knative.dev/v1alpha1
    kind: KnativeEventing
    metadata:
      name: knative-eventing
      namespace: knative-eventing
    spec:
      config: 1
        default-ch-webhook: 2
          default-ch-config: |
            clusterDefault: 3
              apiVersion: messaging.knative.dev/v1
              kind: InMemoryChannel
              spec:
                delivery:
                  backoffDelay: PT0.5S
                  backoffPolicy: exponential
                  retry: 5
            namespaceDefaults: 4
              my-namespace:
                apiVersion: messaging.knative.dev/v1beta1
                kind: KafkaChannel
                spec:
                  numPartitions: 1
                  replicationFactor: 1
    1
    spec.config에서 수정된 구성을 추가할 구성 맵을 지정할 수 있습니다.
    2
    default-ch-webhook 구성 맵을 사용하여 클러스터 또는 하나 이상의 네임스페이스에 대한 기본 채널 구현을 지정할 수 있습니다.
    3
    클러스터 수준 기본 채널 유형 구성입니다. 이 예제에서 클러스터에 대한 기본 채널 구현은 InMemoryChannel입니다.
    4
    네임스페이스 범위의 기본 채널 유형 구성입니다. 이 예제에서 my-namespace 네임스페이스의 기본 채널 구현은 KafkaChannel입니다.
    중요

    네임스페이스별 기본값을 구성하면 클러스터 수준 설정을 덮어씁니다.

5.6.4. Knative Kafka 채널의 보안 구성

5.6.4.1. Kafka 채널의 TLS 인증 구성

TLS( Transport Layer Security )는 Apache Kafka 클라이언트 및 서버에서 Knative와 Kafka 간 트래픽을 암호화하고 인증을 위해 사용합니다. TLS는 Knative Kafka에서 지원되는 유일한 트래픽 암호화 방법입니다.

사전 요구 사항

  • OpenShift Container Platform에 대한 클러스터 또는 전용 관리자 권한이 있어야 합니다.
  • OpenShift Serverless Operator, Knative Eventing, KnativeKafka CR이 OpenShift Container Platform 클러스터에 설치되어 있습니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
  • Kafka 클러스터 CA 인증서가 .pem 파일로 저장되어 있습니다.
  • Kafka 클러스터 클라이언트 인증서와 키가 .pem 파일로 저장되어 있습니다.
  • OpenShift CLI(oc)를 설치합니다.

절차

  1. 선택한 네임스페이스에서 인증서 파일을 시크릿으로 생성합니다.

    $ oc create secret -n <namespace> generic <kafka_auth_secret> \
      --from-file=ca.crt=caroot.pem \
      --from-file=user.crt=certificate.pem \
      --from-file=user.key=key.pem
    중요

    키 이름 ca.crt,user.crt, user.key를 사용합니다. 이 값은 변경하지 마십시오.

  2. KnativeKafka 사용자 정의 리소스 편집을 시작합니다.

    $ oc edit knativekafka
  3. 시크릿 및 시크릿의 네임스페이스를 참조합니다.

    apiVersion: operator.serverless.openshift.io/v1alpha1
    kind: KnativeKafka
    metadata:
      namespace: knative-eventing
      name: knative-kafka
    spec:
      channel:
        authSecretName: <kafka_auth_secret>
        authSecretNamespace: <kafka_auth_secret_namespace>
        bootstrapServers: <bootstrap_servers>
        enabled: true
      source:
        enabled: true
    참고

    부트스트랩 서버에서 일치하는 포트를 지정해야 합니다.

    예를 들면 다음과 같습니다.

    apiVersion: operator.serverless.openshift.io/v1alpha1
    kind: KnativeKafka
    metadata:
      namespace: knative-eventing
      name: knative-kafka
    spec:
      channel:
        authSecretName: tls-user
        authSecretNamespace: kafka
        bootstrapServers: eventing-kafka-bootstrap.kafka.svc:9094
        enabled: true
      source:
        enabled: true

5.6.4.2. Kafka 채널의 SASL 인증 구성

SASL( Simple Authentication and Security Layer )은 Apache Kafka에서 인증을 위해 사용됩니다. 클러스터에서 SASL 인증을 사용하는 경우 사용자는 Kafka 클러스터와 통신하기 위해 Knative에 인증 정보를 제공해야 합니다. 그러지 않으면 이벤트를 생성하거나 사용할 수 없습니다.

사전 요구 사항

  • OpenShift Container Platform에 대한 클러스터 또는 전용 관리자 권한이 있어야 합니다.
  • OpenShift Serverless Operator, Knative Eventing, KnativeKafka CR이 OpenShift Container Platform 클러스터에 설치되어 있습니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
  • Kafka 클러스터의 사용자 이름과 암호가 있습니다.
  • 사용할 SASL 메커니즘을 선택했습니다(예: PLAIN,SCRAM-SHA-256 또는 SCRAM-SHA-512 ).
  • TLS가 활성화된 경우 Kafka 클러스터의 ca.crt 인증서 파일도 필요합니다.
  • OpenShift CLI(oc)를 설치합니다.

절차

  1. 선택한 네임스페이스에서 인증서 파일을 시크릿으로 생성합니다.

    $ oc create secret -n <namespace> generic <kafka_auth_secret> \
      --from-file=ca.crt=caroot.pem \
      --from-literal=password="SecretPassword" \
      --from-literal=saslType="SCRAM-SHA-512" \
      --from-literal=user="my-sasl-user"
    • 키 이름 ca.crt,암호, sasl.mechanism 을 사용합니다. 이 값은 변경하지 마십시오.
    • 공용 CA 인증서와 함께 SASL을 사용하려면 시크릿을 생성할 때 ca.crt 인수 대신 tls.enabled=true 플래그를 사용해야 합니다. 예를 들면 다음과 같습니다.

      $ oc create secret -n <namespace> generic <kafka_auth_secret> \
        --from-literal=tls.enabled=true \
        --from-literal=password="SecretPassword" \
        --from-literal=saslType="SCRAM-SHA-512" \
        --from-literal=user="my-sasl-user"
  2. KnativeKafka 사용자 정의 리소스 편집을 시작합니다.

    $ oc edit knativekafka
  3. 시크릿 및 시크릿의 네임스페이스를 참조합니다.

    apiVersion: operator.serverless.openshift.io/v1alpha1
    kind: KnativeKafka
    metadata:
      namespace: knative-eventing
      name: knative-kafka
    spec:
      channel:
        authSecretName: <kafka_auth_secret>
        authSecretNamespace: <kafka_auth_secret_namespace>
        bootstrapServers: <bootstrap_servers>
        enabled: true
      source:
        enabled: true
    참고

    부트스트랩 서버에서 일치하는 포트를 지정해야 합니다.

    예를 들면 다음과 같습니다.

    apiVersion: operator.serverless.openshift.io/v1alpha1
    kind: KnativeKafka
    metadata:
      namespace: knative-eventing
      name: knative-kafka
    spec:
      channel:
        authSecretName: scram-user
        authSecretNamespace: kafka
        bootstrapServers: eventing-kafka-bootstrap.kafka.svc:9093
        enabled: true
      source:
        enabled: true

5.7. 서브스크립션

5.7.1. 서브스크립션 생성 및 관리

채널 및 이벤트 싱크를 생성한 후 이벤트 전달을 활성화하는 서브스크립션을 생성할 수 있습니다. 서브스크립션을 생성하여 채널을 지정하는 Subscription 오브젝트를 구성하여 이벤트를 전달할 수 있습니다.

5.7.1.1. 웹 콘솔을 사용하여 서브스크립션 생성

채널 및 이벤트 싱크를 생성한 후 이벤트 전달을 활성화하는 서브스크립션을 생성할 수 있습니다. OpenShift Container Platform 웹 콘솔을 사용하면 간소화되고 직관적인 사용자 인터페이스를 제공하여 서브스크립션을 생성할 수 있습니다.

사전 요구 사항

  • OpenShift Serverless Operator, Knative Serving, Knative Eventing이 OpenShift Container Platform 클러스터에 설치되어 있습니다.
  • 웹 콘솔에 로그인했습니다.
  • 이벤트 싱크(예: Knative 서비스) 및 채널을 생성했습니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.

절차

  1. 개발자 화면에서 토폴로지 페이지로 이동합니다.
  2. 다음 방법 중 하나를 사용하여 서브스크립션을 생성합니다.

    1. 서브스크립션을 생성할 채널 위로 마우스 커서를 이동하고 화살표를 끕니다. 서브스크립션 추가 옵션이 표시됩니다.

      채널에 대한 서브스크립션 생성
      1. Subscriber 목록에서 싱크를 선택합니다.
      2. 추가를 클릭합니다.
    2. 채널과 동일한 네임스페이스 또는 프로젝트의 토폴로지 보기에서 서비스를 사용할 수 있는 경우, 서브스크립션을 생성할 채널을 클릭하고 화살표를 서비스로 직접 끌어 채널에서 해당 서비스로의 서브스크립션을 즉시 생성합니다.

검증

  • 서브스크립션이 생성되면 토폴로지 보기에 채널을 서비스에 연결하는 선이 표시되어 이를 확인할 수 있습니다.

    토폴로지 보기의 서브스크립션

5.7.1.2. YAML을 사용하여 서브스크립션 생성

채널 및 이벤트 싱크를 생성한 후 이벤트 전달을 활성화하는 서브스크립션을 생성할 수 있습니다. YAML 파일을 사용하여 Knative 리소스를 생성하면 선언적 API를 사용하므로 서브스크립션을 선언적으로 및 재현 가능한 방식으로 설명할 수 있습니다. YAML을 사용하여 서브스크립션을 생성하려면 Subscription 오브젝트를 정의하는 YAML 파일을 생성한 다음 oc apply 명령을 사용하여 적용해야 합니다.

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Eventing이 클러스터에 설치되어 있습니다.
  • OpenShift CLI(oc)를 설치합니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.

절차

  • 서브스크립션 오브젝트를 생성합니다.

    • YAML 파일을 생성하고 다음 샘플 코드를 여기에 복사합니다.

      apiVersion: messaging.knative.dev/v1beta1
      kind: Subscription
      metadata:
        name: my-subscription 1
        namespace: default
      spec:
        channel: 2
          apiVersion: messaging.knative.dev/v1beta1
          kind: Channel
          name: example-channel
        delivery: 3
          deadLetterSink:
            ref:
              apiVersion: serving.knative.dev/v1
              kind: Service
              name: error-handler
        subscriber: 4
          ref:
            apiVersion: serving.knative.dev/v1
            kind: Service
            name: event-display
      1
      서브스크립션 이름입니다.
      2
      서브스크립션이 연결되는 채널의 구성 설정입니다.
      3
      이벤트 전달을 위한 구성 설정입니다. 이 설정은 구독자에게 전달할 수 없는 이벤트에 어떤 일이 발생하는지 스브스크립션에 알립니다. 이 값을 구성하면 사용할 수 없는 이벤트가 deadLetterSink로 전송됩니다. 이벤트가 삭제되고 이벤트 재전송이 시도되지 않으며 시스템에 오류가 기록됩니다. deadLetterSink 값은 대상이어야 합니다.
      4
      구독자에 대한 구성 설정입니다. 채널에서 이벤트가 전달되는 이벤트 싱크입니다.
    • YAML 파일을 적용합니다.

      $ oc apply -f <filename>

5.7.1.3. Knative CLI를 사용하여 서브스크립션 생성

채널 및 이벤트 싱크를 생성한 후 이벤트 전달을 활성화하는 서브스크립션을 생성할 수 있습니다. Knative(kn) CLI를 사용하여 서브스크립션을 생성하면 YAML 파일을 직접 수정하는 것보다 더 간소화되고 직관적인 사용자 인터페이스를 제공합니다. kn subscription create 명령을 적절한 플래그와 함께 사용하여 서브스크립션을 생성할 수 있습니다.

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Eventing이 OpenShift Container Platform 클러스터에 설치되어 있습니다.
  • Knative(kn) CLI가 설치되어 있습니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.

절차

  • 싱크를 채널에 연결하는 서브스크립션을 생성합니다.

    $ kn subscription create <subscription_name> \
      --channel <group:version:kind>:<channel_name> \ 1
      --sink <sink_prefix>:<sink_name> \ 2
      --sink-dead-letter <sink_prefix>:<sink_name> 3
    1
    --channel은 처리해야 하는 클라우드 이벤트의 소스를 지정합니다. 채널 이름을 제공해야 합니다. 채널 사용자 정의 리소스에서 지원하는 기본 InMemoryChannel 채널을 사용하지 않는 경우 Channel 이름 앞에 지정된 채널 유형에 대해 <group:version:kind>를 추가해야 합니다. 예를 들어 Kafka 백업 채널의 경우 messaging.knative.dev:v1beta1:KafkaChannel이 됩니다.
    2
    --sink는 이벤트를 전달해야 하는 대상 대상을 지정합니다. 기본적으로 <sink_name>은 서브스크립션과 동일한 네임스페이스에서 이 이름의 Knative 서비스로 해석됩니다. 다음 접두사 중 하나를 사용하여 싱크 유형을 지정할 수 있습니다.
    ksvc
    Knative 서비스입니다.
    channel
    대상으로 사용해야 하는 채널입니다. 여기에서는 기본 채널 유형만 참조할 수 있습니다.
    broker
    Eventing 브로커입니다.
    3
    선택 사항: --sink-dead-letter는 이벤트를 전달하지 못하는 경우 이벤트를 전송해야 하는 싱크를 지정하는 데 사용할 선택적 플래그입니다. 자세한 내용은 OpenShift Serverless Event 제공 설명서를 참조하십시오.

    명령 예

    $ kn subscription create mysubscription --channel mychannel --sink ksvc:event-display

    출력 예

    Subscription 'mysubscription' created in namespace 'default'.

검증

  • 채널이 서브스크립션을 통해 이벤트 싱크 또는 구독자에 연결되어 있는지 확인하려면 기존 서브스크립션을 나열하고 출력을 검사합니다.

    $ kn subscription list

    출력 예

    NAME            CHANNEL             SUBSCRIBER           REPLY   DEAD LETTER SINK   READY   REASON
    mysubscription   Channel:mychannel   ksvc:event-display                              True

서브스크립션 삭제

  • 서브스크립션을 삭제합니다.

    $ kn subscription delete <subscription_name>

5.7.1.4. Knative CLI를 사용하여 서브스크립션 설명

kn subscription describe 명령을 사용하여 Knative(kn) CLI를 사용하여 터미널에서 서브스크립션에 대한 정보를 출력할 수 있습니다. Knative CLI를 사용하여 서브스크립션을 설명하는 경우 YAML 파일을 직접 보는 것보다 더 간소화되고 직관적인 사용자 인터페이스를 제공합니다.

사전 요구 사항

  • Knative(kn) CLI가 설치되어 있습니다.
  • 클러스터에 서브스크립션이 생성되어 있습니다.

절차

  • 서브스크립션을 설명합니다.

    $ kn subscription describe <subscription_name>

    출력 예

    Name:            my-subscription
    Namespace:       default
    Annotations:     messaging.knative.dev/creator=openshift-user, messaging.knative.dev/lastModifier=min ...
    Age:             43s
    Channel:         Channel:my-channel (messaging.knative.dev/v1)
    Subscriber:
      URI:           http://edisplay.default.example.com
    Reply:
      Name:          default
      Resource:      Broker (eventing.knative.dev/v1)
    DeadLetterSink:
      Name:          my-sink
      Resource:      Service (serving.knative.dev/v1)
    
    Conditions:
      OK TYPE                  AGE REASON
      ++ Ready                 43s
      ++ AddedToChannel        43s
      ++ ChannelReady          43s
      ++ ReferencesResolved    43s

5.7.1.5. Knative CLI를 사용하여 서브스크립션 나열

kn subscription list 명령을 사용하여 Knative(kn) CLI를 사용하여 클러스터의 기존 서브스크립션을 나열할 수 있습니다. Knative CLI를 사용하여 서브스크립션을 나열하면 간소화되고 직관적인 사용자 인터페이스가 제공됩니다.

사전 요구 사항

  • Knative(kn) CLI가 설치되어 있습니다.

절차

  • 클러스터의 서브스크립션을 나열합니다.

    $ kn subscription list

    출력 예

    NAME             CHANNEL             SUBSCRIBER           REPLY   DEAD LETTER SINK   READY   REASON
    mysubscription   Channel:mychannel   ksvc:event-display                              True

5.7.1.6. Knative CLI를 사용하여 서브스크립션 업데이트

kn subscription update 명령과 적절한 플래그를 사용하여 Knative(kn) CLI를 사용하여 터미널에서 서브스크립션을 업데이트할 수 있습니다. Knative CLI를 사용하여 서브스크립션을 업데이트하는 경우 YAML 파일을 직접 업데이트하는 것보다 더 효율적이고 직관적인 사용자 인터페이스를 제공합니다.

사전 요구 사항

  • Knative(kn) CLI가 설치되어 있습니다.
  • 서브스크립션이 생성되어 있습니다.

절차

  • 서브스크립션을 업데이트합니다.

    $ kn subscription update <subscription_name> \
      --sink <sink_prefix>:<sink_name> \ 1
      --sink-dead-letter <sink_prefix>:<sink_name> 2
    1
    --sink는 이벤트를 전달해야 하는 업데이트된 대상을 지정합니다. 다음 접두사 중 하나를 사용하여 싱크 유형을 지정할 수 있습니다.
    ksvc
    Knative 서비스입니다.
    channel
    대상으로 사용해야 하는 채널입니다. 여기에서는 기본 채널 유형만 참조할 수 있습니다.
    broker
    Eventing 브로커입니다.
    2
    선택 사항: --sink-dead-letter는 이벤트를 전달하지 못하는 경우 이벤트를 전송해야 하는 싱크를 지정하는 데 사용할 선택적 플래그입니다. 자세한 내용은 OpenShift Serverless Event 제공 설명서를 참조하십시오.

    명령 예

    $ kn subscription update mysubscription --sink ksvc:event-display

5.7.1.7. 다음 단계

5.8. 이벤트 검색

5.8.1. 이벤트 소스 및 이벤트 소스 유형 나열

존재하지 않거나 OpenShift Container Platform 클러스터에서 사용할 수 있는 모든 이벤트 소스 또는 이벤트 소스 유형의 목록을 볼 수 있습니다. Knative (kn) CLI 또는 OpenShift Container Platform 웹 콘솔의 개발자 화면을 사용하여 사용 가능한 이벤트 소스 또는 이벤트 소스 유형을 나열할 수 있습니다.

5.8.2. 명령줄에서 이벤트 소스 유형 나열

Knative(kn) CLI를 사용하면 간소화되고 직관적인 사용자 인터페이스를 통해 클러스터에서 사용 가능한 이벤트 소스 유형을 볼 수 있습니다.

5.8.2.1. Knative CLI를 사용하여 사용 가능한 이벤트 소스 유형 나열

kn source list-types CLI 명령을 사용하여 클러스터에서 생성하고 사용할 수 있는 이벤트 소스 유형을 나열할 수 있습니다.

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Eventing이 클러스터에 설치되어 있습니다.
  • Knative(kn) CLI가 설치되어 있습니다.

절차

  1. 터미널에서 사용 가능한 이벤트 소스 유형을 나열합니다.

    $ kn source list-types

    출력 예

    TYPE              NAME                                            DESCRIPTION
    ApiServerSource   apiserversources.sources.knative.dev            Watch and send Kubernetes API events to a sink
    PingSource        pingsources.sources.knative.dev                 Periodically send ping events to a sink
    SinkBinding       sinkbindings.sources.knative.dev                Binding for connecting a PodSpecable to a sink

  2. 선택 사항: 사용 가능한 이벤트 소스 유형을 YAML 형식으로 나열할 수도 있습니다.

    $ kn source list-types -o yaml

5.8.3. 개발자 화면에서 이벤트 소스 유형 나열

클러스터에서 사용 가능한 모든 이벤트 소스 유형 목록을 볼 수 있습니다. OpenShift Container Platform 웹 콘솔을 사용하면 사용 가능한 이벤트 소스 유형을 볼 수 있는 간소화되고 직관적인 사용자 인터페이스를 제공합니다.

5.8.3.1. 개발자 화면 내에서 사용 가능한 이벤트 소스 유형 보기

사전 요구 사항

  • OpenShift Container Platform 웹 콘솔에 로그인했습니다.
  • OpenShift Serverless Operator 및 Knative Eventing이 OpenShift Container Platform 클러스터에 설치되어 있습니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.

절차

  1. 개발자 화면에 액세스합니다.
  2. +추가를 클릭합니다.
  3. 이벤트 소스를 클릭합니다.
  4. 사용 가능한 이벤트 소스 유형을 봅니다.

5.8.4. 명령줄에서 이벤트 소스 나열

Knative(kn) CLI를 사용하면 간소화되고 직관적인 사용자 인터페이스를 제공하여 클러스터의 기존 이벤트 소스를 볼 수 있습니다.

5.8.4.1. Knative CLI를 사용하여 사용 가능한 이벤트 소스 나열

kn source list 명령을 사용하여 기존 이벤트 소스를 나열할 수 있습니다.

사전 요구 사항

  • OpenShift Serverless Operator 및 Knative Eventing이 클러스터에 설치되어 있습니다.
  • Knative(kn) CLI가 설치되어 있습니다.

절차

  1. 터미널에서 기존 이벤트 소스를 나열합니다.

    $ kn source list

    출력 예

    NAME   TYPE              RESOURCE                               SINK         READY
    a1     ApiServerSource   apiserversources.sources.knative.dev   ksvc:eshow2   True
    b1     SinkBinding       sinkbindings.sources.knative.dev       ksvc:eshow3   False
    p1     PingSource        pingsources.sources.knative.dev        ksvc:eshow1   True

  2. 선택 사항: --type 플래그를 사용하여 특정 유형의 이벤트 소스만 나열할 수 있습니다.

    $ kn source list --type <event_source_type>

    명령 예

    $ kn source list --type PingSource

    출력 예

    NAME   TYPE              RESOURCE                               SINK         READY
    p1     PingSource        pingsources.sources.knative.dev        ksvc:eshow1   True

5.9. 이벤트 구성 튜닝

5.9.1. Knative Eventing 시스템 배포 구성 덮어쓰기

KnativeEventing CR(사용자 정의 리소스)에서 deployments 사양을 수정하여 일부 특정 배포에 대한 기본 구성을 덮어쓸 수 있습니다. 현재는 기본 구성 설정을 재정의하는 것은 eventing-controller,eventing-webhook, imc-controller 필드와 프로브 의 준비 및 활성 상태 필드에 대해 지원됩니다.

중요

replicas 사양은 HPA(Horizond Pod Autoscaler)를 사용하는 배포의 복제본 수를 재정의할 수 없으며 eventing-webhook 배포에 작동하지 않습니다.

5.9.1.1. 배포 구성 덮어쓰기

다음 예에서 KnativeEventing CR은 eventing-controller 배포를 재정의하여 다음을 수행합니다.

  • readiness 프로브 시간 초과 eventing-controller 가 10초로 설정됩니다.
  • 배포에 CPU 및 메모리 리소스 제한이 지정되었습니다.
  • 배포에는 3개의 복제본이 있습니다.
  • example-label: 레이블 레이블이 추가되었습니다.
  • example-annotation: 주석 주석이 추가되었습니다.
  • nodeSelector 필드는 disktype: hdd 레이블이 있는 노드를 선택하도록 설정됩니다.

KnativeEventing CR 예

apiVersion: operator.knative.dev/v1beta1
kind: KnativeEventing
metadata:
  name: knative-eventing
  namespace: knative-eventing
spec:
  deployments:
  - name: eventing-controller
    readinessProbes: 1
      - container: controller
        timeoutSeconds: 10
    resources:
    - container: eventing-controller
      requests:
        cpu: 300m
        memory: 100Mi
      limits:
        cpu: 1000m
        memory: 250Mi
    replicas: 3
    labels:
      example-label: label
    annotations:
      example-annotation: annotation
    nodeSelector:
      disktype: hdd

1
준비 상태 및 활성 상태 프로브 덮어쓰기를 사용하여 프로브에 지정된 대로 Kubernetes API에 지정된 대로 배포 컨테이너에 있는 프로브의 모든 필드를 재정의할 수 있습니다. 그러나 프로브 처리기와 관련된 필드인 exec,grpc,httpGet, tcpSocket.
참고

KnativeEventing CR 레이블 및 주석 설정은 배포 자체와 결과 Pod 모두에 대한 배포의 라벨 및 주석을 재정의합니다.

5.9.2. 고가용성

고가용성(HA)은 중단이 발생하는 경우 API가 작동하도록 하는 데 도움이 되는 Kubernetes API의 표준 기능입니다. HA 배포에서 활성 컨트롤러가 충돌하거나 삭제되면 다른 컨트롤러를 쉽게 사용할 수 있습니다. 이 컨트롤러는 현재 사용할 수 없는 컨트롤러에서 서비스하고 있는 API를 대신 처리합니다.

OpenShift Serverless의 HA는 Knative Serving 또는 Eventing 컨트롤 플레인을 설치하면 기본적으로 활성화되는 리더 선택을 통해 사용할 수 있습니다. 리더 선택 HA 패턴을 사용하는 경우에는 요구하기 전에 컨트롤러의 인스턴스가 이미 예약되어 클러스터 내에서 실행됩니다. 이러한 컨트롤러 인스턴스는 리더 선택 잠금이라는 공유 리소스를 사용하기 위해 경쟁합니다. 특정 시점에 리더 선택 잠금 리소스에 액세스할 수 있는 컨트롤러의 인스턴스를 리더라고 합니다.

OpenShift Serverless의 HA는 Knative Serving 또는 Eventing 컨트롤 플레인을 설치하면 기본적으로 활성화되는 리더 선택을 통해 사용할 수 있습니다. 리더 선택 HA 패턴을 사용하는 경우에는 요구하기 전에 컨트롤러의 인스턴스가 이미 예약되어 클러스터 내에서 실행됩니다. 이러한 컨트롤러 인스턴스는 리더 선택 잠금이라는 공유 리소스를 사용하기 위해 경쟁합니다. 특정 시점에 리더 선택 잠금 리소스에 액세스할 수 있는 컨트롤러의 인스턴스를 리더라고 합니다.

5.9.2.1. Knative Eventing의 고가용성 복제본 구성

HA(고가용성)는 기본적으로 두 개의 복제본을 사용하도록 구성된 Knative Eventing eventing-controller,eventing-webhook,imc-controller,imc-dispatcher, mt-broker-controller 구성 요소에 대해 기본적으로 사용할 수 있습니다. KnativeEventing CR(사용자 정의 리소스)의 spec.high-availability.replicas 값을 수정하여 이러한 구성 요소의 복제본 수를 변경할 수 있습니다.

참고

Knative Eventing의 경우 mt-broker-filtermt-broker-ingress 배포는 HA에 의해 확장되지 않습니다. 여러 배포가 필요한 경우 이러한 구성 요소를 수동으로 스케일링합니다.

사전 요구 사항

  • 클러스터 관리자 액세스 권한이 있는 OpenShift Container Platform 계정에 액세스할 수 있습니다.
  • OpenShift Serverless Operator 및 Knative Eventing이 클러스터에 설치되어 있습니다.

프로세스

  1. OpenShift Container Platform 웹 콘솔의 관리자 화면에서 OperatorHub설치된 Operator로 이동합니다.
  2. knative-serving 네임스페이스를 선택합니다.
  3. OpenShift Serverless Operator의 제공되는 API 목록에서 Knative Eventing을 클릭하여 Knative Eventing 탭으로 이동합니다.
  4. knative-eventing을 클릭한 다음 knative-eventing 페이지의 YAML 탭으로 이동합니다.

    Knative Eventing YAML
  5. KnativeEventing CR의 복제본 수를 수정합니다.

    YAML의 예

    apiVersion: operator.knative.dev/v1alpha1
    kind: KnativeEventing
    metadata:
      name: knative-eventing
      namespace: knative-eventing
    spec:
      high-availability:
        replicas: 3

5.9.2.2. Knative Kafka의 고가용성 복제본 구성

기본적으로 각 복제본이 두 개로 구성된 Knative Kafka kafka-controllerkafka-webhook-eventing 구성 요소에 HA(고가용성)를 사용할 수 있습니다. KnativeKafka CR(사용자 정의 리소스)의 spec.high-availability.replicas 값을 수정하여 이러한 구성 요소의 복제본 수를 변경할 수 있습니다.

사전 요구 사항

  • 클러스터 관리자 액세스 권한이 있는 OpenShift Container Platform 계정에 액세스할 수 있습니다.
  • OpenShift Serverless Operator 및 Knative Kafka가 클러스터에 설치되어 있습니다.

절차

  1. OpenShift Container Platform 웹 콘솔의 관리자 화면에서 OperatorHub설치된 Operator로 이동합니다.
  2. knative-serving 네임스페이스를 선택합니다.
  3. OpenShift Serverless Operator의 제공되는 API 목록에서 Knative Kafka를 클릭하여 Knative Kafka 탭으로 이동합니다.
  4. knative-kafka를 클릭한 다음 knative-kafka 페이지의 YAML 탭으로 이동합니다.

    Knative Kafka YAML
  5. KnativeKafka CR의 복제본 수를 수정합니다.

    YAML의 예

    apiVersion: operator.serverless.openshift.io/v1alpha1
    kind: KnativeKafka
    metadata:
      name: knative-kafka
      namespace: knative-eventing
    spec:
      high-availability:
        replicas: 3

5.10. kn-event 플러그인

5.10.1. Knative CLI 플러그인

Knative(kn) CLI는 플러그인 사용을 지원하므로 사용자 지정 명령 및 코어 배포에 포함되지 않은 기타 공유 명령을 추가하여 kn 설치 기능을 확장할 수 있습니다. Knative(kn) CLI 플러그인은 기본 kn 기능과 동일한 방식으로 사용됩니다.

현재 Red Hat은 kn-source-kafka 플러그인 및 kn-event 플러그인을 지원합니다.

중요

kn-event 플러그인은 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.

Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.

5.10.1.1. kn-event 플러그인을 사용하여 이벤트 빌드

kn event build 명령의 빌더와 유사한 인터페이스를 사용하여 이벤트를 빌드할 수 있습니다. 그런 다음 나중에 해당 이벤트를 보내거나 다른 컨텍스트에서 사용할 수 있습니다.

사전 요구 사항

  • Knative(kn) CLI가 설치되어 있습니다.

절차

  • 이벤트를 빌드합니다.

    $ kn event build --field <field-name>=<value> --type <type-name> --id <id> --output <format>

    다음과 같습니다.

    • --field 플래그는 이벤트에 데이터를 필드-값 쌍으로 추가합니다. 여러 번 사용할 수 있습니다.
    • --type 플래그를 사용하면 이벤트 유형을 지정하는 문자열을 지정할 수 있습니다.
    • --id 플래그는 이벤트의 ID를 지정합니다.
    • json 또는 yaml 인수를 --output 플래그와 함께 사용하여 이벤트의 출력 형식을 변경할 수 있습니다.

      이러한 모든 플래그는 선택 사항입니다.

      간단한 이벤트 만들기

      $ kn event build -o yaml

      YAML 형식의 결과 이벤트

      data: {}
      datacontenttype: application/json
      id: 81a402a2-9c29-4c27-b8ed-246a253c9e58
      source: kn-event/v0.4.0
      specversion: "1.0"
      time: "2021-10-15T10:42:57.713226203Z"
      type: dev.knative.cli.plugin.event.generic

      샘플 트랜잭션 이벤트 빌드

      $ kn event build \
          --field operation.type=local-wire-transfer \
          --field operation.amount=2345.40 \
          --field operation.from=87656231 \
          --field operation.to=2344121 \
          --field automated=true \
          --field signature='FGzCPLvYWdEgsdpb3qXkaVp7Da0=' \
          --type org.example.bank.bar \
          --id $(head -c 10 < /dev/urandom | base64 -w 0) \
          --output json

      JSON 형식의 결과 이벤트

      {
        "specversion": "1.0",
        "id": "RjtL8UH66X+UJg==",
        "source": "kn-event/v0.4.0",
        "type": "org.example.bank.bar",
        "datacontenttype": "application/json",
        "time": "2021-10-15T10:43:23.113187943Z",
        "data": {
          "automated": true,
          "operation": {
            "amount": "2345.40",
            "from": 87656231,
            "to": 2344121,
            "type": "local-wire-transfer"
          },
          "signature": "FGzCPLvYWdEgsdpb3qXkaVp7Da0="
        }
      }

5.10.1.2. kn-event 플러그인을 사용하여 이벤트 전송

kn event send 명령을 사용하여 이벤트를 보낼 수 있습니다. 이벤트는 공개적으로 사용 가능한 주소로 전송하거나 Kubernetes 서비스 및 Knative 서비스, 브로커 및 채널과 같은 클러스터 내부의 주소 지정 가능한 리소스로 보낼 수 있습니다. 이 명령은 kn event build 명령과 동일한 빌더와 유사한 인터페이스를 사용합니다.

사전 요구 사항

  • Knative(kn) CLI가 설치되어 있습니다.

절차

  • 이벤트 보내기:

    $ kn event send --field <field-name>=<value> --type <type-name> --id <id> --to-url <url> --to <cluster-resource> --namespace <namespace>

    다음과 같습니다.

    • --field 플래그는 이벤트에 데이터를 필드-값 쌍으로 추가합니다. 여러 번 사용할 수 있습니다.
    • --type 플래그를 사용하면 이벤트 유형을 지정하는 문자열을 지정할 수 있습니다.
    • --id 플래그는 이벤트의 ID를 지정합니다.
    • 공개적으로 액세스 가능한 대상으로 이벤트를 보내는 경우 --to-url 플래그를 사용하여 URL을 지정합니다.
    • 이벤트를 클러스터 내부 Kubernetes 리소스로 보내는 경우 --to 플래그를 사용하여 대상을 지정합니다.

      • < Kind>:<ApiVersion>:<name > 형식을 사용하여 Kubernetes 리소스를 지정합니다.
    • --namespace 플래그는 네임스페이스를 지정합니다. 생략하면 현재 컨텍스트에서 네임스페이스가 가져옵니다.

      이러한 모든 플래그는 대상 사양을 제외하고 모두 선택 사항입니다. 여기서 --to-url 또는 --to.

      다음 예제에서는 URL로 이벤트를 전송하는 방법을 보여줍니다.

      명령 예

      $ kn event send \
          --field player.id=6354aa60-ddb1-452e-8c13-24893667de20 \
          --field player.game=2345 \
          --field points=456 \
          --type org.example.gaming.foo \
          --to-url http://ce-api.foo.example.com/

      다음 예제에서는 클러스터 내 리소스로 이벤트를 전송하는 방법을 보여줍니다.

      명령 예

      $ kn event send \
          --type org.example.kn.ping \
          --id $(uuidgen) \
          --field event.type=test \
          --field event.data=98765 \
          --to Service:serving.knative.dev/v1:event-display

6장. 함수

6.1. OpenShift Serverless Functions 설정

애플리케이션 코드 배포 프로세스를 개선하기 위해 OpenShift Serverless를 사용하여 이벤트 중심 기능을 OpenShift Container Platform에서 Knative 서비스로 배포할 수 있습니다. 함수를 개발하려면 설정 단계를 완료해야 합니다.

6.1.1. 사전 요구 사항

클러스터에서 OpenShift Serverless Functions을 사용하려면 다음 단계를 완료해야 합니다.

  • OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.

    참고

    함수는 Knative 서비스로 배포됩니다. 함수와 함께 이벤트 중심 아키텍처를 사용하려면 Knative Eventing도 설치해야 합니다.

  • oc CLI 가 설치되어 있어야 합니다.
  • Knative(kn) CLI 가 설치되어 있습니다. Knative CLI를 설치하면 함수를 생성하고 관리하는 데 사용할 수 있는 kn func 명령을 사용할 수 있습니다.
  • Docker Container Engine 또는 Podman 버전 3.4.7 이상이 설치되어 있습니다.
  • OpenShift Container Registry와 같이 사용 가능한 이미지 레지스트리에 액세스할 수 있습니다.
  • Quay.io 를 이미지 레지스트리로 사용하는 경우 리포지토리가 비공개가 아니거나 Pod가 다른 보안 레지스트리의 이미지를 참조하도록 허용하는 OpenShift Container Platform 문서를 따르는지 확인해야 합니다.
  • OpenShift Container Registry를 사용하는 경우 클러스터 관리자가