3.3. Apache Kafka의 싱크
Apache Kafka 싱크는 클러스터 관리자가 클러스터에서 Apache Kafka를 활성화한 경우 사용할 수 있는 이벤트 싱크 유형입니다. Kafka 싱크를 사용하여 이벤트 소스에서 Kafka 주제로 직접 이벤트를 보낼 수 있습니다.
3.3.1. YAML을 사용하여 Apache Kafka 싱크 생성
이벤트를 Kafka 항목에 보내는 Kafka 싱크를 생성할 수 있습니다. 기본적으로 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
)를 설치합니다.
절차
KafkaSink
오브젝트 정의를 YAML 파일로 생성합니다.Kafka 싱크 YAML
apiVersion: eventing.knative.dev/v1alpha1 kind: KafkaSink metadata: name: <sink-name> namespace: <namespace> spec: topic: <topic-name> bootstrapServers: - <bootstrap-server>
Kafka 싱크를 생성하려면
KafkaSink
YAML 파일을 적용합니다.$ oc apply -f <filename>
싱크가 사양에 지정되도록 이벤트 소스를 구성합니다.
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
3.3.2. OpenShift Container Platform 웹 콘솔을 사용하여 Apache Kafka의 이벤트 싱크 생성
OpenShift Container Platform 웹 콘솔의 개발자 화면을 사용하여 이벤트를 Kafka 항목에 보내는 Kafka 싱크를 생성할 수 있습니다. 기본적으로 Kafka 싱크는 구조화된 모드보다 효율적인 바이너리 콘텐츠 모드를 사용합니다.
개발자는 이벤트 싱크를 생성하여 특정 소스에서 이벤트를 수신하여 Kafka 주제로 보낼 수 있습니다.
사전 요구 사항
- OperatorHub에서 Apache Kafka API용 Knative Serving, Knative Eventing 및 Knative 브로커를 사용하여 OpenShift Serverless Operator를 설치했습니다.
- Kafka 환경에 Kafka 주제를 생성했습니다.
절차
- 개발자 화면에서 +추가 보기로 이동합니다.
- Eventing 카탈로그에서 이벤트 싱크 를 클릭합니다.
-
카탈로그 항목에서
KafkaSink
를 검색하고 클릭합니다. - 이벤트 싱크 생성을 클릭합니다.
양식 보기에서 호스트 이름과 포트의 조합인 부트스트랩 서버의 URL을 입력합니다.
- 이벤트 데이터를 보낼 항목의 이름을 입력합니다.
- 이벤트 싱크의 이름을 입력합니다.
- 생성을 클릭합니다.
검증
- 개발자 화면에서 토폴로지 보기로 이동합니다.
- 생성된 이벤트 싱크를 클릭하여 오른쪽 패널에서 세부 정보를 확인합니다.
3.3.3. Apache Kafka 싱크에 대한 보안 구성
TLS( Transport Layer Security )는 Apache Kafka 클라이언트와 서버에서 Knative와 Kafka 간의 트래픽을 암호화하고 인증에 사용됩니다. TLS는 Apache Kafka에 대한 Knative 브로커 구현에 대해 지원되는 유일한 트래픽 암호화 방법입니다.
SASL( Simple Authentication and Security Layer )은 Apache Kafka에서 인증을 위해 사용합니다. 클러스터에서 SASL 인증을 사용하는 경우 사용자가 Kafka 클러스터와 통신하기 위해 Knative에 인증 정보를 제공해야 합니다. 그렇지 않으면 이벤트를 생성하거나 사용할 수 없습니다.
사전 요구 사항
-
OpenShift Serverless Operator, Knative Eventing,
KnativeKafka
CR(사용자 정의 리소스)이 OpenShift Container Platform 클러스터에 설치되어 있습니다. -
KnativeKafka
CR에서 Kafka 싱크가 활성화되어 있습니다. - 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
-
.pem
파일로 저장된 Kafka 클러스터 CA 인증서가 있어야 합니다. -
Kafka 클러스터 클라이언트 인증서와
.pem
파일로 저장된 키가 있습니다. -
OpenShift(
oc
) CLI를 설치했습니다. -
사용할 SASL 메커니즘을 선택했습니다(예:
PLAIN
,SCRAM-SHA-256
또는SCRAM-SHA-512
).
절차
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를 사용하도록
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를 사용하도록
ca.crt
를 생략할 수 있습니다.
KafkaSink
오브젝트를 생성하거나 수정하고auth
사양에서 보안에 대한 참조를 추가합니다.apiVersion: eventing.knative.dev/v1alpha1 kind: KafkaSink metadata: name: <sink_name> namespace: <namespace> spec: ... auth: secret: ref: name: <secret_name> ...
KafkaSink
오브젝트를 적용합니다.$ oc apply -f <filename>