8.2. Knative Kafka 구성

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

클러스터 관리자는 핵심 OpenShift Serverless 설치의 일부로 제공되는 Knative Eventing 구성 요소 외에도 KnativeKafka CR(사용자 정의 리소스)을 설치할 수 있습니다.

참고

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

KnativeKafka CR은 다음과 같은 추가 옵션을 사용자에게 제공합니다.

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

8.2.1. 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(oc) CLI를 설치했습니다.

절차

  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" \ 1
      --from-literal=user="my-sasl-user"
    1
    SASL 유형은 PLAIN,SCRAM-SHA-256 또는 SCRAM-SHA-512 일 수 있습니다.
  2. 다음 사양 구성이 포함되도록 Kafka 소스를 생성하거나 수정합니다.

    apiVersion: sources.knative.dev/v1beta1
    kind: KafkaSource
    metadata:
      name: example-source
    spec:
    ...
      net:
        sasl:
          enable: true
          user:
            secretKeyRef:
              name: <kafka_auth_secret>
              key: user
          password:
            secretKeyRef:
              name: <kafka_auth_secret>
              key: password
          type:
            secretKeyRef:
              name: <kafka_auth_secret>
              key: saslType
        tls:
          enable: true
          caCert: 1
            secretKeyRef:
              name: <kafka_auth_secret>
              key: ca.crt
    ...
    1
    Apache Kafka용 Red Hat OpenShift Streams와 같은 퍼블릭 클라우드 Kafka 서비스를 사용하는 경우에는 caCert 사양이 필요하지 않습니다.

8.2.2. Kafka 싱크에 대한 보안 구성

TLS( Transport Layer Security )는 Apache Kafka 클라이언트 및 서버에서 Knative와 Kafka 간 트래픽을 암호화하고 인증을 위해 사용합니다. TLS는 Knative Kafka에서 지원되는 유일한 트래픽 암호화 방법입니다.

SASL( Simple Authentication and Security Layer )은 Apache Kafka에서 인증을 위해 사용됩니다. 클러스터에서 SASL 인증을 사용하는 경우 사용자는 Kafka 클러스터와 통신하기 위해 Knative에 인증 정보를 제공해야 합니다. 그러지 않으면 이벤트를 생성하거나 사용할 수 없습니다.

사전 요구 사항

  • OpenShift Serverless Operator, Knative Eventing, KnativeKafka 사용자 정의 리소스(CR)가 OpenShift Container Platform 클러스터에 설치되어 있습니다.
  • Kafka 싱크는 KnativeKafka CR에서 활성화되어 있습니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
  • Kafka 클러스터 CA 인증서가 .pem 파일로 저장되어 있습니다.
  • Kafka 클러스터 클라이언트 인증서와 키가 .pem 파일로 저장되어 있습니다.
  • OpenShift(oc) CLI를 설치했습니다.
  • 사용할 SASL 메커니즘을 선택했습니다(예: PLAIN,SCRAM-SHA-256 또는 SCRAM-SHA-512 ).

절차

  1. KafkaSink 오브젝트와 동일한 네임스페이스에 인증서 파일을 시크릿으로 생성합니다.

    중요

    인증서 및 키는 PEM 형식이어야 합니다.

    • 암호화 없이 SASL을 사용한 인증의 경우:

      $ oc create secret -n <namespace> generic <secret_name> \
        --from-literal=protocol=SASL_PLAINTEXT \
        --from-literal=sasl.mechanism=<sasl_mechanism> \
        --from-literal=user=<username> \
        --from-literal=password=<password>
    • TLS를 사용한 SASL 및 암호화를 사용한 인증의 경우:

      $ oc create secret -n <namespace> generic <secret_name> \
        --from-literal=protocol=SASL_SSL \
        --from-literal=sasl.mechanism=<sasl_mechanism> \
        --from-file=ca.crt=<my_caroot.pem_file_path> \ 1
        --from-literal=user=<username> \
        --from-literal=password=<password>
      1
      퍼블릭 클라우드 관리 Kafka 서비스를 사용하는 경우 시스템의 루트 CA 세트(예: Red Hat OpenShift Streams for Apache Kafka)를 사용하도록 ca.crt 를 생략할 수 있습니다.
    • TLS를 사용한 인증 및 암호화의 경우:

      $ oc create secret -n <namespace> generic <secret_name> \
        --from-literal=protocol=SSL \
        --from-file=ca.crt=<my_caroot.pem_file_path> \ 1
        --from-file=user.crt=<my_cert.pem_file_path> \
        --from-file=user.key=<my_key.pem_file_path>
      1
      퍼블릭 클라우드 관리 Kafka 서비스를 사용하는 경우 시스템의 루트 CA 세트(예: Red Hat OpenShift Streams for Apache Kafka)를 사용하도록 ca.crt 를 생략할 수 있습니다.
  2. KafkaSink 오브젝트를 생성하거나 수정하고 auth 사양에서 보안에 대한 참조를 추가합니다.

    apiVersion: eventing.knative.dev/v1alpha1
    kind: KafkaSink
    metadata:
       name: <sink_name>
       namespace: <namespace>
    spec:
    ...
       auth:
         secret:
           ref:
             name: <secret_name>
    ...
  3. KafkaSink 오브젝트를 적용합니다.

    $ oc apply -f <filename>

8.2.3. Kafka 브로커 설정 구성

Kafka Broker 오브젝트에서 구성 맵을 생성하고 이 구성 맵을 참조하여 Kafka 브로커의 복제 요소, 부트스트랩 서버 및 Kafka 브로커의 주제 파티션 수를 구성할 수 있습니다.

사전 요구 사항

  • OpenShift Container Platform에 대한 클러스터 또는 전용 관리자 권한이 있어야 합니다.
  • OpenShift Serverless Operator, Knative Eventing, KnativeKafka 사용자 정의 리소스(CR)가 OpenShift Container Platform 클러스터에 설치되어 있습니다.
  • 프로젝트를 생성하거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
  • OpenShift CLI(oc)가 설치되어 있습니다.

절차

  1. kafka-broker-config 구성 맵을 수정하거나 다음 구성이 포함된 자체 구성 맵을 생성합니다.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: <config_map_name> 1
      namespace: <namespace> 2
    data:
      default.topic.partitions: <integer> 3
      default.topic.replication.factor: <integer> 4
      bootstrap.servers: <list_of_servers> 5
    1
    구성 맵 이름입니다.
    2
    구성 맵이 존재하는 네임스페이스입니다.
    3
    Kafka 브로커의 주제 파티션 수입니다. 이렇게 하면 이벤트를 브로커로 얼마나 빨리 보낼 수 있는지가 제어됩니다. 파티션 수가 많을 경우 더 많은 컴퓨팅 리소스가 필요합니다.
    4
    주제 메시지의 복제 요소. 이는 데이터 손실을 방지합니다. 복제 요인이 증가하려면 더 많은 컴퓨팅 리소스와 더 많은 스토리지가 필요합니다.
    5
    쉼표로 구분된 부트스트랩 서버 목록입니다. 이는 OpenShift Container Platform 클러스터 내부 또는 외부에 있을 수 있으며 브로커가 이벤트를 수신하고 이벤트를 보내는 Kafka 클러스터 목록입니다.
    중요

    default.topic.replication.factor 값은 클러스터의 Kafka 브로커 인스턴스 수보다 작거나 같아야 합니다. 예를 들어 Kafka 브로커가 하나만 있는 경우 default.topic.replication.factor 값은 "1" 을 초과해서는 안 됩니다.

    Kafka 브로커 구성 맵의 예

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: kafka-broker-config
      namespace: knative-eventing
    data:
      default.topic.partitions: "10"
      default.topic.replication.factor: "3"
      bootstrap.servers: "my-cluster-kafka-bootstrap.kafka:9092"

  2. 구성 맵을 적용합니다.

    $ oc apply -f <config_map_filename>
  3. Kafka Broker 오브젝트의 구성 맵을 지정합니다.

    Broker 오브젝트의 예

    apiVersion: eventing.knative.dev/v1
    kind: Broker
    metadata:
      name: <broker_name> 1
      namespace: <namespace> 2
      annotations:
        eventing.knative.dev/broker.class: Kafka 3
    spec:
      config:
        apiVersion: v1
        kind: ConfigMap
        name: <config_map_name> 4
        namespace: <namespace> 5
    ...

    1
    브로커 이름입니다.
    2
    브로커가 존재하는 네임스페이스입니다.
    3
    broker 클래스 주석입니다. 이 예제에서 브로커는 클래스 값 Kafka를 사용하는 Kafka 브로커입니다.
    4
    구성 맵 이름입니다.
    5
    구성 맵이 존재하는 네임스페이스입니다.
  4. 브로커를 적용합니다.

    $ oc apply -f <broker_filename>

추가 리소스

8.2.4. 추가 리소스